Midnight Commander for Win32
authorSteven Edwards <winehacker@gmail.com>
Sun, 30 Dec 2001 10:02:14 +0000 (10:02 +0000)
committerSteven Edwards <winehacker@gmail.com>
Sun, 30 Dec 2001 10:02:14 +0000 (10:02 +0000)
svn path=/trunk/; revision=2456

222 files changed:
rosapps/mc/Make.common [new file with mode: 0644]
rosapps/mc/Makefile [new file with mode: 0644]
rosapps/mc/Makefile.PC [new file with mode: 0644]
rosapps/mc/VERSION [new file with mode: 0644]
rosapps/mc/about-nls [new file with mode: 0644]
rosapps/mc/acconfig.h [new file with mode: 0644]
rosapps/mc/autogen.sh [new file with mode: 0644]
rosapps/mc/config.cache [new file with mode: 0644]
rosapps/mc/config.h [new file with mode: 0644]
rosapps/mc/config.h.in [new file with mode: 0644]
rosapps/mc/config.status [new file with mode: 0644]
rosapps/mc/create_vcs [new file with mode: 0644]
rosapps/mc/doc/Makefile [new file with mode: 0644]
rosapps/mc/doc/faq [new file with mode: 0644]
rosapps/mc/doc/install [new file with mode: 0644]
rosapps/mc/doc/install.fast [new file with mode: 0644]
rosapps/mc/doc/mc.1 [new file with mode: 0644]
rosapps/mc/doc/mcedit.1 [new file with mode: 0644]
rosapps/mc/doc/mcserv.8 [new file with mode: 0644]
rosapps/mc/doc/news [new file with mode: 0644]
rosapps/mc/doc/readme [new file with mode: 0644]
rosapps/mc/doc/readme.nt [new file with mode: 0644]
rosapps/mc/edit/Makefile [new file with mode: 0644]
rosapps/mc/edit/edit.c [new file with mode: 0644]
rosapps/mc/edit/edit.h [new file with mode: 0644]
rosapps/mc/edit/edit_key_translator.c [new file with mode: 0644]
rosapps/mc/edit/editcmd.c [new file with mode: 0644]
rosapps/mc/edit/editcmddef.h [new file with mode: 0644]
rosapps/mc/edit/editdraw.c [new file with mode: 0644]
rosapps/mc/edit/editmenu.c [new file with mode: 0644]
rosapps/mc/edit/editoptions.c [new file with mode: 0644]
rosapps/mc/edit/editwidget.c [new file with mode: 0644]
rosapps/mc/edit/makefile.in [new file with mode: 0644]
rosapps/mc/edit/readme.edit [new file with mode: 0644]
rosapps/mc/edit/syntax.c [new file with mode: 0644]
rosapps/mc/edit/wordproc.c [new file with mode: 0644]
rosapps/mc/install-sh [new file with mode: 0644]
rosapps/mc/make.common.in [new file with mode: 0644]
rosapps/mc/mc.rc [new file with mode: 0644]
rosapps/mc/mcfn_install [new file with mode: 0644]
rosapps/mc/mcfn_install.in [new file with mode: 0644]
rosapps/mc/mkinstalldirs [new file with mode: 0644]
rosapps/mc/pc/Makefile [new file with mode: 0644]
rosapps/mc/pc/Makefile.PC [new file with mode: 0644]
rosapps/mc/pc/bugs [new file with mode: 0644]
rosapps/mc/pc/changelog [new file with mode: 0644]
rosapps/mc/pc/chmod.c [new file with mode: 0644]
rosapps/mc/pc/config.h [new file with mode: 0644]
rosapps/mc/pc/cons_nt.c [new file with mode: 0644]
rosapps/mc/pc/cons_os2.c [new file with mode: 0644]
rosapps/mc/pc/dirent.h [new file with mode: 0644]
rosapps/mc/pc/dirent_nt.c [new file with mode: 0644]
rosapps/mc/pc/dirent_os2.c [new file with mode: 0644]
rosapps/mc/pc/drive.c [new file with mode: 0644]
rosapps/mc/pc/drive.h [new file with mode: 0644]
rosapps/mc/pc/key_nt.c [new file with mode: 0644]
rosapps/mc/pc/key_os2.c [new file with mode: 0644]
rosapps/mc/pc/mc.rc [new file with mode: 0644]
rosapps/mc/pc/readme [new file with mode: 0644]
rosapps/mc/pc/slint_pc.c [new file with mode: 0644]
rosapps/mc/pc/sys/param.h [new file with mode: 0644]
rosapps/mc/pc/sys/time.h___ [new file with mode: 0644]
rosapps/mc/pc/todo [new file with mode: 0644]
rosapps/mc/pc/trace_nt.c [new file with mode: 0644]
rosapps/mc/pc/trace_nt.h [new file with mode: 0644]
rosapps/mc/pc/util_nt.c [new file with mode: 0644]
rosapps/mc/pc/util_os2.c [new file with mode: 0644]
rosapps/mc/pc/util_win32.c [new file with mode: 0644]
rosapps/mc/pc/util_win32.h [new file with mode: 0644]
rosapps/mc/pc/util_winnt.c [new file with mode: 0644]
rosapps/mc/pc/utime.h [new file with mode: 0644]
rosapps/mc/slang/Makefile [new file with mode: 0644]
rosapps/mc/slang/_slang.h [new file with mode: 0644]
rosapps/mc/slang/jdmacros.h [new file with mode: 0644]
rosapps/mc/slang/makefile.in [new file with mode: 0644]
rosapps/mc/slang/readme [new file with mode: 0644]
rosapps/mc/slang/sl-feat.h [new file with mode: 0644]
rosapps/mc/slang/slang.h [new file with mode: 0644]
rosapps/mc/slang/sldisply.c [new file with mode: 0644]
rosapps/mc/slang/slerr.c [new file with mode: 0644]
rosapps/mc/slang/slgetkey.c [new file with mode: 0644]
rosapps/mc/slang/slmemcpy.c [new file with mode: 0644]
rosapps/mc/slang/slmemset.c [new file with mode: 0644]
rosapps/mc/slang/slos2tty.c [new file with mode: 0644]
rosapps/mc/slang/slsignal.c [new file with mode: 0644]
rosapps/mc/slang/slsmg.c [new file with mode: 0644]
rosapps/mc/slang/sltermin.c [new file with mode: 0644]
rosapps/mc/slang/sltoken.c [new file with mode: 0644]
rosapps/mc/slang/slutty.c [new file with mode: 0644]
rosapps/mc/slang/slvideo.c [new file with mode: 0644]
rosapps/mc/slang/slw32tty.c [new file with mode: 0644]
rosapps/mc/src/Makefile [new file with mode: 0644]
rosapps/mc/src/achown.c [new file with mode: 0644]
rosapps/mc/src/achown.h [new file with mode: 0644]
rosapps/mc/src/background.c [new file with mode: 0644]
rosapps/mc/src/background.h [new file with mode: 0644]
rosapps/mc/src/boxes.c [new file with mode: 0644]
rosapps/mc/src/boxes.h [new file with mode: 0644]
rosapps/mc/src/changelog [new file with mode: 0644]
rosapps/mc/src/chmod.c [new file with mode: 0644]
rosapps/mc/src/chmod.h [new file with mode: 0644]
rosapps/mc/src/chown.c [new file with mode: 0644]
rosapps/mc/src/chown.h [new file with mode: 0644]
rosapps/mc/src/cmd.c [new file with mode: 0644]
rosapps/mc/src/cmd.h [new file with mode: 0644]
rosapps/mc/src/color.c [new file with mode: 0644]
rosapps/mc/src/color.h [new file with mode: 0644]
rosapps/mc/src/command.c [new file with mode: 0644]
rosapps/mc/src/command.h [new file with mode: 0644]
rosapps/mc/src/complete.c [new file with mode: 0644]
rosapps/mc/src/complete.h [new file with mode: 0644]
rosapps/mc/src/cons.handler.c [new file with mode: 0644]
rosapps/mc/src/cons.saver.c [new file with mode: 0644]
rosapps/mc/src/cons.saver.h [new file with mode: 0644]
rosapps/mc/src/depend.awk [new file with mode: 0644]
rosapps/mc/src/dialog.c [new file with mode: 0644]
rosapps/mc/src/dialog.h [new file with mode: 0644]
rosapps/mc/src/dir.c [new file with mode: 0644]
rosapps/mc/src/dir.h [new file with mode: 0644]
rosapps/mc/src/dlg.c [new file with mode: 0644]
rosapps/mc/src/dlg.h [new file with mode: 0644]
rosapps/mc/src/ext.c [new file with mode: 0644]
rosapps/mc/src/ext.h [new file with mode: 0644]
rosapps/mc/src/features.inc [new file with mode: 0644]
rosapps/mc/src/file.c [new file with mode: 0644]
rosapps/mc/src/file.h [new file with mode: 0644]
rosapps/mc/src/find.c [new file with mode: 0644]
rosapps/mc/src/find.h [new file with mode: 0644]
rosapps/mc/src/fixhlp.c [new file with mode: 0644]
rosapps/mc/src/fs.h [new file with mode: 0644]
rosapps/mc/src/fsusage.c [new file with mode: 0644]
rosapps/mc/src/fsusage.h [new file with mode: 0644]
rosapps/mc/src/gindex.pl [new file with mode: 0644]
rosapps/mc/src/global.h [new file with mode: 0644]
rosapps/mc/src/help.c [new file with mode: 0644]
rosapps/mc/src/help.h [new file with mode: 0644]
rosapps/mc/src/hotlist.c [new file with mode: 0644]
rosapps/mc/src/hotlist.h [new file with mode: 0644]
rosapps/mc/src/i18n.h [new file with mode: 0644]
rosapps/mc/src/info.c [new file with mode: 0644]
rosapps/mc/src/info.h [new file with mode: 0644]
rosapps/mc/src/key.c [new file with mode: 0644]
rosapps/mc/src/key.h [new file with mode: 0644]
rosapps/mc/src/keyxdef.c [new file with mode: 0644]
rosapps/mc/src/layout.c [new file with mode: 0644]
rosapps/mc/src/layout.h [new file with mode: 0644]
rosapps/mc/src/learn.c [new file with mode: 0644]
rosapps/mc/src/learn.h [new file with mode: 0644]
rosapps/mc/src/listmode.c [new file with mode: 0644]
rosapps/mc/src/listmode.h [new file with mode: 0644]
rosapps/mc/src/mad.c [new file with mode: 0644]
rosapps/mc/src/mad.h [new file with mode: 0644]
rosapps/mc/src/main.c [new file with mode: 0644]
rosapps/mc/src/main.h [new file with mode: 0644]
rosapps/mc/src/makefile.in [new file with mode: 0644]
rosapps/mc/src/man2hlp.c [new file with mode: 0644]
rosapps/mc/src/mc.hlp [new file with mode: 0644]
rosapps/mc/src/mem.h [new file with mode: 0644]
rosapps/mc/src/menu.c [new file with mode: 0644]
rosapps/mc/src/menu.h [new file with mode: 0644]
rosapps/mc/src/mfmt.c [new file with mode: 0644]
rosapps/mc/src/mountlist.c [new file with mode: 0644]
rosapps/mc/src/mountlist.h [new file with mode: 0644]
rosapps/mc/src/mouse.c [new file with mode: 0644]
rosapps/mc/src/mouse.h [new file with mode: 0644]
rosapps/mc/src/myslang.h [new file with mode: 0644]
rosapps/mc/src/ncurses.patch [new file with mode: 0644]
rosapps/mc/src/ochangelog [new file with mode: 0644]
rosapps/mc/src/option.c [new file with mode: 0644]
rosapps/mc/src/option.h [new file with mode: 0644]
rosapps/mc/src/panel.h [new file with mode: 0644]
rosapps/mc/src/panelize.c [new file with mode: 0644]
rosapps/mc/src/panelize.h [new file with mode: 0644]
rosapps/mc/src/popt.c [new file with mode: 0644]
rosapps/mc/src/popt.h [new file with mode: 0644]
rosapps/mc/src/profile.c [new file with mode: 0644]
rosapps/mc/src/profile.h [new file with mode: 0644]
rosapps/mc/src/regex.c [new file with mode: 0644]
rosapps/mc/src/regex.h [new file with mode: 0644]
rosapps/mc/src/rxvt.c [new file with mode: 0644]
rosapps/mc/src/screen.c [new file with mode: 0644]
rosapps/mc/src/setup.c [new file with mode: 0644]
rosapps/mc/src/setup.h [new file with mode: 0644]
rosapps/mc/src/slint.c [new file with mode: 0644]
rosapps/mc/src/subshell.c [new file with mode: 0644]
rosapps/mc/src/subshell.h [new file with mode: 0644]
rosapps/mc/src/terms.c [new file with mode: 0644]
rosapps/mc/src/text.c [new file with mode: 0644]
rosapps/mc/src/textconf.h [new file with mode: 0644]
rosapps/mc/src/todo [new file with mode: 0644]
rosapps/mc/src/tree.c [new file with mode: 0644]
rosapps/mc/src/tree.h [new file with mode: 0644]
rosapps/mc/src/tty.h [new file with mode: 0644]
rosapps/mc/src/user.c [new file with mode: 0644]
rosapps/mc/src/user.h [new file with mode: 0644]
rosapps/mc/src/util.c [new file with mode: 0644]
rosapps/mc/src/util.h [new file with mode: 0644]
rosapps/mc/src/utilunix.c [new file with mode: 0644]
rosapps/mc/src/view.c [new file with mode: 0644]
rosapps/mc/src/view.h [new file with mode: 0644]
rosapps/mc/src/widget.c [new file with mode: 0644]
rosapps/mc/src/widget.h [new file with mode: 0644]
rosapps/mc/src/win.c [new file with mode: 0644]
rosapps/mc/src/win.h [new file with mode: 0644]
rosapps/mc/src/wtools.c [new file with mode: 0644]
rosapps/mc/src/wtools.h [new file with mode: 0644]
rosapps/mc/src/x.h [new file with mode: 0644]
rosapps/mc/src/xcurses.c [new file with mode: 0644]
rosapps/mc/src/xmkdir [new file with mode: 0644]
rosapps/mc/src/xslint.c [new file with mode: 0644]
rosapps/mc/version.in [new file with mode: 0644]
rosapps/mc/vfs/Makefile [new file with mode: 0644]
rosapps/mc/vfs/extfs.h [new file with mode: 0644]
rosapps/mc/vfs/extfs/cpio [new file with mode: 0644]
rosapps/mc/vfs/extfs/deb [new file with mode: 0644]
rosapps/mc/vfs/extfs/ftplist [new file with mode: 0644]
rosapps/mc/vfs/extfs/lha [new file with mode: 0644]
rosapps/mc/vfs/extfs/lslR [new file with mode: 0644]
rosapps/mc/vfs/extfs/rar [new file with mode: 0644]
rosapps/mc/vfs/extfs/zip [new file with mode: 0644]
rosapps/mc/vfs/extfs/zoo [new file with mode: 0644]
rosapps/mc/vfs/vfs.h [new file with mode: 0644]

diff --git a/rosapps/mc/Make.common b/rosapps/mc/Make.common
new file mode 100644 (file)
index 0000000..11a535b
--- /dev/null
@@ -0,0 +1,105 @@
+VERSION=4.1.36
+
+SHELL = /bin/sh
+
+# This variable makes it possible to move the installation root to another
+# directory. This is useful when you're creating a binary distribution of mc.
+# If empty, normal root will be used.
+# You can run e.g. 'make install DESTDIR=/packages/mc/3.0' to accomplish
+# that.
+# DESTDIR = /opt/apps/mc/$(VERSION)
+
+# Installation target directories & other installation stuff
+prefix = /usr/local
+exec_prefix = $(prefix)
+binprefix =
+manprefix =
+
+builddir   = /cygdrive/c/user/src/local/mc-4.1.36-mingw
+bindir     = $(exec_prefix)/bin
+libdir     = $(exec_prefix)/lib/mc
+suppbindir = $(libdir)/bin
+tidir      = $(libdir)/term
+extfsdir   = $(libdir)/extfs
+icondir    = $(prefix)/share/icons/mc
+mandir     = $(prefix)/man/man1
+datadir    = $(prefix)/share
+localedir  = $(datadir)/locale
+manext     = 1
+man8dir    = $(prefix)/man/man8
+man8ext   = 8
+xv_bindir = 
+
+# Tools & program stuff
+SEDCMD = sed 's/-man/-mandoc/'
+SEDCMD2 = sed 's%@prefix@%$(prefix)%'
+STRIP = @STRIP@
+
+CC = gcc
+CPP = gcc -E
+AR = /usr/bin/ar
+RANLIB = ranlib
+RM = /usr/bin/rm
+RMF = /usr/bin/rm -f
+MV = /usr/bin/mv
+CP = /usr/bin/cp
+LN_S = ln -s
+AWK = gawk
+AWK_VAR_OPTION = -v
+
+# Flags & libs
+# No way, to make make happy (except GNU), we cannot use := to append
+# something to these, so that's why there is a leading _
+XCFLAGS = -g
+XCPPFLAGS = -I..  -I$(vfsdir) -I$(rootdir) -I$(slangdir) -I.. -DBINDIR=\""$(bindir)/"\" -DLIBDIR=\""$(libdir)/"\" -DICONDIR=\""$(icondir)/"\" $(XINC) -DLOCALEDIR=\""$(localedir)/"\" 
+XLDFLAGS = 
+XDEFS = -DHAVE_CONFIG_H
+XLIBS = -lintl  -lcrypt 
+
+# Where do we have the sources?
+# You shouldn't have to edit this :)
+mcsrcdir = $(rootdir)/src
+docdir   = $(rootdir)/doc
+mclibdir = $(rootdir)/lib
+slangdir = $(rootdir)/slang
+vfsdir   = $(rootdir)/vfs
+xvdir    = $(rootdir)/xv
+tkdir   = $(rootdir)/tk
+gnomedir = $(rootdir)/gnome
+icodir   = $(rootdir)/icons
+
+hpath = -I$(mcsrcdir) -I$(slangdir) -I$(vfsdir) -I$(xvdir) -I$(xvdir)/support/xview_private -I$(tkdir)
+
+# Rules
+first_rule: all
+
+.PHONY: all check cross TAGS clean install uninstall distcopy depend dep
+.PHONY: fastdep fastdepslang fastdepvfs fastdeploc slowdep
+
+../slang/%.o : ../slang/%.c
+       cd ../slang; $(MAKE) libmcslang.a
+
+../vfs/%.o : ../vfs/%.c
+       cd ../vfs; $(MAKE) libvfs.a
+
+fastdep: dummy
+       if test x"`echo $(srcdir)/*.[ch]`" != x'$(srcdir)/*.[ch]'; then { cd $(srcdir); $(AWK) -f $(mcsrcdir)/depend.awk $(AWK_VAR_OPTION) hpath="$(hpath)" $(AWK_VAR_OPTION) srcdir="$(srcdir)" *.[ch];} > .depend; fi
+       -$(MAKE) fastdeploc
+       :
+
+fastdepslang:
+       { { { cd ../slang; $(MAKE) showlibdep;} | grep OBJS; cat .depend;} | { cd $(slangdir); $(AWK) -f $(mcsrcdir)/depend.awk $(AWK_VAR_OPTION) dolib="../slang libmcslang.a" $(AWK_VAR_OPTION) hpath="$(hpath)" $(AWK_VAR_OPTION) srcdir="$(slangdir)";};} >> .depend
+
+fastdepvfs:
+       { { { cd ../vfs; $(MAKE) showlibdep;} | grep OBJS; cat .depend;} | { cd $(vfsdir); $(AWK) -f $(mcsrcdir)/depend.awk $(AWK_VAR_OPTION) dolib="../vfs libvfs.a" $(AWK_VAR_OPTION) hpath="$(hpath)" $(AWK_VAR_OPTION) srcdir="$(vfsdir)";};} >> .depend
+
+slowdep: dummy
+       if test x"`echo $(srcdir)/*.[ch]`" != x'$(srcdir)/*.[ch]'; then \
+       $(CPP) -M $(CPPFLAGS) $(DEFS) $(CFLAGS) $(srcdir)/*.c > .depend; fi
+       :
+
+mcdep: fastdep
+
+dummy:
+
+# End of Make.common
diff --git a/rosapps/mc/Makefile b/rosapps/mc/Makefile
new file mode 100644 (file)
index 0000000..a7e01a3
--- /dev/null
@@ -0,0 +1,28 @@
+TARGET_OS=NT
+
+CC=gcc
+LINK=gcc -s
+OBJ_SUFFIX=o
+OBJ_PLACE=-o
+EXE_PLACE=-o
+
+# ---- Compiler-specific optional stuff
+MC_MISC_CFLAGS=
+OBJS_DIR=release
+EXTRA_MC_SRCS=
+SPECIFIC_DEFINES=
+SPECIFIC_MC_CFLAGS=-O2 $(MC_MISC_CFLAGS)
+SPECIFIC_MC_LFLAGS_EXTRA=
+SPECIFIC_SLANG_CFLAGS=$(SPECIFIC_MC_CFLAGS)
+SPECIFIC_MCEDIT_CFLAGS=$(SPECIFIC_MC_CFLAGS)
+
+# ---- Compiler independent defines
+include Makefile.PC
+
+# ---- Linkers are very compiler-specific
+
+SPECIFIC_MC_LFLAGS=$(SPECIFIC_MC_LFLAGS_EXTRA)
+MC_LIBS= # -lintl
+
+$(MC_EXE): $(OBJS) $(MCEDIT_OBJS) $(SLANG_OBJS)
+       $(LINK) $(EXE_PLACE) $(MC_EXE) $(SPECIFIC_MC_LFLAGS) $+  $(MC_LIBS) 
diff --git a/rosapps/mc/Makefile.PC b/rosapps/mc/Makefile.PC
new file mode 100644 (file)
index 0000000..fa6274a
--- /dev/null
@@ -0,0 +1,180 @@
+# Makefile.PC
+#
+# This is the Makefile for Midnight Commander under OS/2 and Windows NT
+#
+# Written by Dan Nicolaescu 
+# 970423 hacked by Juan f. Grigera 
+# 970525 hacked again by jfg to add internal editor
+# 971127 hacked by Pavel Roskin to make it work with mc-4.1.11
+# 980206 hacked by Pavel Roskin to make it work with GNU make
+# 980329 changed by Pavel Roskin to make it common for OS/2 and NT
+#
+# Supported Compilers:
+#
+#    For Windows NT:
+#      Makefile.VC4:   Microsoft Visual C++ 4.0 and above
+#      Makefile.BC5:   Borland C++ 5.x
+#      Makefile.MIN:   MinGW
+#      Makefile.RSX:   RSX
+#    For OS/2:
+#      Makefile.EMX:   EMX/GCC
+#      Makefile.BC2:   Borland C++ 2.x
+#      Makefile.IBM:   IBM CSet or Visual Age C++
+#      ...
+
+# ---- Directories
+MC_PC_DIR=./pc
+MC_SRC_DIR=./src
+VFS_DIR=./vfs
+MCEDIT_SRC_DIR=./edit
+MCEDIT_OBJS_DIR=$(OBJS_DIR)/edit
+SLANG_SRC_DIR=./slang
+SLANG_OBJS_DIR=$(OBJS_DIR)/slang
+MC_EXE=$(OBJS_DIR)/mc.exe
+
+# --- Midnight Defines
+COMMON_DEFINES=-DMC_$(TARGET_OS) $(SPECIFIC_DEFINES)
+MC_DEFINES=$(COMMON_DEFINES) -DHAVE_CONFIG_H
+MC_INCLUDES=-I$(MC_PC_DIR) -I$(SLANG_SRC_DIR)
+SLANG_DEFINES=$(COMMON_DEFINES)
+SLANG_INCLUDES=-I$(MC_PC_DIR) -I$(SLANG_SRC_DIR)
+MCEDIT_DEFINES=$(COMMON_DEFINES) -DHAVE_CONFIG_H
+MCEDIT_INCLUDES=-I$(MC_PC_DIR) -I$(SLANG_SRC_DIR)
+
+CFLAGS=$(SPECIFIC_MC_CFLAGS) $(MC_INCLUDES) $(MC_DEFINES) -c
+SLANG_CFLAGS=$(SPECIFIC_SLANG_CFLAGS) $(SLANG_INCLUDES) $(SLANG_DEFINES) -c
+MCEDIT_CFLAGS=$(SPECIFIC_MCEDIT_CFLAGS) $(MCEDIT_INCLUDES) $(MCEDIT_DEFINES) -c
+
+
+all: object-dirs mc
+object-dirs: $(OBJS_DIR) $(SLANG_OBJS_DIR) $(MCEDIT_OBJS_DIR)
+
+mc: $(MC_EXE)
+
+clean: 
+       "../../reactos/tools/rdel" "slang/*.o"
+       "../../reactos/tools/rdel" "edit/*.o"
+       "../../reactos/tools/rdel" "src/*.o"
+       "../../reactos/tools/rdel" "pc/*.o"
+       "../../reactos/tools/rdel" "release"
+
+$(OBJS_DIR):
+       mkdir "$@"
+
+$(SLANG_OBJS_DIR):
+       mkdir "$@"
+
+$(MCEDIT_OBJS_DIR):
+       mkdir "$@"
+
+$(OBJS_DIR)/%.$(OBJ_SUFFIX): $(MC_PC_DIR)/%.c
+       $(CC) $(CFLAGS) $(OBJ_PLACE)$@ $<
+
+$(OBJS_DIR)/%.$(OBJ_SUFFIX): $(MC_SRC_DIR)/%.c
+       $(CC) $(CFLAGS) $(OBJ_PLACE)$@ $<
+
+$(SLANG_OBJS_DIR)/%.$(OBJ_SUFFIX): $(SLANG_SRC_DIR)/%.c
+       $(CC) $(SLANG_CFLAGS) $(OBJ_PLACE)$@ $<
+
+$(MCEDIT_OBJS_DIR)/%.$(OBJ_SUFFIX): $(MCEDIT_SRC_DIR)/%.c
+       $(CC) $(MCEDIT_CFLAGS) $(OBJ_PLACE)$@ $<
+
+MC_SRCS= \
+       terms.c \
+       user.c \
+       file.c \
+       listmode.c \
+       cmd.c \
+       command.c \
+       help.c \
+       menu.c \
+       view.c \
+       dir.c \
+       info.c \
+       widget.c \
+       option.c \
+       dlg.c \
+       panelize.c \
+       profile.c \
+       util.c \
+       dialog.c \
+       ext.c \
+       color.c \
+       layout.c \
+       setup.c \
+       regex.c \
+       hotlist.c \
+       tree.c \
+       win.c \
+       complete.c \
+       find.c \
+       wtools.c \
+       boxes.c \
+       background.c \
+       main.c \
+       popt.c \
+       text.c \
+       screen.c
+
+PC_SRCS= \
+       slint_pc.c \
+       chmod.c \
+        drive.c
+
+NT_SRCS= \
+       cons_nt.c \
+       dirent_nt.c \
+       key_nt.c \
+       util_win32.c \
+       util_winnt.c \
+       util_nt.c
+
+OS2_SRCS= \
+       cons_os2.c \
+       dirent_os2.c \
+       key_os2.c \
+       util_os2.c
+
+SLANG_NT=slw32tty.c
+SLANG_OS2=slos2tty.c
+
+SLANG_SRCS= \
+       slerr.c \
+       slgetkey.c \
+       slsmg.c \
+       slvideo.c \
+       $(SLANG_$(TARGET_OS))
+
+MCEDIT_SRCS= \
+       edit.c \
+       editcmd.c \
+       editdraw.c \
+       editmenu.c \
+       editoptions.c \
+       editwidget.c \
+       syntax.c \
+       wordproc.c
+
+SRCS=$(MC_SRCS) $(PC_SRCS) $($(TARGET_OS)_SRCS) $(EXTRA_MC_SRCS)
+
+OBJS=$(addprefix $(OBJS_DIR)/, \
+       $(patsubst %.c,%.$(OBJ_SUFFIX),$(SRCS)))
+SLANG_OBJS=$(addprefix $(SLANG_OBJS_DIR)/, \
+       $(patsubst %.c,%.$(OBJ_SUFFIX),$(SLANG_SRCS)))
+MCEDIT_OBJS=$(addprefix $(MCEDIT_OBJS_DIR)/, \
+       $(patsubst %.c,%.$(OBJ_SUFFIX),$(MCEDIT_SRCS)))
+
+ifdef RSC
+
+ifndef RES_SUFFIX
+RES_SUFFIX=res
+endif # RES_SUFFIX
+
+MC_RES=$(OBJS_DIR)/mc.$(RES_SUFFIX)
+
+$(MC_RES): $(MC_PC_DIR)/mc.rc $(MC_PC_DIR)/mc_nt.ico $(MC_PC_DIR)/config.h ../VERSION
+       $(RSC) $(RES_PLACE)$(MC_RES) $(RC_DEFINES) $(MC_PC_DIR)/mc.rc
+
+else
+MC_RES=
+endif # !RSC
diff --git a/rosapps/mc/VERSION b/rosapps/mc/VERSION
new file mode 100644 (file)
index 0000000..7fbca0f
--- /dev/null
@@ -0,0 +1 @@
+#define VERSION "4.1.36"
diff --git a/rosapps/mc/about-nls b/rosapps/mc/about-nls
new file mode 100644 (file)
index 0000000..dacb8b1
--- /dev/null
@@ -0,0 +1,225 @@
+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 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 at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+One advise in advance
+=====================
+
+   If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias or message inheritance) as the
+implementation here.  It is also not possible to offer this additional
+functionality on top of a `catgets' implementation.  Future versions of
+GNU `gettext' will very likely convey even more functionality.  So it
+might be a good idea to change to GNU `gettext' as soon as possible.
+
+   So you need not provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+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 provides
+usable `catgets' (if using this is selected by the installer) or
+`gettext' functions.  If neither is available, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is *not* required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --with-catgets
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `catgets' or `gettext' to use
+the internationalizing routines provided within this package, enable
+the use of the `catgets' functions (if found on the locale system), or
+else, *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.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   By default the configuration process will not test for the `catgets'
+function and therefore they will not be used.  The reasons are already
+given above: the emulation on top of `catgets' cannot provide all the
+extensions provided by the GNU `gettext' library.  If you nevertheless
+want to use the `catgets' functions use
+
+     ./configure --with-catgets
+
+to enable the test for `catgets' (this causes no harm if `catgets' is
+not available on your system).  If you really select this option we
+would like to hear about the reasons because we cannot think of any
+good one ourself.
+
+   Internationalized packages have usually 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.
+
+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
+ISO 639 `LL' two-letter code prior to using the programs in the
+package.  For example, let's suppose that you speak German.  At the
+shell prompt, merely execute `setenv LANG de' (in `csh'),
+`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash').  This
+can be done from your `.login' or `.profile' file, once and for all.
+
+   An operating system might already offer message localization for
+many of its programs, while other programs have been installed locally
+with the full capabilities of GNU `gettext'.  Just using `gettext'
+extended syntax for `LANG' would break proper localization of already
+available operating system programs.  In this case, users should set
+both `LANGUAGE' and `LANG' variables in their environment, as programs
+using GNU `gettext' give preference to `LANGUAGE'.  For example, some
+Swedish users would rather read translations in German than English for
+when Swedish is not available.  This is easily accomplished by setting
+`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
+
+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, courtesy of Linux
+International.  You may reach your translation team at the address
+`LL@li.org', replacing LL by the two-letter ISO 639 code for your
+language.  Language codes are *not* the same as the country codes given
+in ISO 3166.  The following translation teams exist, as of August 1997:
+
+     Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
+     Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
+     `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
+     Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
+     `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
+     Swedish `sv', and Turkish `tr'.
+
+For example, you may reach the Chinese translation team by writing to
+`zh@li.org'.
+
+   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 `translation@iro.umontreal.ca' 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 skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of August
+1997.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination.
+
+     Ready PO files    cs da de en es fi fr it ja ko nl no pl pt sl sv
+                     .-------------------------------------------------.
+     bash            |       []          []          []                |  3
+     bison           |       []          []          []                |  3
+     clisp           |       [] [] []    []                            |  4
+     cpio            |       []    []    []          []    []          |  5
+     diffutils       |       []    []    []                []       [] |  5
+     enscript        |       []    [] [] []          []          []    |  6
+     fileutils       | []    []    []    []       [] []    [] [] [] [] | 10
+     findutils       |       []    []    [] []    [] []    []       [] |  8
+     flex            |             []    []       []                [] |  4
+     gcal            |       []          []          []    []       [] |  5
+     gettext         |       []    []    []       [] [] [] [] [] [] [] | 11
+     grep            |       []    []    []       [] [] [] []    [] [] |  9
+     hello           |       []    []    []       [] [] [] [] [] [] [] | 10
+     id-utils        |       []          []                []          |  3
+     indent          |    [] []                   []       []          |  4
+     libc            |       []    []    []       [] []    []       [] |  7
+     m4              |       []          []    []    []             [] |  5
+     make            |       []    []    []       [] []    []          |  6
+     music           |                   []                []          |  2
+     ptx             |       []    []    []          [] [] [] []    [] |  8
+     recode          |    [] []    []    []          []    [] [] [] [] |  9
+     sh-utils        |       []          []          [] [] [] []    [] |  7
+     sharutils       |       []    []    []          []             [] |  5
+     tar             |       []          [] []    [] [] [] [] [] [] [] | 10
+     texinfo         |                   []                            |  1
+     textutils       | []    []    []    []       [] [] [] []       [] |  9
+     wdiff           | []    []    []    []          [] [] []       [] |  8
+                     `-------------------------------------------------'
+       16 languages    cs da de en es fi fr it ja ko nl no pl pt sl sv
+       27 packages      3  2 24  1 17  1 26  2  1 11 20  9 19  7  7 17  167
+
+   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 August 1997 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites.
+
diff --git a/rosapps/mc/acconfig.h b/rosapps/mc/acconfig.h
new file mode 100644 (file)
index 0000000..0019175
--- /dev/null
@@ -0,0 +1,249 @@
+/* This is the configuration file for the Midnight Commander. It was generated
+   by autoconf's configure.
+   
+   Configure for Midnight Commander
+   Copyright (C) 1994, 1995 Janne Kukonlehto
+   Copyright (C) 1994, 1995 Miguel de Icaza
+   Copyright (C) 1995 Jakub Jelinek
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   
+#include <VERSION>
+
+
+@TOP@
+
+#undef PACKAGE
+
+/* Always defined */
+#undef D_INO_IN_DIRENT
+#undef IS_AIX
+#undef MOUNTED_FREAD
+#undef MOUNTED_FREAD_FSTYP
+#undef MOUNTED_GETFSSTAT
+#undef MOUNTED_GETMNT
+#undef MOUNTED_GETMNTENT1
+#undef MOUNTED_GETMNTENT2
+#undef MOUNTED_GETMNTINFO
+#undef MOUNTED_VMOUNT
+#undef STAT_STATFS2_BSIZE
+#undef STAT_STATFS2_FSIZE
+#undef STAT_STATFS2_FS_DATA
+#undef STAT_STATFS3_OSF1
+#undef STAT_STATFS4
+#undef STAT_STATVFS
+
+/* Define umode_t if your system does not provide it */
+#undef umode_t
+
+/* Define nlink_t if your system does not provide it */
+#undef nlink_t
+
+/* Does the file command accepts the -L option */
+#undef FILE_L
+
+/* Does the file command work well with - option for stdin? */
+#undef FILE_STDIN
+
+/* Does the grep command work well with - option for stdin? */
+#undef GREP_STDIN
+
+/* Is the program using the GPM library? */
+#undef HAVE_LIBGPM
+
+/* Is the program using the distributed slang library? */
+#undef HAVE_SLANG
+
+/* Is the program using a system-installed slang library? */
+#undef HAVE_SYSTEM_SLANG
+
+/* Define if the slang.h header file is inside a directory slang
+** in the standard directories
+*/
+#undef SLANG_H_INSIDE_SLANG_DIR
+
+/* Does the program have subshell support? */
+#undef HAVE_SUBSHELL_SUPPORT
+
+/* If you don't have gcc, define this */
+#undef OLD_TOOLS 
+
+/* Are you using other type of curses? */
+#undef OTHER_CURSES
+
+/* Is the subshell the default or optional? */
+#undef SUBSHELL_OPTIONAL
+
+/* Use SunOS SysV curses? */
+#undef SUNOS_CURSES
+
+/* Use old BSD curses? */
+#undef USE_BSD_CURSES
+
+/* Use SystemV curses? */
+#undef USE_SYSV_CURSES
+
+/* Use Ncurses? */
+#undef USE_NCURSES
+
+/* If you Curses does not have color define this one */
+#undef NO_COLOR_SUPPORT
+
+/* Support the Midnight Commander Virtual File System? */
+#undef USE_VFS
+
+/* Support for the Memory Allocation Debugger */
+#undef HAVE_MAD
+
+/* Extra Debugging */
+#undef MCDEBUG
+
+/* If the Slang library will be using it's own terminfo instead of termcap */
+#undef SLANG_TERMINFO
+
+/* If Slang library should use termcap */
+#undef USE_TERMCAP
+
+/* If you have socket and the rest of the net functions use this */
+#undef USE_NETCODE
+
+/* If defined, use .netrc for FTP connections */
+#undef USE_NETRC 
+
+/* If your operating system does not have enough space for a file name
+ * in a struct dirent, then define this
+ */
+#undef NEED_EXTRA_DIRENT_BUFFER
+
+/* Define if you want the du -s summary */
+#undef HAVE_DUSUM
+
+/* Define if your du does handle -b correctly */
+#undef DUSUM_USEB
+
+/* Define to size of chunks du is displaying its information.
+ * If DUSUM_USEB is defined, this should be 1
+ */
+#define DUSUM_FACTOR 512
+
+/* Define this one if you want termnet support */
+#undef USE_TERMNET
+
+/* Defined if you have the file command */
+#undef HAVE_FILECMD
+
+/* Defined if you have libXpm, <X11/xpm.h>, libXext, <X11/extensions/shape.h> */
+#undef HAVE_XPM_SHAPE
+
+/* Defined if you have shadow passwords on Linux */
+#undef LINUX_SHADOW
+
+/* Defined if you have the crypt prototype in neither unistd.h nor crypt.h */
+#undef NEED_CRYPT_PROTOTYPE
+
+/* Defined if your CPP understands ## macro token pasting method */
+#undef HAVE_PORTABLE_TOKEN_PASTING
+
+/* Define if you want to turn on SCO-specific code */
+#undef SCO_FLAVOR
+
+/* Define if your system has struct linger */
+#undef HAVE_STRUCT_LINGER
+
+/* Define if your curses has this one (AIX, OSF/1) */
+#undef USE_SETUPTERM
+
+/* Link in ext2fs code for delfs experimental file system */
+#undef USE_EXT2FSLIB
+
+/* Define if you have putenv routine */
+#undef HAVE_PUTENV
+
+/* Define if you have isascii */
+#undef HAVE_ISASCII
+
+/* Define if you want to use the HSC firewall */
+#undef HSC_PROXY
+
+/* Define if your system uses PAM for auth stuff */
+#undef HAVE_PAM
+
+/* Define if you have the pmap_getmaps function */
+#undef HAVE_PMAP_GETMAPS
+
+/* Define if you have the <sys/select.h> header file.  */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the get_process_stats function and have to use that instead of gettimeofday  */
+#undef HAVE_GET_PROCESS_STATS
+
+/* Define if you want to call the internal routine edit() for the editor */
+#undef USE_INTERNAL_EDIT
+
+/* Define if your system has socketpair */
+#undef HAVE_SOCKETPAIR
+
+/* Do we have posix signals? */
+#undef HAVE_SIGACTION
+#undef HAVE_SIGPROCMASK
+#undef HAVE_SIGEMPTYSET
+#undef HAVE_SIGADDSET
+
+/* Version of ncurses */
+#undef NCURSES_970530
+
+#undef HAVE_STPCPY
+
+#undef ENABLE_NLS
+#undef HAVE_CATGETS
+#undef HAVE_GETTEXT
+#undef HAVE_LC_MESSAGES
+
+@BOTTOM@
+
+#ifdef HAVE_LIBPT
+#    define HAVE_GRANTPT
+#endif
+
+#if defined(HAVE_LIBCRYPT) || defined(HAVE_LIBCRYPT_I)
+#    define HAVE_CRYPT
+#endif
+
+#ifdef HAVE_XVIEW
+#    include <xvmain.h>
+#endif
+
+#if defined(HAVE_SIGADDSET) && defined(HAVE_SIGEMPTYSET)
+# if defined(HAVE_SIGACTION) && defined(HAVE_SIGPROCMASK)
+#  define SLANG_POSIX_SIGNALS
+# endif
+#endif
+
+#ifdef __os2__
+#    define OS2_NT 1
+#    define S_ISFIFO(x) 0
+#endif
+
+#ifdef _OS_NT
+#    define OS2_NT 1
+#endif
+
+#ifndef OS2_NT
+/* some Unices do not define this, and slang requires it: */
+#ifndef unix
+#    define unix
+#endif
+#endif
+
diff --git a/rosapps/mc/autogen.sh b/rosapps/mc/autogen.sh
new file mode 100644 (file)
index 0000000..b217750
--- /dev/null
@@ -0,0 +1,11 @@
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+(
+cd $srcdir
+cat macros/gnome.m4 mc-aclocal.m4 gettext.m4 > aclocal.m4
+autoheader
+autoconf
+)
+
+$srcdir/configure $*
diff --git a/rosapps/mc/config.cache b/rosapps/mc/config.cache
new file mode 100644 (file)
index 0000000..84016ba
--- /dev/null
@@ -0,0 +1,179 @@
+# 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.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+ac_cv_header_sys_statfs_h=${ac_cv_header_sys_statfs_h='no'}
+ac_cv_header_sys_dustat_h=${ac_cv_header_sys_dustat_h='no'}
+ac_cv_type_size_t=${ac_cv_type_size_t='yes'}
+ac_cv_path_CHMOD=${ac_cv_path_CHMOD='/usr/bin/chmod'}
+ac_cv_prog_cc_works=${ac_cv_prog_cc_works='yes'}
+ac_cv_header_sys_statvfs_h=${ac_cv_header_sys_statvfs_h='no'}
+ac_cv_header_crypt_h=${ac_cv_header_crypt_h='yes'}
+ac_cv_path_XGETTEXT=${ac_cv_path_XGETTEXT='/usr/bin/xgettext'}
+ac_cv_func_getcwd=${ac_cv_func_getcwd='yes'}
+ac_cv_lib_nsl_t_accept=${ac_cv_lib_nsl_t_accept='no'}
+ac_cv_lib_sun_getmntent=${ac_cv_lib_sun_getmntent='no'}
+ac_cv_func_tcsetattr=${ac_cv_func_tcsetattr='yes'}
+ac_cv_header_grp_h=${ac_cv_header_grp_h='yes'}
+ac_cv_lib_ipc_shmat=${ac_cv_lib_ipc_shmat='no'}
+ac_cv_func_crypt=${ac_cv_func_crypt='no'}
+ac_cv_func_sigaddset=${ac_cv_func_sigaddset='yes'}
+ac_cv_func_initgroups=${ac_cv_func_initgroups='yes'}
+ac_cv_header_stdlib_h=${ac_cv_header_stdlib_h='yes'}
+ac_cv_make_with_percent_rules=${ac_cv_make_with_percent_rules='yes'}
+ac_cv_func_sigprocmask=${ac_cv_func_sigprocmask='yes'}
+ac_cv_func_memmove=${ac_cv_func_memmove='yes'}
+ac_cv_func_strncasecmp=${ac_cv_func_strncasecmp='yes'}
+ac_cv_header_sys_filsys_h=${ac_cv_header_sys_filsys_h='no'}
+ac_cv_header_nl_types_h=${ac_cv_header_nl_types_h='no'}
+ac_cv_prog_cc_g=${ac_cv_prog_cc_g='yes'}
+ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'}
+ac_cv_header_mnttab_h=${ac_cv_header_mnttab_h='no'}
+ac_cv_header_dirent_dirent_h=${ac_cv_header_dirent_dirent_h='yes'}
+ac_cv_func_setlocale=${ac_cv_func_setlocale='yes'}
+ac_cv_lib_ext2fs_ext2fs_close=${ac_cv_lib_ext2fs_ext2fs_close='no'}
+ac_cv_func_statlstat=${ac_cv_func_statlstat='no'}
+gt_cv_func_gettext_libintl=${gt_cv_func_gettext_libintl='no'}
+ac_cv_func_mmap_fixed_mapped=${ac_cv_func_mmap_fixed_mapped='no'}
+nls_cv_use_catgets=${nls_cv_use_catgets='no'}
+ac_cv_header_sys_wait_h=${ac_cv_header_sys_wait_h='yes'}
+ac_cv_prog_RANLIB=${ac_cv_prog_RANLIB='ranlib'}
+ac_cv_func_socketpair=${ac_cv_func_socketpair='yes'}
+ac_cv_func_pwdauth=${ac_cv_func_pwdauth='no'}
+ac_cv_func_strcasecmp=${ac_cv_func_strcasecmp='yes'}
+ac_cv_header_minix_config_h=${ac_cv_header_minix_config_h='no'}
+ac_cv_mandoc=${ac_cv_mandoc='-mandoc'}
+ac_cv_func_socket=${ac_cv_func_socket='yes'}
+ac_cv_func_sigaction=${ac_cv_func_sigaction='yes'}
+ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h='yes'}
+ac_cv_lib_gen_getmntent=${ac_cv_lib_gen_getmntent='no'}
+ac_cv_func___argz_count=${ac_cv_func___argz_count='no'}
+ac_cv_prog_system=${ac_cv_prog_system='CYGWIN_98-4.10'}
+ac_cv_lib_intl_tolower=${ac_cv_lib_intl_tolower='yes'}
+ac_cv_func_grantpt=${ac_cv_func_grantpt='yes'}
+ac_cv_func_memcpy=${ac_cv_func_memcpy='yes'}
+ac_cv_func_memset=${ac_cv_func_memset='yes'}
+ac_cv_path_GMSGFMT=${ac_cv_path_GMSGFMT='/usr/bin/msgfmt'}
+ac_cv_c_const=${ac_cv_c_const='yes'}
+ac_cv_lib_socket_socket=${ac_cv_lib_socket_socket='no'}
+ac_cv_header_termios_h=${ac_cv_header_termios_h='yes'}
+ac_cv_lib_rpc_pmap_set=${ac_cv_lib_rpc_pmap_set='no'}
+ac_cv_prog_CC=${ac_cv_prog_CC='gcc'}
+ac_cv_func_pmap_getmaps=${ac_cv_func_pmap_getmaps='no'}
+ac_cv_func_remove=${ac_cv_func_remove='yes'}
+ac_cv_lib_dnet_stub_dnet_ntoa=${ac_cv_lib_dnet_stub_dnet_ntoa='no'}
+ac_cv_type_umode_t=${ac_cv_type_umode_t='no'}
+ac_cv_type_mode_t=${ac_cv_type_mode_t='yes'}
+ac_cv_func_getmntinfo=${ac_cv_func_getmntinfo='no'}
+ac_cv_func_cfgetospeed=${ac_cv_func_cfgetospeed='yes'}
+ac_cv_func_munmap=${ac_cv_func_munmap='yes'}
+ac_cv_header_values_h=${ac_cv_header_values_h='no'}
+ac_cv_header_sys_select_h=${ac_cv_header_sys_select_h='yes'}
+ac_cv_path_AR=${ac_cv_path_AR='/usr/bin/ar'}
+ac_cv_path_CP=${ac_cv_path_CP='/usr/bin/cp'}
+ac_cv_type_nlink_t=${ac_cv_type_nlink_t='yes'}
+ac_cv_header_sys_mount_h=${ac_cv_header_sys_mount_h='yes'}
+ac_cv_func_sysconf=${ac_cv_func_sysconf='yes'}
+ac_cv_func_getwd=${ac_cv_func_getwd='yes'}
+gt_cv_func_gettext_libc=${gt_cv_func_gettext_libc='no'}
+ac_cv_header_limits_h=${ac_cv_header_limits_h='yes'}
+ac_cv_prog_gnu_make=${ac_cv_prog_gnu_make='yes'}
+ac_cv_prog_LN_S=${ac_cv_prog_LN_S='ln -s'}
+fu_cv_sys_stat_statfs3_osf1=${fu_cv_sys_stat_statfs3_osf1='no'}
+ac_cv_struct_st_rdev=${ac_cv_struct_st_rdev='yes'}
+ac_cv_func_alloca_works=${ac_cv_func_alloca_works='yes'}
+ac_cv_header_alloca_h=${ac_cv_header_alloca_h='no'}
+ac_cv_prog_cc_stdc=${ac_cv_prog_cc_stdc=''}
+ac_cv_func_shmat=${ac_cv_func_shmat='no'}
+ac_cv_have_x=${ac_cv_have_x='have_x=yes                ac_x_includes=/usr/X11R6/include ac_x_libraries=/usr/X11R6/lib'}
+ac_cv_header_sys_fs_types_h=${ac_cv_header_sys_fs_types_h='no'}
+ac_cv_path_MSGFMT=${ac_cv_path_MSGFMT='/usr/bin/msgfmt'}
+ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
+ac_cv_dusum=${ac_cv_dusum='dusum_useb=yes; dusum_factor=1'}
+ac_cv_lib_dnet_dnet_ntoa=${ac_cv_lib_dnet_dnet_ntoa='no'}
+ac_cv_header_sys_fstyp_h=${ac_cv_header_sys_fstyp_h='no'}
+ac_cv_func___argz_stringify=${ac_cv_func___argz_stringify='no'}
+ac_cv_header_mntent_h=${ac_cv_header_mntent_h='yes'}
+ac_cv_lib_dir_opendir=${ac_cv_lib_dir_opendir='no'}
+ac_cv_header_sys_sysmacros_h=${ac_cv_header_sys_sysmacros_h='yes'}
+ac_cv_prog_make_make_set=${ac_cv_prog_make_make_set='yes'}
+ac_cv_lib_seq_get_process_stats=${ac_cv_lib_seq_get_process_stats='no'}
+ac_cv_func_gethostbyname=${ac_cv_func_gethostbyname='yes'}
+ac_cv_func_statfs=${ac_cv_func_statfs='yes'}
+nls_cv_header_intl=${nls_cv_header_intl='intl/libintl.h'}
+ac_cv_func___argz_next=${ac_cv_func___argz_next='no'}
+ac_cv_func_setenv=${ac_cv_func_setenv='yes'}
+ac_cv_header_sys_param_h=${ac_cv_header_sys_param_h='yes'}
+ac_cv_header_string_h=${ac_cv_header_string_h='yes'}
+ac_cv_header_locale_h=${ac_cv_header_locale_h='yes'}
+ac_cv_header_unistd_h=${ac_cv_header_unistd_h='yes'}
+ac_cv_c_inline=${ac_cv_c_inline='inline'}
+ac_cv_func_pmap_set=${ac_cv_func_pmap_set='no'}
+ac_cv_func_statvfs=${ac_cv_func_statvfs='no'}
+fu_cv_sys_d_ino_in_dirent=${fu_cv_sys_d_ino_in_dirent='yes'}
+ac_cv_header_sys_vfs_h=${ac_cv_header_sys_vfs_h='yes'}
+ac_cv_func_strchr=${ac_cv_func_strchr='yes'}
+ac_cv_header_utime_h=${ac_cv_header_utime_h='yes'}
+ac_cv_header_memory_h=${ac_cv_header_memory_h='yes'}
+ac_cv_func_keyok=${ac_cv_func_keyok='no'}
+ac_cv_filel=${ac_cv_filel='yes'}
+ac_cv_func_rresvport=${ac_cv_func_rresvport='yes'}
+fu_cv_sys_stat_statfs2_bsize=${fu_cv_sys_stat_statfs2_bsize='yes'}
+ac_cv_prog_gcc=${ac_cv_prog_gcc='yes'}
+ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross='no'}
+ac_cv_lib_curses_setupterm=${ac_cv_lib_curses_setupterm='yes'}
+ac_cv_grep_stdin=${ac_cv_grep_stdin='yes'}
+ac_cv_prog_HAVE_FILECMD=${ac_cv_prog_HAVE_FILECMD='true'}
+ac_cv_prog_HAVE_nroff=${ac_cv_prog_HAVE_nroff='true'}
+ac_cv_lib_seq_getmntent=${ac_cv_lib_seq_getmntent='no'}
+ac_cv_func_strerror=${ac_cv_func_strerror='yes'}
+am_cv_val_LC_MESSAGES=${am_cv_val_LC_MESSAGES='yes'}
+ac_cv_type_off_t=${ac_cv_type_off_t='yes'}
+ac_cv_func_tcgetattr=${ac_cv_func_tcgetattr='yes'}
+nls_cv_force_use_gnu_gettext=${nls_cv_force_use_gnu_gettext='no'}
+ac_cv_type_pid_t=${ac_cv_type_pid_t='yes'}
+ac_cv_struct_st_blocks=${ac_cv_struct_st_blocks='yes'}
+ac_cv_lib_intl_bindtextdomain=${ac_cv_lib_intl_bindtextdomain='yes'}
+ac_cv_path_RM=${ac_cv_path_RM='/usr/bin/rm'}
+ac_cv_header_sys_mkdev_h=${ac_cv_header_sys_mkdev_h='no'}
+ac_cv_header_sys_types_h_makedev=${ac_cv_header_sys_types_h_makedev='no'}
+ac_cv_func_connect=${ac_cv_func_connect='yes'}
+fu_cv_sys_mounted_getmntent1=${fu_cv_sys_mounted_getmntent1='yes'}
+ac_cv_func_sigemptyset=${ac_cv_func_sigemptyset='yes'}
+ac_cv_struct_st_blksize=${ac_cv_struct_st_blksize='yes'}
+nls_cv_use_gnu_gettext=${nls_cv_use_gnu_gettext='yes'}
+ac_cv_header_argz_h=${ac_cv_header_argz_h='no'}
+ac_cv_prog_AWK=${ac_cv_prog_AWK='gawk'}
+ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
+ac_cv_func_resizeterm=${ac_cv_func_resizeterm='no'}
+fu_cv_sys_mounted_getmntent2=${fu_cv_sys_mounted_getmntent2='no'}
+ac_cv_header_malloc_h=${ac_cv_header_malloc_h='yes'}
+ac_cv_func_getpagesize=${ac_cv_func_getpagesize='yes'}
+ac_cv_nroff_tascii=${ac_cv_nroff_tascii=' -Tascii'}
+ac_cv_func_getmntent=${ac_cv_func_getmntent='yes'}
+ac_cv_header_libintl_h=${ac_cv_header_libintl_h='yes'}
+ac_cv_dnamesize=${ac_cv_dnamesize='yes'}
+ac_cv_path_MV=${ac_cv_path_MV='/usr/bin/mv'}
+ac_cv_lib_slang_SLang_init_tty=${ac_cv_lib_slang_SLang_init_tty='no'}
+ac_cv_type_uid_t=${ac_cv_type_uid_t='yes'}
+ac_cv_filestdin=${ac_cv_filestdin='yes'}
+ac_cv_lib_crypt_crypt=${ac_cv_lib_crypt_crypt='yes'}
+ac_cv_lib_gpm_Gpm_Repeat=${ac_cv_lib_gpm_Gpm_Repeat='no'}
+ac_cv_header_rpc_pmap_clnt_h=${ac_cv_header_rpc_pmap_clnt_h='no'}
+ac_cv_func_pmap_getport=${ac_cv_func_pmap_getport='no'}
+ac_cv_lib_ICE_IceConnectionNumber=${ac_cv_lib_ICE_IceConnectionNumber='yes'}
+ac_cv_func_strdup=${ac_cv_func_strdup='yes'}
+nls_cv_header_libgt=${nls_cv_header_libgt='intl/libgettext.h'}
+ac_cv_func_putenv=${ac_cv_func_putenv='yes'}
+ac_cv_func_truncate=${ac_cv_func_truncate='yes'}
+ac_cv_func_stpcpy=${ac_cv_func_stpcpy='no'}
diff --git a/rosapps/mc/config.h b/rosapps/mc/config.h
new file mode 100644 (file)
index 0000000..d8cf12e
--- /dev/null
@@ -0,0 +1,575 @@
+/* config.h.  Generated automatically by configure.  */
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+/* This is the configuration file for the Midnight Commander. It was generated
+   by autoconf's configure.
+   
+   Configure for Midnight Commander
+   Copyright (C) 1994, 1995 Janne Kukonlehto
+   Copyright (C) 1994, 1995 Miguel de Icaza
+   Copyright (C) 1995 Jakub Jelinek
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   
+#include <VERSION>
+
+
+
+/* Define if on AIX 3.
+   System headers sometimes define this.
+   We just want to avoid a redefinition error message.  */
+#ifndef _ALL_SOURCE
+/* #undef _ALL_SOURCE */
+#endif
+
+/* Define if using alloca.c.  */
+/* #undef C_ALLOCA */
+
+/* Define to empty if the keyword does not work.  */
+/* #undef const */
+
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+   This function is required for alloca.c support on those systems.  */
+/* #undef CRAY_STACKSEG_END */
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+/* #undef gid_t */
+
+/* Define if you have alloca, as a function or macro.  */
+#define HAVE_ALLOCA 1
+
+/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
+/* #undef HAVE_ALLOCA_H */
+
+/* Define if you have the getmntent function.  */
+#define HAVE_GETMNTENT 1
+
+/* Define if you have a working `mmap' system call.  */
+/* #undef HAVE_MMAP */
+
+/* Define if your struct stat has st_blksize.  */
+#define HAVE_ST_BLKSIZE 1
+
+/* Define if your struct stat has st_blocks.  */
+#define HAVE_ST_BLOCKS 1
+
+/* Define if your struct stat has st_rdev.  */
+#define HAVE_ST_RDEV 1
+
+/* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define as __inline if that's what the C compiler calls it.  */
+/* #undef inline */
+
+/* Define if major, minor, and makedev are declared in <mkdev.h>.  */
+/* #undef MAJOR_IN_MKDEV */
+
+/* Define if major, minor, and makedev are declared in <sysmacros.h>.  */
+#define MAJOR_IN_SYSMACROS 1
+
+/* Define if on MINIX.  */
+/* #undef _MINIX */
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+/* #undef mode_t */
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+/* #undef off_t */
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+/* #undef pid_t */
+
+/* Define if the system does not provide POSIX.1 features except
+   with this defined.  */
+/* #undef _POSIX_1_SOURCE */
+
+/* Define if you need to in order for stat and other things to work.  */
+/* #undef _POSIX_SOURCE */
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+/* #undef size_t */
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown
+ */
+/* #undef STACK_DIRECTION */
+
+/* Define if you have the ANSI C header files.  */
+#define STDC_HEADERS 1
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+/* #undef uid_t */
+
+/* Define if the X Window System is missing or not being used.  */
+/* #undef X_DISPLAY_MISSING */
+
+#define PACKAGE "mc"
+
+/* Always defined */
+#define D_INO_IN_DIRENT 1
+/* #undef IS_AIX */
+/* #undef MOUNTED_FREAD */
+/* #undef MOUNTED_FREAD_FSTYP */
+/* #undef MOUNTED_GETFSSTAT */
+/* #undef MOUNTED_GETMNT */
+#define MOUNTED_GETMNTENT1 1
+/* #undef MOUNTED_GETMNTENT2 */
+/* #undef MOUNTED_GETMNTINFO */
+/* #undef MOUNTED_VMOUNT */
+#define STAT_STATFS2_BSIZE 1
+/* #undef STAT_STATFS2_FSIZE */
+/* #undef STAT_STATFS2_FS_DATA */
+/* #undef STAT_STATFS3_OSF1 */
+/* #undef STAT_STATFS4 */
+/* #undef STAT_STATVFS */
+
+/* Define umode_t if your system does not provide it */
+#define umode_t int
+
+/* Define nlink_t if your system does not provide it */
+/* #undef nlink_t */
+
+/* Does the file command accepts the -L option */
+#define FILE_L 1
+
+/* Does the file command work well with - option for stdin? */
+#define FILE_STDIN 1
+
+/* Does the grep command work well with - option for stdin? */
+#define GREP_STDIN 1
+
+/* Is the program using the GPM library? */
+/* #undef HAVE_LIBGPM */
+
+/* Is the program using the distributed slang library? */
+#define HAVE_SLANG 1
+
+/* Is the program using a system-installed slang library? */
+/* #undef HAVE_SYSTEM_SLANG */
+
+/* Define if the slang.h header file is inside a directory slang
+** in the standard directories
+*/
+/* #undef SLANG_H_INSIDE_SLANG_DIR */
+
+/* Does the program have subshell support? */
+#define HAVE_SUBSHELL_SUPPORT 1
+
+/* If you don't have gcc, define this */
+/* #undef OLD_TOOLS */ 
+
+/* Is the subshell the default or optional? */
+/* #undef SUBSHELL_OPTIONAL */
+
+/* Use SunOS SysV curses? */
+/* #undef SUNOS_CURSES */
+
+/* Use SystemV curses? */
+/* #undef USE_SYSV_CURSES */
+
+/* Use Ncurses? */
+/* #undef USE_NCURSES */
+
+/* If you Curses does not have color define this one */
+/* #undef NO_COLOR_SUPPORT */
+
+/* Support the Midnight Commander Virtual File System? */
+#define USE_VFS 1
+
+/* Support for the Memory Allocation Debugger */
+/* #undef HAVE_MAD */
+
+/* Extra Debugging */
+/* #undef MCDEBUG */
+
+/* If the Slang library will be using it's own terminfo instead of termcap */
+#define SLANG_TERMINFO 1
+
+/* If Slang library should use termcap */
+/* #undef USE_TERMCAP */
+
+/* If you have socket and the rest of the net functions use this */
+#define USE_NETCODE 1
+
+/* If defined, use .netrc for FTP connections */
+/* #undef USE_NETRC */ 
+
+/* If your operating system does not have enough space for a file name
+ * in a struct dirent, then define this
+ */
+/* #undef NEED_EXTRA_DIRENT_BUFFER */
+
+/* Define if you want the du -s summary */
+#define HAVE_DUSUM 1
+
+/* Define if your du does handle -b correctly */
+#define DUSUM_USEB 1
+
+/* Define to size of chunks du is displaying its information.
+ * If DUSUM_USEB is defined, this should be 1
+ */
+#define DUSUM_FACTOR 1
+
+/* Define this one if you want termnet support */
+/* #undef USE_TERMNET */
+
+/* Defined if you have libXpm, <X11/xpm.h>, libXext, <X11/extensions/shape.h> */
+/* #undef HAVE_XPM_SHAPE */
+
+/* Defined if you have shadow passwords on Linux */
+/* #undef LINUX_SHADOW */
+
+/* Defined if you have the crypt prototype in neither unistd.h nor crypt.h */
+#define NEED_CRYPT_PROTOTYPE 1
+
+/* Define if you want to turn on SCO-specific code */
+/* #undef SCO_FLAVOR */
+
+/* Define if your system has struct linger */
+#define HAVE_STRUCT_LINGER 1
+
+/* Define if your curses has this one (AIX, OSF/1) */
+/* #undef USE_SETUPTERM */
+
+/* Link in ext2fs code for delfs experimental file system */
+/* #undef USE_EXT2FSLIB */
+
+/* Define if you want to use the HSC firewall */
+/* #undef HSC_PROXY */
+
+/* Define if your system uses PAM for auth stuff */
+/* #undef HAVE_PAM */
+
+/* Define if you have the get_process_stats function and have to use that instead of gettimeofday  */
+/* #undef HAVE_GET_PROCESS_STATS */
+
+/* Define if you want to call the internal routine edit() for the editor */
+#define USE_INTERNAL_EDIT 1
+
+/* Define if your system has socketpair */
+#define HAVE_SOCKETPAIR 1
+
+/* Version of ncurses */
+/* #undef NCURSES_970530 */
+
+/* #undef HAVE_STPCPY */
+
+#define ENABLE_NLS 1
+/* #undef HAVE_CATGETS */
+/* #undef HAVE_GETTEXT */
+#define HAVE_LC_MESSAGES 1
+
+/* Define if you have the __argz_count function.  */
+/* #undef HAVE___ARGZ_COUNT */
+
+/* Define if you have the __argz_next function.  */
+/* #undef HAVE___ARGZ_NEXT */
+
+/* Define if you have the __argz_stringify function.  */
+/* #undef HAVE___ARGZ_STRINGIFY */
+
+/* Define if you have the cfgetospeed function.  */
+#define HAVE_CFGETOSPEED 1
+
+/* Define if you have the crypt function.  */
+/* #undef HAVE_CRYPT */
+
+/* Define if you have the dcgettext function.  */
+/* #undef HAVE_DCGETTEXT */
+
+/* Define if you have the getcwd function.  */
+#define HAVE_GETCWD 1
+
+/* Define if you have the getmntinfo function.  */
+/* #undef HAVE_GETMNTINFO */
+
+/* Define if you have the getpagesize function.  */
+#define HAVE_GETPAGESIZE 1
+
+/* Define if you have the getwd function.  */
+#define HAVE_GETWD 1
+
+/* Define if you have the grantpt function.  */
+#define HAVE_GRANTPT 1
+
+/* Define if you have the initgroups function.  */
+#define HAVE_INITGROUPS 1
+
+/* Define if you have the keyok function.  */
+/* #undef HAVE_KEYOK */
+
+/* Define if you have the memcpy function.  */
+#define HAVE_MEMCPY 1
+
+/* Define if you have the memmove function.  */
+#define HAVE_MEMMOVE 1
+
+/* Define if you have the memset function.  */
+#define HAVE_MEMSET 1
+
+/* Define if you have the munmap function.  */
+#define HAVE_MUNMAP 1
+
+/* Define if you have the pmap_getmaps function.  */
+/* #undef HAVE_PMAP_GETMAPS */
+
+/* Define if you have the pmap_getport function.  */
+/* #undef HAVE_PMAP_GETPORT */
+
+/* Define if you have the pmap_set function.  */
+/* #undef HAVE_PMAP_SET */
+
+/* Define if you have the putenv function.  */
+#define HAVE_PUTENV 1
+
+/* Define if you have the pwdauth function.  */
+/* #undef HAVE_PWDAUTH */
+
+/* Define if you have the resizeterm function.  */
+/* #undef HAVE_RESIZETERM */
+
+/* Define if you have the rresvport function.  */
+#define HAVE_RRESVPORT 1
+
+/* Define if you have the setenv function.  */
+#define HAVE_SETENV 1
+
+/* Define if you have the setlocale function.  */
+#define HAVE_SETLOCALE 1
+
+/* Define if you have the sigaction function.  */
+#define HAVE_SIGACTION 1
+
+/* Define if you have the sigaddset function.  */
+#define HAVE_SIGADDSET 1
+
+/* Define if you have the sigemptyset function.  */
+#define HAVE_SIGEMPTYSET 1
+
+/* Define if you have the sigprocmask function.  */
+#define HAVE_SIGPROCMASK 1
+
+/* Define if you have the socket function.  */
+#define HAVE_SOCKET 1
+
+/* Define if you have the socketpair function.  */
+#define HAVE_SOCKETPAIR 1
+
+/* Define if you have the statfs function.  */
+#define HAVE_STATFS 1
+
+/* Define if you have the statlstat function.  */
+/* #undef HAVE_STATLSTAT */
+
+/* Define if you have the statvfs function.  */
+/* #undef HAVE_STATVFS */
+
+/* Define if you have the stpcpy function.  */
+/* #undef HAVE_STPCPY */
+
+/* Define if you have the strcasecmp function.  */
+#define HAVE_STRCASECMP 1
+
+/* Define if you have the strchr function.  */
+#define HAVE_STRCHR 1
+
+/* Define if you have the strdup function.  */
+#define HAVE_STRDUP 1
+
+/* Define if you have the strerror function.  */
+#define HAVE_STRERROR 1
+
+/* Define if you have the strncasecmp function.  */
+#define HAVE_STRNCASECMP 1
+
+/* Define if you have the sysconf function.  */
+#define HAVE_SYSCONF 1
+
+/* Define if you have the tcgetattr function.  */
+#define HAVE_TCGETATTR 1
+
+/* Define if you have the tcsetattr function.  */
+#define HAVE_TCSETATTR 1
+
+/* Define if you have the truncate function.  */
+#define HAVE_TRUNCATE 1
+
+/* Define if you have the <argz.h> header file.  */
+/* #undef HAVE_ARGZ_H */
+
+/* Define if you have the <crypt.h> header file.  */
+#define HAVE_CRYPT_H 1
+
+/* Define if you have the <dirent.h> header file.  */
+#define HAVE_DIRENT_H 1
+
+/* Define if you have the <ext2fs/ext2fs.h> header file.  */
+/* #undef HAVE_EXT2FS_EXT2FS_H */
+
+/* Define if you have the <fcntl.h> header file.  */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <grp.h> header file.  */
+#define HAVE_GRP_H 1
+
+/* Define if you have the <limits.h> header file.  */
+#define HAVE_LIMITS_H 1
+
+/* Define if you have the <linux/ext2_fs.h> header file.  */
+/* #undef HAVE_LINUX_EXT2_FS_H */
+
+/* Define if you have the <locale.h> header file.  */
+#define HAVE_LOCALE_H 1
+
+/* Define if you have the <malloc.h> header file.  */
+#define HAVE_MALLOC_H 1
+
+/* Define if you have the <memory.h> header file.  */
+#define HAVE_MEMORY_H 1
+
+/* Define if you have the <mntent.h> header file.  */
+#define HAVE_MNTENT_H 1
+
+/* Define if you have the <mnttab.h> header file.  */
+/* #undef HAVE_MNTTAB_H */
+
+/* Define if you have the <ndir.h> header file.  */
+/* #undef HAVE_NDIR_H */
+
+/* Define if you have the <nl_types.h> header file.  */
+/* #undef HAVE_NL_TYPES_H */
+
+/* Define if you have the <rpc/pmap_clnt.h> header file.  */
+/* #undef HAVE_RPC_PMAP_CLNT_H */
+
+/* Define if you have the <shadow.h> header file.  */
+/* #undef HAVE_SHADOW_H */
+
+/* Define if you have the <shadow/shadow.h> header file.  */
+/* #undef HAVE_SHADOW_SHADOW_H */
+
+/* Define if you have the <slang.h> header file.  */
+/* #undef HAVE_SLANG_H */
+
+/* Define if you have the <slang/slang.h> header file.  */
+/* #undef HAVE_SLANG_SLANG_H */
+
+/* Define if you have the <stdlib.h> header file.  */
+#define HAVE_STDLIB_H 1
+
+/* Define if you have the <string.h> header file.  */
+#define HAVE_STRING_H 1
+
+/* Define if you have the <sys/dir.h> header file.  */
+/* #undef HAVE_SYS_DIR_H */
+
+/* Define if you have the <sys/dustat.h> header file.  */
+/* #undef HAVE_SYS_DUSTAT_H */
+
+/* Define if you have the <sys/filsys.h> header file.  */
+/* #undef HAVE_SYS_FILSYS_H */
+
+/* Define if you have the <sys/fs_types.h> header file.  */
+/* #undef HAVE_SYS_FS_TYPES_H */
+
+/* Define if you have the <sys/fstyp.h> header file.  */
+/* #undef HAVE_SYS_FSTYP_H */
+
+/* Define if you have the <sys/mount.h> header file.  */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define if you have the <sys/ndir.h> header file.  */
+/* #undef HAVE_SYS_NDIR_H */
+
+/* Define if you have the <sys/param.h> header file.  */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define if you have the <sys/select.h> header file.  */
+#define HAVE_SYS_SELECT_H 1
+
+/* Define if you have the <sys/statfs.h> header file.  */
+/* #undef HAVE_SYS_STATFS_H */
+
+/* Define if you have the <sys/statvfs.h> header file.  */
+/* #undef HAVE_SYS_STATVFS_H */
+
+/* Define if you have the <sys/vfs.h> header file.  */
+#define HAVE_SYS_VFS_H 1
+
+/* Define if you have the <termios.h> header file.  */
+#define HAVE_TERMIOS_H 1
+
+/* Define if you have the <unistd.h> header file.  */
+#define HAVE_UNISTD_H 1
+
+/* Define if you have the <utime.h> header file.  */
+#define HAVE_UTIME_H 1
+
+/* Define if you have the <values.h> header file.  */
+/* #undef HAVE_VALUES_H */
+
+/* Define if you have the i library (-li).  */
+/* #undef HAVE_LIBI */
+
+/* Define if you have the intl library (-lintl).  */
+#define HAVE_LIBINTL 1
+
+/* Define if you have the nsl library (-lnsl).  */
+/* #undef HAVE_LIBNSL */
+
+/* Define if you have the pt library (-lpt).  */
+/* #undef HAVE_LIBPT */
+
+/* Define if you have the socket library (-lsocket).  */
+/* #undef HAVE_LIBSOCKET */
+
+#ifdef HAVE_LIBPT
+#    define HAVE_GRANTPT
+#endif
+
+#if defined(HAVE_LIBCRYPT) || defined(HAVE_LIBCRYPT_I)
+#    define HAVE_CRYPT
+#endif
+
+#ifdef HAVE_XVIEW
+#    include <xvmain.h>
+#endif
+
+#if defined(HAVE_SIGADDSET) && defined(HAVE_SIGEMPTYSET)
+# if defined(HAVE_SIGACTION) && defined(HAVE_SIGPROCMASK)
+#  define SLANG_POSIX_SIGNALS
+# endif
+#endif
+
+#ifdef __os2__
+#    define OS2_NT 1
+#    define S_ISFIFO(x) 0
+#endif
+
+#ifdef _OS_NT
+#    define OS2_NT 1
+#endif
+
+#ifndef OS2_NT
+/* some Unices do not define this, and slang requires it: */
+#ifndef unix
+#    define unix
+#endif
+#endif
+
diff --git a/rosapps/mc/config.h.in b/rosapps/mc/config.h.in
new file mode 100644 (file)
index 0000000..1c5e449
--- /dev/null
@@ -0,0 +1,574 @@
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+/* This is the configuration file for the Midnight Commander. It was generated
+   by autoconf's configure.
+   
+   Configure for Midnight Commander
+   Copyright (C) 1994, 1995 Janne Kukonlehto
+   Copyright (C) 1994, 1995 Miguel de Icaza
+   Copyright (C) 1995 Jakub Jelinek
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   
+#include <VERSION>
+
+
+
+/* Define if on AIX 3.
+   System headers sometimes define this.
+   We just want to avoid a redefinition error message.  */
+#ifndef _ALL_SOURCE
+#undef _ALL_SOURCE
+#endif
+
+/* Define if using alloca.c.  */
+#undef C_ALLOCA
+
+/* Define to empty if the keyword does not work.  */
+#undef const
+
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+   This function is required for alloca.c support on those systems.  */
+#undef CRAY_STACKSEG_END
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef gid_t
+
+/* Define if you have alloca, as a function or macro.  */
+#undef HAVE_ALLOCA
+
+/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
+#undef HAVE_ALLOCA_H
+
+/* Define if you have the getmntent function.  */
+#undef HAVE_GETMNTENT
+
+/* Define if you have a working `mmap' system call.  */
+#undef HAVE_MMAP
+
+/* Define if your struct stat has st_blksize.  */
+#undef HAVE_ST_BLKSIZE
+
+/* Define if your struct stat has st_blocks.  */
+#undef HAVE_ST_BLOCKS
+
+/* Define if your struct stat has st_rdev.  */
+#undef HAVE_ST_RDEV
+
+/* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
+#undef HAVE_SYS_WAIT_H
+
+/* Define as __inline if that's what the C compiler calls it.  */
+#undef inline
+
+/* Define if major, minor, and makedev are declared in <mkdev.h>.  */
+#undef MAJOR_IN_MKDEV
+
+/* Define if major, minor, and makedev are declared in <sysmacros.h>.  */
+#undef MAJOR_IN_SYSMACROS
+
+/* Define if on MINIX.  */
+#undef _MINIX
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef mode_t
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+#undef off_t
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef pid_t
+
+/* Define if the system does not provide POSIX.1 features except
+   with this defined.  */
+#undef _POSIX_1_SOURCE
+
+/* Define if you need to in order for stat and other things to work.  */
+#undef _POSIX_SOURCE
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+#undef size_t
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown
+ */
+#undef STACK_DIRECTION
+
+/* Define if you have the ANSI C header files.  */
+#undef STDC_HEADERS
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef uid_t
+
+/* Define if the X Window System is missing or not being used.  */
+#undef X_DISPLAY_MISSING
+
+#undef PACKAGE
+
+/* Always defined */
+#undef D_INO_IN_DIRENT
+#undef IS_AIX
+#undef MOUNTED_FREAD
+#undef MOUNTED_FREAD_FSTYP
+#undef MOUNTED_GETFSSTAT
+#undef MOUNTED_GETMNT
+#undef MOUNTED_GETMNTENT1
+#undef MOUNTED_GETMNTENT2
+#undef MOUNTED_GETMNTINFO
+#undef MOUNTED_VMOUNT
+#undef STAT_STATFS2_BSIZE
+#undef STAT_STATFS2_FSIZE
+#undef STAT_STATFS2_FS_DATA
+#undef STAT_STATFS3_OSF1
+#undef STAT_STATFS4
+#undef STAT_STATVFS
+
+/* Define umode_t if your system does not provide it */
+#undef umode_t
+
+/* Define nlink_t if your system does not provide it */
+#undef nlink_t
+
+/* Does the file command accepts the -L option */
+#undef FILE_L
+
+/* Does the file command work well with - option for stdin? */
+#undef FILE_STDIN
+
+/* Does the grep command work well with - option for stdin? */
+#undef GREP_STDIN
+
+/* Is the program using the GPM library? */
+#undef HAVE_LIBGPM
+
+/* Is the program using the distributed slang library? */
+#undef HAVE_SLANG
+
+/* Is the program using a system-installed slang library? */
+#undef HAVE_SYSTEM_SLANG
+
+/* Define if the slang.h header file is inside a directory slang
+** in the standard directories
+*/
+#undef SLANG_H_INSIDE_SLANG_DIR
+
+/* Does the program have subshell support? */
+#undef HAVE_SUBSHELL_SUPPORT
+
+/* If you don't have gcc, define this */
+#undef OLD_TOOLS 
+
+/* Is the subshell the default or optional? */
+#undef SUBSHELL_OPTIONAL
+
+/* Use SunOS SysV curses? */
+#undef SUNOS_CURSES
+
+/* Use SystemV curses? */
+#undef USE_SYSV_CURSES
+
+/* Use Ncurses? */
+#undef USE_NCURSES
+
+/* If you Curses does not have color define this one */
+#undef NO_COLOR_SUPPORT
+
+/* Support the Midnight Commander Virtual File System? */
+#undef USE_VFS
+
+/* Support for the Memory Allocation Debugger */
+#undef HAVE_MAD
+
+/* Extra Debugging */
+#undef MCDEBUG
+
+/* If the Slang library will be using it's own terminfo instead of termcap */
+#undef SLANG_TERMINFO
+
+/* If Slang library should use termcap */
+#undef USE_TERMCAP
+
+/* If you have socket and the rest of the net functions use this */
+#undef USE_NETCODE
+
+/* If defined, use .netrc for FTP connections */
+#undef USE_NETRC 
+
+/* If your operating system does not have enough space for a file name
+ * in a struct dirent, then define this
+ */
+#undef NEED_EXTRA_DIRENT_BUFFER
+
+/* Define if you want the du -s summary */
+#undef HAVE_DUSUM
+
+/* Define if your du does handle -b correctly */
+#undef DUSUM_USEB
+
+/* Define to size of chunks du is displaying its information.
+ * If DUSUM_USEB is defined, this should be 1
+ */
+#define DUSUM_FACTOR 512
+
+/* Define this one if you want termnet support */
+#undef USE_TERMNET
+
+/* Defined if you have libXpm, <X11/xpm.h>, libXext, <X11/extensions/shape.h> */
+#undef HAVE_XPM_SHAPE
+
+/* Defined if you have shadow passwords on Linux */
+#undef LINUX_SHADOW
+
+/* Defined if you have the crypt prototype in neither unistd.h nor crypt.h */
+#undef NEED_CRYPT_PROTOTYPE
+
+/* Define if you want to turn on SCO-specific code */
+#undef SCO_FLAVOR
+
+/* Define if your system has struct linger */
+#undef HAVE_STRUCT_LINGER
+
+/* Define if your curses has this one (AIX, OSF/1) */
+#undef USE_SETUPTERM
+
+/* Link in ext2fs code for delfs experimental file system */
+#undef USE_EXT2FSLIB
+
+/* Define if you want to use the HSC firewall */
+#undef HSC_PROXY
+
+/* Define if your system uses PAM for auth stuff */
+#undef HAVE_PAM
+
+/* Define if you have the get_process_stats function and have to use that instead of gettimeofday  */
+#undef HAVE_GET_PROCESS_STATS
+
+/* Define if you want to call the internal routine edit() for the editor */
+#undef USE_INTERNAL_EDIT
+
+/* Define if your system has socketpair */
+#undef HAVE_SOCKETPAIR
+
+/* Version of ncurses */
+#undef NCURSES_970530
+
+#undef HAVE_STPCPY
+
+#undef ENABLE_NLS
+#undef HAVE_CATGETS
+#undef HAVE_GETTEXT
+#undef HAVE_LC_MESSAGES
+
+/* Define if you have the __argz_count function.  */
+#undef HAVE___ARGZ_COUNT
+
+/* Define if you have the __argz_next function.  */
+#undef HAVE___ARGZ_NEXT
+
+/* Define if you have the __argz_stringify function.  */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* Define if you have the cfgetospeed function.  */
+#undef HAVE_CFGETOSPEED
+
+/* Define if you have the crypt function.  */
+#undef HAVE_CRYPT
+
+/* Define if you have the dcgettext function.  */
+#undef HAVE_DCGETTEXT
+
+/* Define if you have the getcwd function.  */
+#undef HAVE_GETCWD
+
+/* Define if you have the getmntinfo function.  */
+#undef HAVE_GETMNTINFO
+
+/* Define if you have the getpagesize function.  */
+#undef HAVE_GETPAGESIZE
+
+/* Define if you have the getwd function.  */
+#undef HAVE_GETWD
+
+/* Define if you have the grantpt function.  */
+#undef HAVE_GRANTPT
+
+/* Define if you have the initgroups function.  */
+#undef HAVE_INITGROUPS
+
+/* Define if you have the keyok function.  */
+#undef HAVE_KEYOK
+
+/* Define if you have the memcpy function.  */
+#undef HAVE_MEMCPY
+
+/* Define if you have the memmove function.  */
+#undef HAVE_MEMMOVE
+
+/* Define if you have the memset function.  */
+#undef HAVE_MEMSET
+
+/* Define if you have the munmap function.  */
+#undef HAVE_MUNMAP
+
+/* Define if you have the pmap_getmaps function.  */
+#undef HAVE_PMAP_GETMAPS
+
+/* Define if you have the pmap_getport function.  */
+#undef HAVE_PMAP_GETPORT
+
+/* Define if you have the pmap_set function.  */
+#undef HAVE_PMAP_SET
+
+/* Define if you have the putenv function.  */
+#undef HAVE_PUTENV
+
+/* Define if you have the pwdauth function.  */
+#undef HAVE_PWDAUTH
+
+/* Define if you have the resizeterm function.  */
+#undef HAVE_RESIZETERM
+
+/* Define if you have the rresvport function.  */
+#undef HAVE_RRESVPORT
+
+/* Define if you have the setenv function.  */
+#undef HAVE_SETENV
+
+/* Define if you have the setlocale function.  */
+#undef HAVE_SETLOCALE
+
+/* Define if you have the sigaction function.  */
+#undef HAVE_SIGACTION
+
+/* Define if you have the sigaddset function.  */
+#undef HAVE_SIGADDSET
+
+/* Define if you have the sigemptyset function.  */
+#undef HAVE_SIGEMPTYSET
+
+/* Define if you have the sigprocmask function.  */
+#undef HAVE_SIGPROCMASK
+
+/* Define if you have the socket function.  */
+#undef HAVE_SOCKET
+
+/* Define if you have the socketpair function.  */
+#undef HAVE_SOCKETPAIR
+
+/* Define if you have the statfs function.  */
+#undef HAVE_STATFS
+
+/* Define if you have the statlstat function.  */
+#undef HAVE_STATLSTAT
+
+/* Define if you have the statvfs function.  */
+#undef HAVE_STATVFS
+
+/* Define if you have the stpcpy function.  */
+#undef HAVE_STPCPY
+
+/* Define if you have the strcasecmp function.  */
+#undef HAVE_STRCASECMP
+
+/* Define if you have the strchr function.  */
+#undef HAVE_STRCHR
+
+/* Define if you have the strdup function.  */
+#undef HAVE_STRDUP
+
+/* Define if you have the strerror function.  */
+#undef HAVE_STRERROR
+
+/* Define if you have the strncasecmp function.  */
+#undef HAVE_STRNCASECMP
+
+/* Define if you have the sysconf function.  */
+#undef HAVE_SYSCONF
+
+/* Define if you have the tcgetattr function.  */
+#undef HAVE_TCGETATTR
+
+/* Define if you have the tcsetattr function.  */
+#undef HAVE_TCSETATTR
+
+/* Define if you have the truncate function.  */
+#undef HAVE_TRUNCATE
+
+/* Define if you have the <argz.h> header file.  */
+#undef HAVE_ARGZ_H
+
+/* Define if you have the <crypt.h> header file.  */
+#undef HAVE_CRYPT_H
+
+/* Define if you have the <dirent.h> header file.  */
+#undef HAVE_DIRENT_H
+
+/* Define if you have the <ext2fs/ext2fs.h> header file.  */
+#undef HAVE_EXT2FS_EXT2FS_H
+
+/* Define if you have the <fcntl.h> header file.  */
+#undef HAVE_FCNTL_H
+
+/* Define if you have the <grp.h> header file.  */
+#undef HAVE_GRP_H
+
+/* Define if you have the <limits.h> header file.  */
+#undef HAVE_LIMITS_H
+
+/* Define if you have the <linux/ext2_fs.h> header file.  */
+#undef HAVE_LINUX_EXT2_FS_H
+
+/* Define if you have the <locale.h> header file.  */
+#undef HAVE_LOCALE_H
+
+/* Define if you have the <malloc.h> header file.  */
+#undef HAVE_MALLOC_H
+
+/* Define if you have the <memory.h> header file.  */
+#undef HAVE_MEMORY_H
+
+/* Define if you have the <mntent.h> header file.  */
+#undef HAVE_MNTENT_H
+
+/* Define if you have the <mnttab.h> header file.  */
+#undef HAVE_MNTTAB_H
+
+/* Define if you have the <ndir.h> header file.  */
+#undef HAVE_NDIR_H
+
+/* Define if you have the <nl_types.h> header file.  */
+#undef HAVE_NL_TYPES_H
+
+/* Define if you have the <rpc/pmap_clnt.h> header file.  */
+#undef HAVE_RPC_PMAP_CLNT_H
+
+/* Define if you have the <shadow.h> header file.  */
+#undef HAVE_SHADOW_H
+
+/* Define if you have the <shadow/shadow.h> header file.  */
+#undef HAVE_SHADOW_SHADOW_H
+
+/* Define if you have the <slang.h> header file.  */
+#undef HAVE_SLANG_H
+
+/* Define if you have the <slang/slang.h> header file.  */
+#undef HAVE_SLANG_SLANG_H
+
+/* Define if you have the <stdlib.h> header file.  */
+#undef HAVE_STDLIB_H
+
+/* Define if you have the <string.h> header file.  */
+#undef HAVE_STRING_H
+
+/* Define if you have the <sys/dir.h> header file.  */
+#undef HAVE_SYS_DIR_H
+
+/* Define if you have the <sys/dustat.h> header file.  */
+#undef HAVE_SYS_DUSTAT_H
+
+/* Define if you have the <sys/filsys.h> header file.  */
+#undef HAVE_SYS_FILSYS_H
+
+/* Define if you have the <sys/fs_types.h> header file.  */
+#undef HAVE_SYS_FS_TYPES_H
+
+/* Define if you have the <sys/fstyp.h> header file.  */
+#undef HAVE_SYS_FSTYP_H
+
+/* Define if you have the <sys/mount.h> header file.  */
+#undef HAVE_SYS_MOUNT_H
+
+/* Define if you have the <sys/ndir.h> header file.  */
+#undef HAVE_SYS_NDIR_H
+
+/* Define if you have the <sys/param.h> header file.  */
+#undef HAVE_SYS_PARAM_H
+
+/* Define if you have the <sys/select.h> header file.  */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <sys/statfs.h> header file.  */
+#undef HAVE_SYS_STATFS_H
+
+/* Define if you have the <sys/statvfs.h> header file.  */
+#undef HAVE_SYS_STATVFS_H
+
+/* Define if you have the <sys/vfs.h> header file.  */
+#undef HAVE_SYS_VFS_H
+
+/* Define if you have the <termios.h> header file.  */
+#undef HAVE_TERMIOS_H
+
+/* Define if you have the <unistd.h> header file.  */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the <utime.h> header file.  */
+#undef HAVE_UTIME_H
+
+/* Define if you have the <values.h> header file.  */
+#undef HAVE_VALUES_H
+
+/* Define if you have the i library (-li).  */
+#undef HAVE_LIBI
+
+/* Define if you have the intl library (-lintl).  */
+#undef HAVE_LIBINTL
+
+/* Define if you have the nsl library (-lnsl).  */
+#undef HAVE_LIBNSL
+
+/* Define if you have the pt library (-lpt).  */
+#undef HAVE_LIBPT
+
+/* Define if you have the socket library (-lsocket).  */
+#undef HAVE_LIBSOCKET
+
+#ifdef HAVE_LIBPT
+#    define HAVE_GRANTPT
+#endif
+
+#if defined(HAVE_LIBCRYPT) || defined(HAVE_LIBCRYPT_I)
+#    define HAVE_CRYPT
+#endif
+
+#ifdef HAVE_XVIEW
+#    include <xvmain.h>
+#endif
+
+#if defined(HAVE_SIGADDSET) && defined(HAVE_SIGEMPTYSET)
+# if defined(HAVE_SIGACTION) && defined(HAVE_SIGPROCMASK)
+#  define SLANG_POSIX_SIGNALS
+# endif
+#endif
+
+#ifdef __os2__
+#    define OS2_NT 1
+#    define S_ISFIFO(x) 0
+#endif
+
+#ifdef _OS_NT
+#    define OS2_NT 1
+#endif
+
+#ifndef OS2_NT
+/* some Unices do not define this, and slang requires it: */
+#ifndef unix
+#    define unix
+#endif
+#endif
+
diff --git a/rosapps/mc/config.status b/rosapps/mc/config.status
new file mode 100644 (file)
index 0000000..0733db4
--- /dev/null
@@ -0,0 +1,810 @@
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host ROSBOX:
+#
+# ./configure  --build=mingw32 --host=mingw32 --target=mingw32
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running ${CONFIG_SHELL-/bin/sh} ./configure  --build=mingw32 --host=mingw32 --target=mingw32 --no-create --no-recursion"
+    exec ${CONFIG_SHELL-/bin/sh} ./configure  --build=mingw32 --host=mingw32 --target=mingw32 --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "./config.status generated by autoconf version 2.12"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "$ac_cs_usage"; exit 0 ;;
+  *) echo "$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=.
+ac_given_INSTALL="/usr/bin/install -c"
+
+trap 'rm -fr 
+Make.common 
+Makefile 
+doc/Makefile 
+vfs/Makefile 
+lib/Makefile
+tk/Makefile 
+gnome/Makefile 
+xv/Makefile 
+src/Makefile
+slang/Makefile 
+edit/Makefile 
+icons/Makefile 
+
+lib/mc.ext
+mcfn_install
+vfs/extfs/ftplist vfs/extfs/zip vfs/extfs/zoo vfs/extfs/lslR
+vfs/extfs/lha vfs/extfs/cpio vfs/extfs/deb vfs/extfs/rar
+
+doc/mc.1 doc/mcedit.1 doc/mcserv.8
+
+intl/Makefile po/Makefile.in
+ config.h conftest*; exit 1' 1 2 15
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
+/^[    ]*VPATH[        ]*=[^:]*$/d
+
+s%@CFLAGS@%-g%g
+s%@CPPFLAGS@%-I..  -I$(vfsdir) -I$(rootdir) -I$(slangdir)%g
+s%@CXXFLAGS@%%g
+s%@DEFS@%-DHAVE_CONFIG_H%g
+s%@LDFLAGS@%%g
+s%@LIBS@%-lintl  -lcrypt %g
+s%@exec_prefix@%${prefix}%g
+s%@prefix@%/usr/local%g
+s%@program_transform_name@%s,x,x,%g
+s%@bindir@%${exec_prefix}/bin%g
+s%@sbindir@%${exec_prefix}/sbin%g
+s%@libexecdir@%${exec_prefix}/libexec%g
+s%@datadir@%${prefix}/share%g
+s%@sysconfdir@%${prefix}/etc%g
+s%@sharedstatedir@%${prefix}/com%g
+s%@localstatedir@%${prefix}/var%g
+s%@libdir@%${exec_prefix}/lib%g
+s%@includedir@%${prefix}/include%g
+s%@oldincludedir@%/usr/include%g
+s%@infodir@%${prefix}/info%g
+s%@mandir@%${prefix}/man%g
+s%@MC@%%g
+s%@SET_MAKE@%%g
+s%@CC@%gcc%g
+s%@CPP@%gcc -E%g
+s%@RANLIB@%ranlib%g
+s%@LN_S@%ln -s%g
+s%@AWK@%gawk%g
+s%@AWK_VAR_OPTION@%-v%g
+s%@dep@%fastdep%g
+s%@GNU_MAKE@%GNU_MAKE=yes%g
+s%@MV@%/usr/bin/mv%g
+s%@CP@%/usr/bin/cp%g
+s%@RM@%/usr/bin/rm%g
+s%@CHMOD@%/usr/bin/chmod%g
+s%@AR@%/usr/bin/ar%g
+s%@system@%CYGWIN_98-4.10%g
+s%@X11_WWW@%lynx%g
+s%@ALLOCA@%%g
+s%@USE_NLS@%yes%g
+s%@MSGFMT@%/usr/bin/msgfmt%g
+s%@GMSGFMT@%/usr/bin/msgfmt%g
+s%@XGETTEXT@%/usr/bin/xgettext%g
+s%@GENCAT@%%g
+s%@USE_INCLUDED_LIBINTL@%yes%g
+s%@CATALOGS@% es.gmo fr.gmo ru.gmo ko.gmo it.gmo%g
+s%@CATOBJEXT@%.gmo%g
+s%@DATADIRNAME@%share%g
+s%@GMOFILES@% es.gmo fr.gmo ru.gmo ko.gmo it.gmo%g
+s%@INSTOBJEXT@%.mo%g
+s%@INTLDEPS@%$(top_builddir)/intl/libintl.a%g
+s%@INTLLIBS@%$(top_builddir)/intl/libintl.a%g
+s%@INTLOBJS@%$(GETTOBJS)%g
+s%@POFILES@% es.po fr.po ru.po ko.po it.po%g
+s%@POSUB@%po%g
+s%@INCLUDE_LOCALE_H@%#include <locale.h>%g
+s%@GT_NO@%%g
+s%@GT_YES@%#YES#%g
+s%@MKINSTALLDIRS@%$(top_srcdir)/mkinstalldirs%g
+s%@l@%%g
+s%@INSTALL_PROGRAM@%${INSTALL}%g
+s%@INSTALL_DATA@%${INSTALL} -m 644%g
+s%@REGEX_O@%regex.o%g
+s%@LIBOBJS@%%g
+s%@SHADOWLIB@%%g
+s%@X_CFLAGS@% -I/usr/X11R6/include%g
+s%@X_PRE_LIBS@% -lSM -lICE%g
+s%@X_LIBS@% -L/usr/X11R6/lib%g
+s%@X_EXTRA_LIBS@%%g
+s%@XVIEW_CFLAGS@%  -DXVIEW_MISSING%g
+s%@XVIEW_CPPFLAGS@%%g
+s%@XVIEW_LIBS@%%g
+s%@HAVE_XVIEW@%no%g
+s%@HAVE_XVIEW_PRIVATE_HEADERS@%yes%g
+s%@insticons@%%g
+s%@mxc@%%g
+s%@xvdep@%%g
+s%@ac_my_xp@%%g
+s%@xv_bindir@%%g
+s%@NETFILES@%$(NETFILES)%g
+s%@XCURSES@%%g
+s%@tkmc@%%g
+s%@tkdep@%%g
+s%@tk_includes@%%g
+s%@tk_libs@%%g
+s%@GNOME_LIBS@%%g
+s%@GNOMEUI_LIBS@%%g
+s%@GTKXMHTML_LIBS@%%g
+s%@GNOME_LIBDIR@%%g
+s%@GNOME_INCLUDEDIR@%%g
+s%@gmc@%%g
+s%@gmcdep@%%g
+s%@HAVE_nroff@%true%g
+s%@MANDOC@%-mandoc%g
+s%@TROFFASCII@% -Tascii%g
+s%@HAVE_FILECMD@%true%g
+s%@INTLSUB@%intl%g
+s%@LINTL@%%g
+s%@LIBSLANG@%libmcslang.a%g
+s%@LSLANG@%-lmcslang%g
+s%@fastdepslang@%fastdepslang%g
+s%@TERMNET@%%g
+s%@LIBVFS@%libvfs.a%g
+s%@LVFS@%-lvfs%g
+s%@fastdepvfs@%fastdepvfs%g
+s%@mcserv@%mcserv%g
+s%@LIBEDIT_A@%libedit.a%g
+s%@MCEDIT@%mcedit%g
+s%@LEDIT@%-ledit%g
+s%@undelfs_o@%%g
+s%@saver_target@%%g
+s%@saver@%%g
+s%@vcs@%%g
+s%@PAMLIBS@%%g
+s%@SEDCMD@%sed 's/-man/-mandoc/'%g
+s%@SEDCMD2@%sed 's%@prefix@%$(prefix)%'%g
+s%@XPM_LIB@%%g
+s%@XEXT_LIB@%%g
+s%@PHONY@%.PHONY:%g
+s%@WRITEDEP@%:%g
+s%@MCFG@%include ../Make.common%g
+s%@MCFGR@%include ./Make.common%g
+s%@DOTDEPEND@%ifeq (.depend,$(wildcard .depend)) \
+include .depend \
+endif%g
+/@MCF@/r /dev/null
+s%@MCF@%%g
+s%@PCENTRULE@%%g
+s%@builddir@%/cygdrive/c/user/src/local/mc-4.1.36-mingw%g
+
+CEOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+
+CONFIG_FILES=${CONFIG_FILES-"Make.common 
+Makefile 
+doc/Makefile 
+vfs/Makefile 
+lib/Makefile
+tk/Makefile 
+gnome/Makefile 
+xv/Makefile 
+src/Makefile
+slang/Makefile 
+edit/Makefile 
+icons/Makefile 
+
+lib/mc.ext
+mcfn_install
+vfs/extfs/ftplist vfs/extfs/zip vfs/extfs/zoo vfs/extfs/lslR
+vfs/extfs/lha vfs/extfs/cpio vfs/extfs/deb vfs/extfs/rar
+
+doc/mc.1 doc/mcedit.1 doc/mcserv.8
+
+intl/Makefile po/Makefile.in
+"}
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='\([     ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+  CONFIG_HEADERS="config.h"
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}PACKAGE${ac_dB}PACKAGE${ac_dC}"mc"${ac_dD}
+${ac_uA}PACKAGE${ac_uB}PACKAGE${ac_uC}"mc"${ac_uD}
+${ac_eA}PACKAGE${ac_eB}PACKAGE${ac_eC}"mc"${ac_eD}
+${ac_dA}VERSION${ac_dB}VERSION${ac_dC}"dummy"${ac_dD}
+${ac_uA}VERSION${ac_uB}VERSION${ac_uC}"dummy"${ac_uD}
+${ac_eA}VERSION${ac_eB}VERSION${ac_eC}"dummy"${ac_eD}
+${ac_dA}MAJOR_IN_SYSMACROS${ac_dB}MAJOR_IN_SYSMACROS${ac_dC}1${ac_dD}
+${ac_uA}MAJOR_IN_SYSMACROS${ac_uB}MAJOR_IN_SYSMACROS${ac_uC}1${ac_uD}
+${ac_eA}MAJOR_IN_SYSMACROS${ac_eB}MAJOR_IN_SYSMACROS${ac_eC}1${ac_eD}
+${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
+${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
+${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_ALLOCA${ac_dB}HAVE_ALLOCA${ac_dC}1${ac_dD}
+${ac_uA}HAVE_ALLOCA${ac_uB}HAVE_ALLOCA${ac_uC}1${ac_uD}
+${ac_eA}HAVE_ALLOCA${ac_eB}HAVE_ALLOCA${ac_eC}1${ac_eD}
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_GETPAGESIZE${ac_dB}HAVE_GETPAGESIZE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GETPAGESIZE${ac_uB}HAVE_GETPAGESIZE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GETPAGESIZE${ac_eB}HAVE_GETPAGESIZE${ac_eC}1${ac_eD}
+${ac_dA}HAVE_LIMITS_H${ac_dB}HAVE_LIMITS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LIMITS_H${ac_uB}HAVE_LIMITS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LIMITS_H${ac_eB}HAVE_LIMITS_H${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_LOCALE_H${ac_dB}HAVE_LOCALE_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LOCALE_H${ac_uB}HAVE_LOCALE_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LOCALE_H${ac_eB}HAVE_LOCALE_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_MALLOC_H${ac_dB}HAVE_MALLOC_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MALLOC_H${ac_uB}HAVE_MALLOC_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MALLOC_H${ac_eB}HAVE_MALLOC_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRING_H${ac_dB}HAVE_STRING_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRING_H${ac_uB}HAVE_STRING_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRING_H${ac_eB}HAVE_STRING_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SYS_PARAM_H${ac_dB}HAVE_SYS_PARAM_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_PARAM_H${ac_uB}HAVE_SYS_PARAM_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_PARAM_H${ac_eB}HAVE_SYS_PARAM_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_GETCWD${ac_dB}HAVE_GETCWD${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GETCWD${ac_uB}HAVE_GETCWD${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GETCWD${ac_eB}HAVE_GETCWD${ac_eC}1${ac_eD}
+${ac_dA}HAVE_MUNMAP${ac_dB}HAVE_MUNMAP${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MUNMAP${ac_uB}HAVE_MUNMAP${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MUNMAP${ac_eB}HAVE_MUNMAP${ac_eC}1${ac_eD}
+${ac_dA}HAVE_PUTENV${ac_dB}HAVE_PUTENV${ac_dC}1${ac_dD}
+${ac_uA}HAVE_PUTENV${ac_uB}HAVE_PUTENV${ac_uC}1${ac_uD}
+${ac_eA}HAVE_PUTENV${ac_eB}HAVE_PUTENV${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SETENV${ac_dB}HAVE_SETENV${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SETENV${ac_uB}HAVE_SETENV${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SETENV${ac_eB}HAVE_SETENV${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SETLOCALE${ac_dB}HAVE_SETLOCALE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SETLOCALE${ac_uB}HAVE_SETLOCALE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SETLOCALE${ac_eB}HAVE_SETLOCALE${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRCHR${ac_dB}HAVE_STRCHR${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRCHR${ac_uB}HAVE_STRCHR${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRCHR${ac_eB}HAVE_STRCHR${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRCASECMP${ac_dB}HAVE_STRCASECMP${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRCASECMP${ac_uB}HAVE_STRCASECMP${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRCASECMP${ac_eB}HAVE_STRCASECMP${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_LC_MESSAGES${ac_dB}HAVE_LC_MESSAGES${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LC_MESSAGES${ac_uB}HAVE_LC_MESSAGES${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LC_MESSAGES${ac_eB}HAVE_LC_MESSAGES${ac_eC}1${ac_eD}
+${ac_dA}ENABLE_NLS${ac_dB}ENABLE_NLS${ac_dC}1${ac_dD}
+${ac_uA}ENABLE_NLS${ac_uB}ENABLE_NLS${ac_uC}1${ac_uD}
+${ac_eA}ENABLE_NLS${ac_eB}ENABLE_NLS${ac_eC}1${ac_eD}
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRING_H${ac_dB}HAVE_STRING_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRING_H${ac_uB}HAVE_STRING_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRING_H${ac_eB}HAVE_STRING_H${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_MEMORY_H${ac_dB}HAVE_MEMORY_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MEMORY_H${ac_uB}HAVE_MEMORY_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MEMORY_H${ac_eB}HAVE_MEMORY_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_CRYPT_H${ac_dB}HAVE_CRYPT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_CRYPT_H${ac_uB}HAVE_CRYPT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_CRYPT_H${ac_eB}HAVE_CRYPT_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_GRP_H${ac_dB}HAVE_GRP_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GRP_H${ac_uB}HAVE_GRP_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GRP_H${ac_eB}HAVE_GRP_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_LIMITS_H${ac_dB}HAVE_LIMITS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LIMITS_H${ac_uB}HAVE_LIMITS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LIMITS_H${ac_eB}HAVE_LIMITS_H${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_MALLOC_H${ac_dB}HAVE_MALLOC_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MALLOC_H${ac_uB}HAVE_MALLOC_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MALLOC_H${ac_eB}HAVE_MALLOC_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STDLIB_H${ac_dB}HAVE_STDLIB_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STDLIB_H${ac_uB}HAVE_STDLIB_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STDLIB_H${ac_eB}HAVE_STDLIB_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_TERMIOS_H${ac_dB}HAVE_TERMIOS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_TERMIOS_H${ac_uB}HAVE_TERMIOS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_TERMIOS_H${ac_eB}HAVE_TERMIOS_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_WAIT_H${ac_dB}HAVE_SYS_WAIT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_WAIT_H${ac_uB}HAVE_SYS_WAIT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_WAIT_H${ac_eB}HAVE_SYS_WAIT_H${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_DIRENT_H${ac_dB}HAVE_DIRENT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_DIRENT_H${ac_uB}HAVE_DIRENT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_DIRENT_H${ac_eB}HAVE_DIRENT_H${ac_eC}1${ac_eD}
+${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
+${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
+${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
+${ac_dA}HAVE_ST_BLKSIZE${ac_dB}HAVE_ST_BLKSIZE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_ST_BLKSIZE${ac_uB}HAVE_ST_BLKSIZE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_ST_BLKSIZE${ac_eB}HAVE_ST_BLKSIZE${ac_eC}1${ac_eD}
+${ac_dA}HAVE_ST_BLOCKS${ac_dB}HAVE_ST_BLOCKS${ac_dC}1${ac_dD}
+${ac_uA}HAVE_ST_BLOCKS${ac_uB}HAVE_ST_BLOCKS${ac_uC}1${ac_uD}
+${ac_eA}HAVE_ST_BLOCKS${ac_eB}HAVE_ST_BLOCKS${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_ST_RDEV${ac_dB}HAVE_ST_RDEV${ac_dC}1${ac_dD}
+${ac_uA}HAVE_ST_RDEV${ac_uB}HAVE_ST_RDEV${ac_uC}1${ac_uD}
+${ac_eA}HAVE_ST_RDEV${ac_eB}HAVE_ST_RDEV${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRERROR${ac_dB}HAVE_STRERROR${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRERROR${ac_uB}HAVE_STRERROR${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRERROR${ac_eB}HAVE_STRERROR${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STATFS${ac_dB}HAVE_STATFS${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STATFS${ac_uB}HAVE_STATFS${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STATFS${ac_eB}HAVE_STATFS${ac_eC}1${ac_eD}
+${ac_dA}HAVE_GETWD${ac_dB}HAVE_GETWD${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GETWD${ac_uB}HAVE_GETWD${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GETWD${ac_eB}HAVE_GETWD${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_STRCASECMP${ac_dB}HAVE_STRCASECMP${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRCASECMP${ac_uB}HAVE_STRCASECMP${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRCASECMP${ac_eB}HAVE_STRCASECMP${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRNCASECMP${ac_dB}HAVE_STRNCASECMP${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRNCASECMP${ac_uB}HAVE_STRNCASECMP${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRNCASECMP${ac_eB}HAVE_STRNCASECMP${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRDUP${ac_dB}HAVE_STRDUP${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRDUP${ac_uB}HAVE_STRDUP${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRDUP${ac_eB}HAVE_STRDUP${ac_eC}1${ac_eD}
+${ac_dA}HAVE_MEMMOVE${ac_dB}HAVE_MEMMOVE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MEMMOVE${ac_uB}HAVE_MEMMOVE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MEMMOVE${ac_eB}HAVE_MEMMOVE${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_TRUNCATE${ac_dB}HAVE_TRUNCATE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_TRUNCATE${ac_uB}HAVE_TRUNCATE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_TRUNCATE${ac_eB}HAVE_TRUNCATE${ac_eC}1${ac_eD}
+${ac_dA}HAVE_INITGROUPS${ac_dB}HAVE_INITGROUPS${ac_dC}1${ac_dD}
+${ac_uA}HAVE_INITGROUPS${ac_uB}HAVE_INITGROUPS${ac_uC}1${ac_uD}
+${ac_eA}HAVE_INITGROUPS${ac_eB}HAVE_INITGROUPS${ac_eC}1${ac_eD}
+${ac_dA}HAVE_PUTENV${ac_dB}HAVE_PUTENV${ac_dC}1${ac_dD}
+${ac_uA}HAVE_PUTENV${ac_uB}HAVE_PUTENV${ac_uC}1${ac_uD}
+${ac_eA}HAVE_PUTENV${ac_eB}HAVE_PUTENV${ac_eC}1${ac_eD}
+${ac_dA}HAVE_MEMSET${ac_dB}HAVE_MEMSET${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MEMSET${ac_uB}HAVE_MEMSET${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MEMSET${ac_eB}HAVE_MEMSET${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_MEMCPY${ac_dB}HAVE_MEMCPY${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MEMCPY${ac_uB}HAVE_MEMCPY${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MEMCPY${ac_eB}HAVE_MEMCPY${ac_eC}1${ac_eD}
+${ac_dA}HAVE_TCSETATTR${ac_dB}HAVE_TCSETATTR${ac_dC}1${ac_dD}
+${ac_uA}HAVE_TCSETATTR${ac_uB}HAVE_TCSETATTR${ac_uC}1${ac_uD}
+${ac_eA}HAVE_TCSETATTR${ac_eB}HAVE_TCSETATTR${ac_eC}1${ac_eD}
+${ac_dA}HAVE_TCGETATTR${ac_dB}HAVE_TCGETATTR${ac_dC}1${ac_dD}
+${ac_uA}HAVE_TCGETATTR${ac_uB}HAVE_TCGETATTR${ac_uC}1${ac_uD}
+${ac_eA}HAVE_TCGETATTR${ac_eB}HAVE_TCGETATTR${ac_eC}1${ac_eD}
+${ac_dA}HAVE_CFGETOSPEED${ac_dB}HAVE_CFGETOSPEED${ac_dC}1${ac_dD}
+${ac_uA}HAVE_CFGETOSPEED${ac_uB}HAVE_CFGETOSPEED${ac_uC}1${ac_uD}
+${ac_eA}HAVE_CFGETOSPEED${ac_eB}HAVE_CFGETOSPEED${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SIGACTION${ac_dB}HAVE_SIGACTION${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SIGACTION${ac_uB}HAVE_SIGACTION${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SIGACTION${ac_eB}HAVE_SIGACTION${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SIGEMPTYSET${ac_dB}HAVE_SIGEMPTYSET${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SIGEMPTYSET${ac_uB}HAVE_SIGEMPTYSET${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SIGEMPTYSET${ac_eB}HAVE_SIGEMPTYSET${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SIGPROCMASK${ac_dB}HAVE_SIGPROCMASK${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SIGPROCMASK${ac_uB}HAVE_SIGPROCMASK${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SIGPROCMASK${ac_eB}HAVE_SIGPROCMASK${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SIGADDSET${ac_dB}HAVE_SIGADDSET${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SIGADDSET${ac_uB}HAVE_SIGADDSET${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SIGADDSET${ac_eB}HAVE_SIGADDSET${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SYSCONF${ac_dB}HAVE_SYSCONF${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYSCONF${ac_uB}HAVE_SYSCONF${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYSCONF${ac_eB}HAVE_SYSCONF${ac_eC}1${ac_eD}
+${ac_dA}NEED_CRYPT_PROTOTYPE${ac_dB}NEED_CRYPT_PROTOTYPE${ac_dC}1${ac_dD}
+${ac_uA}NEED_CRYPT_PROTOTYPE${ac_uB}NEED_CRYPT_PROTOTYPE${ac_uC}1${ac_uD}
+${ac_eA}NEED_CRYPT_PROTOTYPE${ac_eB}NEED_CRYPT_PROTOTYPE${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_SELECT_H${ac_dB}HAVE_SYS_SELECT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_SELECT_H${ac_uB}HAVE_SYS_SELECT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_SELECT_H${ac_eB}HAVE_SYS_SELECT_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_GRANTPT${ac_dB}HAVE_GRANTPT${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GRANTPT${ac_uB}HAVE_GRANTPT${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GRANTPT${ac_eB}HAVE_GRANTPT${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_LIBINTL${ac_dB}HAVE_LIBINTL${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LIBINTL${ac_uB}HAVE_LIBINTL${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LIBINTL${ac_eB}HAVE_LIBINTL${ac_eC}1${ac_eD}
+${ac_dA}HAVE_FCNTL_H${ac_dB}HAVE_FCNTL_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_FCNTL_H${ac_uB}HAVE_FCNTL_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_FCNTL_H${ac_eB}HAVE_FCNTL_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_PARAM_H${ac_dB}HAVE_SYS_PARAM_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_PARAM_H${ac_uB}HAVE_SYS_PARAM_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_PARAM_H${ac_eB}HAVE_SYS_PARAM_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_MNTENT_H${ac_dB}HAVE_MNTENT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MNTENT_H${ac_uB}HAVE_MNTENT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MNTENT_H${ac_eB}HAVE_MNTENT_H${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_UTIME_H${ac_dB}HAVE_UTIME_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UTIME_H${ac_uB}HAVE_UTIME_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UTIME_H${ac_eB}HAVE_UTIME_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_VFS_H${ac_dB}HAVE_SYS_VFS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_VFS_H${ac_uB}HAVE_SYS_VFS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_VFS_H${ac_eB}HAVE_SYS_VFS_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_MOUNT_H${ac_dB}HAVE_SYS_MOUNT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_MOUNT_H${ac_uB}HAVE_SYS_MOUNT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_MOUNT_H${ac_eB}HAVE_SYS_MOUNT_H${ac_eC}1${ac_eD}
+${ac_dA}D_INO_IN_DIRENT${ac_dB}D_INO_IN_DIRENT${ac_dC}1${ac_dD}
+${ac_uA}D_INO_IN_DIRENT${ac_uB}D_INO_IN_DIRENT${ac_uC}1${ac_uD}
+${ac_eA}D_INO_IN_DIRENT${ac_eB}D_INO_IN_DIRENT${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_GETMNTENT${ac_dB}HAVE_GETMNTENT${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GETMNTENT${ac_uB}HAVE_GETMNTENT${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GETMNTENT${ac_eB}HAVE_GETMNTENT${ac_eC}1${ac_eD}
+${ac_dA}MOUNTED_GETMNTENT1${ac_dB}MOUNTED_GETMNTENT1${ac_dC}1${ac_dD}
+${ac_uA}MOUNTED_GETMNTENT1${ac_uB}MOUNTED_GETMNTENT1${ac_uC}1${ac_uD}
+${ac_eA}MOUNTED_GETMNTENT1${ac_eB}MOUNTED_GETMNTENT1${ac_eC}1${ac_eD}
+${ac_dA}STAT_STATFS2_BSIZE${ac_dB}STAT_STATFS2_BSIZE${ac_dC}1${ac_dD}
+${ac_uA}STAT_STATFS2_BSIZE${ac_uB}STAT_STATFS2_BSIZE${ac_uC}1${ac_uD}
+${ac_eA}STAT_STATFS2_BSIZE${ac_eB}STAT_STATFS2_BSIZE${ac_eC}1${ac_eD}
+${ac_dA}umode_t${ac_dB}umode_t${ac_dC}int${ac_dD}
+${ac_uA}umode_t${ac_uB}umode_t${ac_uC}int${ac_uD}
+${ac_eA}umode_t${ac_eB}umode_t${ac_eC}int${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_GETPAGESIZE${ac_dB}HAVE_GETPAGESIZE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GETPAGESIZE${ac_uB}HAVE_GETPAGESIZE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GETPAGESIZE${ac_eB}HAVE_GETPAGESIZE${ac_eC}1${ac_eD}
+${ac_dA}HAVE_ALLOCA${ac_dB}HAVE_ALLOCA${ac_dC}1${ac_dD}
+${ac_uA}HAVE_ALLOCA${ac_uB}HAVE_ALLOCA${ac_uC}1${ac_uD}
+${ac_eA}HAVE_ALLOCA${ac_eB}HAVE_ALLOCA${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SOCKET${ac_dB}HAVE_SOCKET${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SOCKET${ac_uB}HAVE_SOCKET${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SOCKET${ac_eB}HAVE_SOCKET${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SOCKETPAIR${ac_dB}HAVE_SOCKETPAIR${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SOCKETPAIR${ac_uB}HAVE_SOCKETPAIR${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SOCKETPAIR${ac_eB}HAVE_SOCKETPAIR${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRUCT_LINGER${ac_dB}HAVE_STRUCT_LINGER${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRUCT_LINGER${ac_uB}HAVE_STRUCT_LINGER${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRUCT_LINGER${ac_eB}HAVE_STRUCT_LINGER${ac_eC}1${ac_eD}
+${ac_dA}HAVE_RRESVPORT${ac_dB}HAVE_RRESVPORT${ac_dC}1${ac_dD}
+${ac_uA}HAVE_RRESVPORT${ac_uB}HAVE_RRESVPORT${ac_uC}1${ac_uD}
+${ac_eA}HAVE_RRESVPORT${ac_eB}HAVE_RRESVPORT${ac_eC}1${ac_eD}
+${ac_dA}FILE_STDIN${ac_dB}FILE_STDIN${ac_dC}1${ac_dD}
+${ac_uA}FILE_STDIN${ac_uB}FILE_STDIN${ac_uC}1${ac_uD}
+${ac_eA}FILE_STDIN${ac_eB}FILE_STDIN${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}FILE_L${ac_dB}FILE_L${ac_dC}1${ac_dD}
+${ac_uA}FILE_L${ac_uB}FILE_L${ac_uC}1${ac_uD}
+${ac_eA}FILE_L${ac_eB}FILE_L${ac_eC}1${ac_eD}
+${ac_dA}GREP_STDIN${ac_dB}GREP_STDIN${ac_dC}1${ac_dD}
+${ac_uA}GREP_STDIN${ac_uB}GREP_STDIN${ac_uC}1${ac_uD}
+${ac_eA}GREP_STDIN${ac_eB}GREP_STDIN${ac_eC}1${ac_eD}
+${ac_dA}HAVE_DUSUM${ac_dB}HAVE_DUSUM${ac_dC}1${ac_dD}
+${ac_uA}HAVE_DUSUM${ac_uB}HAVE_DUSUM${ac_uC}1${ac_uD}
+${ac_eA}HAVE_DUSUM${ac_eB}HAVE_DUSUM${ac_eC}1${ac_eD}
+${ac_dA}DUSUM_USEB${ac_dB}DUSUM_USEB${ac_dC}1${ac_dD}
+${ac_uA}DUSUM_USEB${ac_uB}DUSUM_USEB${ac_uC}1${ac_uD}
+${ac_eA}DUSUM_USEB${ac_eB}DUSUM_USEB${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}DUSUM_FACTOR${ac_dB}DUSUM_FACTOR${ac_dC}1${ac_dD}
+${ac_uA}DUSUM_FACTOR${ac_uB}DUSUM_FACTOR${ac_uC}1${ac_uD}
+${ac_eA}DUSUM_FACTOR${ac_eB}DUSUM_FACTOR${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SUBSHELL_SUPPORT${ac_dB}HAVE_SUBSHELL_SUPPORT${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SUBSHELL_SUPPORT${ac_uB}HAVE_SUBSHELL_SUPPORT${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SUBSHELL_SUPPORT${ac_eB}HAVE_SUBSHELL_SUPPORT${ac_eC}1${ac_eD}
+${ac_dA}USE_VFS${ac_dB}USE_VFS${ac_dC}1${ac_dD}
+${ac_uA}USE_VFS${ac_uB}USE_VFS${ac_uC}1${ac_uD}
+${ac_eA}USE_VFS${ac_eB}USE_VFS${ac_eC}1${ac_eD}
+${ac_dA}USE_NETCODE${ac_dB}USE_NETCODE${ac_dC}1${ac_dD}
+${ac_uA}USE_NETCODE${ac_uB}USE_NETCODE${ac_uC}1${ac_uD}
+${ac_eA}USE_NETCODE${ac_eB}USE_NETCODE${ac_eC}1${ac_eD}
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  cat > conftest.frag <<CEOF
+${ac_dA}USE_INTERNAL_EDIT${ac_dB}USE_INTERNAL_EDIT${ac_dC}1${ac_dD}
+${ac_uA}USE_INTERNAL_EDIT${ac_uB}USE_INTERNAL_EDIT${ac_uC}1${ac_uD}
+${ac_eA}USE_INTERNAL_EDIT${ac_eB}USE_INTERNAL_EDIT${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SLANG${ac_dB}HAVE_SLANG${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SLANG${ac_uB}HAVE_SLANG${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SLANG${ac_eB}HAVE_SLANG${ac_eC}1${ac_eD}
+${ac_dA}SLANG_TERMINFO${ac_dB}SLANG_TERMINFO${ac_dC}1${ac_dD}
+${ac_uA}SLANG_TERMINFO${ac_uB}SLANG_TERMINFO${ac_uC}1${ac_uD}
+${ac_eA}SLANG_TERMINFO${ac_eB}SLANG_TERMINFO${ac_eC}1${ac_eD}
+s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+ac_sources="intl/libgettext.h"
+ac_dests="intl/libintl.h"
+srcdir=$ac_given_srcdir
+while test -n "$ac_sources"; do
+  set $ac_dests; ac_dest=$1; shift; ac_dests=$*
+  set $ac_sources; ac_source=$1; shift; ac_sources=$*
+
+  echo "linking $srcdir/$ac_source to $ac_dest"
+
+  if test ! -r $srcdir/$ac_source; then
+    { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
+  fi
+  rm -f $ac_dest
+
+  # Make relative symlinks.
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
+    # The dest file is in a subdirectory.
+    test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
+    ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dest_dir_suffix.
+    ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dest_dir_suffix= ac_dots=
+  fi
+
+  case "$srcdir" in
+  [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
+  *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
+  esac
+
+  # Make a symlink if possible; otherwise try a hard link.
+  if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
+    ln $srcdir/$ac_source $ac_dest; then :
+  else
+    { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
+  fi
+done
+
+sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+exit 0
diff --git a/rosapps/mc/create_vcs b/rosapps/mc/create_vcs
new file mode 100644 (file)
index 0000000..389216f
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Script by Jakub Jelinek
+#
+if test -e /dev/vcs0
+then
+       exit
+fi
+
+I=0
+while [ $I -lt 64 ] 
+do
+        mknod /dev/vcs$I c 7 $I
+        chmod 622 /dev/vcs$I
+        chown root.tty /dev/vcs$I
+        mknod /dev/vcsa$I c 7 `expr $I + 128`
+        chmod 622 /dev/vcsa$I
+        chown root.tty /dev/vcsa$I
+        I=`expr $I + 1`
+done
diff --git a/rosapps/mc/doc/Makefile b/rosapps/mc/doc/Makefile
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/rosapps/mc/doc/faq b/rosapps/mc/doc/faq
new file mode 100644 (file)
index 0000000..df9f119
--- /dev/null
@@ -0,0 +1,934 @@
+                                       
+                              Midnight Commander
+                             Questions and Answers
+                                       
+   The newest version of this document is available at
+   http://mc.blackdown.org/mc/answers0.html
+   
+     * 1 Getting started
+          + 1.1 What is Midnight Commander?
+          + 1.2 [UPDATED] 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 Midnight Commander PD? Copyrighted?
+          + 1.6 Where can I get Midnight Commander?
+          + 1.7 I don't have FTP access. Where can I get MC?
+     * 2 Keyboard
+          + 2.1 What does documentation mean with the C-?, M-? and F?
+            keys?
+          + 2.2 [UPDATED] 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?
+     * 3 Mouse
+          + 3.1 How do I enable mouse support?
+          + 3.2 How do I cut and paste text with mouse?
+     * 4 Display
+          + 4.1 Why do I keep getting "Terminal not powerful enough for
+            SLang"?
+          + 4.2 [UPDATED] 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 color_xterm?
+          + 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 and Tk editions?
+     * 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 [NEW] I am using ksh. Can I use functions defined in the
+            .kshrc within MC?
+          + 6.5 [NEW] Is there any way to include additional options or
+            hot keys to MC?
+     * 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 [NEW] What kind of proxy server works with Midnight
+            Commander?
+     * 8 Other common problems
+          + 8.1 [UPDATED] How do I get the internal editor to work?
+          + 8.2 Why doesn't "mcedit newfile" work?
+          + 8.3 [UPDATED] Is there any way to 'bookmark' favourite ftp-fs
+            links?
+          + 8.4 When copying the directories lose their original date,
+            uid and gid!
+          + 8.5 [UPDATED] Why I keep getting: "There is no disk in the
+            drive. Please insert a disk into drive D:"?
+          + 8.6 [NEW] When I start Midnight Commander, nothing happens!
+          + 8.7 [NEW] When I try to view a file MC hangs!
+     * 9 Development
+          + 9.1 Who has written Midnight Commander?
+          + 9.2 Do I dare to use a development version?
+          + 9.3 How can I report a bug/request for a feature?
+          + 9.4 How can I join the development?
+     * 10 More information
+          + 10.1 [UPDATED] This document didn't answer my question. Where
+            else can I look for an answer?
+          + 10.2 What mailing lists are there for Midnight Commander?
+          + 10.3 Where should I look on the World Wide Web for MC stuff?
+          + 10.4 Are the mailing lists archived anywhere?
+     * 11 Administrivia
+          + 11.1 Authorship
+          + 11.2 [UPDATED] File formats
+          + 11.3 Feedback is invited
+          + 11.4 Disclaimer and copyright
+       
+1 Getting started
+
+  1.1 What is Midnight Commander?
+  
+   The 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. You will wonder how
+   you could ever live without it.
+   
+   For more thorough description take a look at the announcement of
+   Midnight Commander 4.0.
+   
+  1.2 [UPDATED] Does it run on my machine?
+  
+   Yes, Midnight Commander can run on almost any machine, including Unix
+   clones, Windows 95/NT and OS/2. Midnight Commander does not run on
+   Macintosh.
+   
+   Midnight Commander uses GNU autoconfigure which can automatically
+   configure Midnight Commander for use on almost any (if not every) Unix
+   clone. Following configurations have been tested:
+     * i386-*-linux1.x, 2.x
+     * alpha-linux-linux2
+     * sparc-linux-linux2.x
+     * sparc64-linux-linux2.1
+     * mips-sgi-irix5.x, 6.x
+     * mips-dec-ultrix4.3
+     * rs6000-ibm-aix3.2.5
+     * 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
+     * i386-*-windows-nt-3.51, 4.0
+     * i386-*-windows95
+     * i386-*-os2
+       
+   See http://mc.blackdown.org/mc/download.html.
+   
+   There is also a preliminary Ms-Dos port at
+   http://mc.blackdown.org/cgi-mc/download/DOS/.html (but no Ms-Dos
+   binary).
+   
+   Windows 95/NT port is compiled with Microsoft Visual C++ but it might
+   be possible to use cygwin32 or djgpp instead.
+   
+  1.3 Does it work with my terminal?
+  
+   Yes, it does.
+   
+   Because 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
+   Midnight Commander.
+   
+   The XView and Tk editions currently under development will require an
+   X terminal.
+   
+  1.4 What else do I need to run MC?
+  
+   You need an Unix compatible operating system or Windows 95/NT or OS/2.
+   
+   If you want to use mouse on the Linux console you need General Purpose
+   Mouse server from iride.unipv.it: /pub/gpm/. You need nothing extra to
+   use mouse on xterm.
+   
+   To compile the XView edition (currently under development) you need
+   XView library. Xpm library and X11 non-rectangular shape extensions
+   are recommended.
+   
+   To compile the Tk edition (currently under development) you need
+   Tk-4.0 libraries. Compilation of the Tk version won't be easy. Contact
+   Miguel for details.
+   
+   If you do not want to use the slang library you could try using
+   ncurses (we recommend only version 4.1 and above).
+   
+   You can get it along with other curses libraries, too, but results may
+   not be pretty or even usable.
+   
+  1.5 Is Midnight Commander PD? 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 the Midnight Commander
+   source distribution (the COPYING file).
+   
+   Midnight Commander is nowadays officially a part of GNU project. All
+   the authors of the Midnight Commander have given all their rights on
+   the program to the Free Software Foundation.
+   
+  1.6 Where can I get Midnight Commander?
+  
+   See http://mc.blackdown.org/mc/download.html. There are about seventy
+   download sites. Note that the newest files might not be present on all
+   the download sites yet.
+   
+   In short: the main site is ftp://ftp.nuclecu.unam.mx/linux/local/ and
+   the sunsite.unc.edu mirrors have MC in the
+   /pub/Linux/utils/file/managers/mc directory.
+   
+  1.7 I don't have FTP access. Where can I get MC?
+  
+   Most Linux CD-ROMs include Midnight Commander. For example, Slackware,
+   Yggdrasil, S.U.S.E., Jurix, RedHat, Caldera and Debian.
+   
+2 Keyboard
+
+  2.1 What does documentation mean with the C-?, M-? and F? keys?
+  
+   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.
+   
+   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 [UPDATED] Why don't function keys (or some other key) work?
+  
+   Your terminfo or termcap database has missing or incorrect definations
+   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" you should install one of the enhanced terminfo databases
+   included in the 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.
+   
+   Best terminfo database is bundled with ncurses 4.2
+
+   You can select whether Midnight Commander will use terminfo or termcap
+   database by giving --with-terminfo or --with-termcap option to the
+   configure. Default is terminfo if found, otherwise termcap.
+   
+   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 can mapped to function keys F1 to F10 with Shift held. eg.
+   function key F13 can be activated by pressing Shift-F3. You can define
+   the keys this way in the Options menu. The convention for PC keyboards
+   is that F11-20 always means Shift with F1-10
+   
+   Note! Windows 95/NT and OS/2 ports use F11 and F12 keys to change the
+   current disk drive. In this case F11 and F12 mean the real F11 and F12
+   keys, not shift-F1 and shift-F2.
+   
+  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
+   ~/.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).
+   
+   X terminals allow more control over keyboard, so these ESC limitations
+   might not concern the forthcoming XView and Tk editions of the
+   Midnight Commander.
+   
+  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 "\".
+   
+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'n'paste.
+   
+4 Display
+
+  4.1 Why do I keep getting "Terminal not powerful enough for SLang"?
+  
+   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
+     
+   If this doesn't help you can recompile MC to use termcap instead of
+   terminfo:
+   
+     ./configure --with-termcap
+     make
+     
+  4.2 [UPDATED] Why don't line drawing characters work?
+  
+   Since version 4.0.13 there's the commandline option -a to force use of
+   +, |, - for line drawing (only available when compiled with SLang).
+   Use this -a option if any of the suggestions below doesn't help.
+   
+   In general, there are three subcases:
+     * Lines are shown as ASCII characters like this
+
+      +---------+
+      |         |
+      +---------+
+   This also happens when you use the -a option. Other than that possible
+       reason is 1, 2 or 3 (see below).
+     * Lines are shown as lower case characters like this
+
+      lqqqqqqqqqk
+      x         x
+      mqqqqqqqqqj
+   Possible reason is 2 or 3 (see below).
+     * Lines are shown as blanks or missing characters. Possible reason
+       is 3 or 4 (see below).
+       
+   The reason for the problem is one of following:
+    1. Your curses library might not support line drawing characters.
+       Slang, Ncurses and System V curses do support them, BSD curses
+       doesn't. MC uses Slang by default so this is not usually a
+       problem.
+    2. Your terminal might not support line drawing characters. Vt100
+       compatible terminals, rxvt, xterm and color_xterm do support them.
+    3. Your terminfo or termcap database might have missing or incorrect
+       definations 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.
+    4. 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!
+  
+   Upgrade to version 4.0.12 or newer.
+   
+   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 compelety black, see the next question.
+   
+   More detailed answer:
+   
+   First, 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).
+   
+   Second, check that you are using Ncurses or the Slang library (type
+   "mc -V" to find out), in addition some System V curses implementations
+   do support color, most don't.
+   
+   With Slang library you can force color support by setting the
+   environment variable COLORTERM to any value.
+   
+   Third, 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 the Midnight Commander source distribution.
+   
+   Fourth, you might want to set the TERM environment variable so that
+   you use 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 color_xterm?
+  
+   Try ftp.x.org: /contrib/utilities/colour_xterm.tar.gz.
+   
+   Alternatively, rxvt is a better choice, see
+   http://mc.blackdown.org/cgi-mc/download/rxvt/.html
+   
+  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
+
+  4.9 Why are there both terminfo and termcap? Wouldn't one database be enough?
+  
+   You might want to read the Unix-haters handbook at
+   http://www.digital.de/people/jmh/Unix_Haters/unix-haters.html. It
+   lists many more reasons why Unix sucks.
+   
+   You can configure which terminal database you want to use with the
+   "--with-termcap" and "--with-terminfo" flags of configure. If you
+   don't specify them, the configure script will try to use terminfo if
+   available otherwise it will use termcap.
+   
+5 Graphical user interface
+
+  5.1 Xview and Tk editions?
+  
+   Get the newest development version, give the "--with-xview" or
+   "--with-tk" option to the configure and otherwise compile as usual.
+   See Download.
+   
+   Xview and Tk editions are work in progress, they are not as robust as
+   the text mode edition.
+   
+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?
+  
+   You can browse previous commands with M-p and M-n. Alternatively, you
+   can summon the command history listbox by pressing F9 c 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 [NEW] 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 [NEW] Is there any way to include additional options or hot keys to MC?
+  
+   Yes, F2 invokes an user menu which fully configurable. You can add any
+   shell commands to the user menu. See
+   http://mc.blackdown.org/mc/manual-d.html#8 for more info.
+   
+   Another way to add functionality is the external panelize feature. See
+   http://mc.blackdown.org/mc/manual-d.html#4 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.
+   
+7 Virtual file systems
+
+   Note! Virtual file systems are supported by Unix ports only. The
+   Windows 95/NT and OS/2 ports do NOT support virtual file systems. This
+   means you haven't got ftp, zip or tar support on Windows 95/NT and
+   OS/2.
+   
+  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 doubleclick on the tar file.
+   
+   If these procedures don't work, your .mc.ext file is faulty. Replace
+   it with one from the MC source distribution.
+   
+   You can also enter a tar archive by typing "cd tar:filename.tar.gz"
+   where filename.tar.gz is the name of the archive.
+   
+   The recognized suffixes for tar archives are .tar, .tar.gz and .tgz.
+   If your tar archive uses different suffix you have to rename it.
+   
+  7.2 How do I get out of a tar archive?
+  
+   Just press enter on the toplevel ".." file or chdir 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 chdir to a non-ftp directory. Just typing "cd" with no parameters
+   is enough (it will take you to your home directory).
+   
+   Internally Midnight Commander closes ftp connection only after a
+   timeout. This isn't visible to the end user.
+   
+  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 [NEW] What kind of proxy server works with Midnight Commander?
+  
+   Midnight Commander only supports ftp-like ftp proxies. Common WWW
+   proxies (like Squid) are not supported yet because they make ftp
+   connections look like http connections.
+   
+8 Other common problems
+
+  8.1 [UPDATED] How do I get the internal editor to work?
+  
+   The F4 key defaults to an external editor because thats what most
+   people are used to. To use the internal editor, select Configuration
+   from the Options menu and check the 'use internal edit' option.
+   
+   Alternatively add the line
+     use_internal_edit=1
+
+   under the [Midnight-Commander] section in your .mc.ini file (which is
+   in your home directory).
+   
+   To make the editor work all the time, go to the default/* section in
+   the file lib/mc/mc.ext file and remove the line
+
+       Edit=%var{EDITOR:vi} %f
+
+   The internal editor will now be invoked for anything not specified
+   elsewhere in the mc.ext file.
+   
+   Make sure that you edit the correct mc.ext file. The Midnight
+   Commander first checks the existance of $HOME/.mc.ext. If this file is
+   missing MC will use $prefix/lib/mc/mc.ext instead ($prefix can be
+   changed with configure before compilation and it defaults to
+   /usr/local).
+   
+   When you run `F9/Command/Extension file edit' for the very first time
+   Midnight Commander copies the system-wide mc.ext from $prefix/lib/mc
+   into your home directory because you need write access in order to
+   change it.
+   
+   And please don't forget that "make install" overwrites
+   $prefix/lib/mc/mc.ext.
+   
+  8.2 Why doesn't "mcedit newfile" work?
+  
+   This is a known bug.
+   
+   If the newfile doesn't exist, mcedit fails.
+   
+   Start mcedit with no parameters, this will create a blank file. Then
+   save the file with whatever name you like.
+   
+  8.3 [UPDATED] Is there any way to 'bookmark' favourite 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.
+   
+  8.4 When copying the directories lose their original date, uid and gid!
+  
+   This is a known bug. At moment only files preserve their original
+   settings when copying, not directories.
+   
+   Uid and gid is fixed since 4.0.1. "Preserve UIDs/GIDs" in the copy
+   dialog needs to be checked and you must be root.
+   
+   Date problem is supposed to be fixed with 4.0.13.
+   
+  8.5 [UPDATED] Why I keep getting: "There is no disk in the drive. Please
+  insert a disk into drive D:"?
+  
+   This is a known bug of the Windows 95/NT and OS/2 ports. MC looks its
+   configuration files from the D:\MC directory and if the D: drive is a
+   removable drive (like a CD ROM drive) and there is no disk in drive
+   you get this message everytime you try to do anything.
+   
+   Since version 4.0.6 you can specify the actual location of the
+   Midnight Commander configuration files with the MCHOME environment
+   variable.
+   
+  8.6 [NEW] 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.
+   
+   If disabling subshell doesn't help, try to reconfigure MC with
+   "--with-our-slang" and "--with-termcap" options and recompile. If this
+   helps, there is something wrong with your terminfo database or shared
+   slang library. For better terminfo databases see chapter 4. For a
+   better slang library, upgrade to a newer version or keep using the
+   "--with-our-slang" option.
+   
+  8.7 [NEW] When I try to view a file MC hangs!
+  
+   This is known bug. A quick fix is "chmod 666 /dev/tty". For a more
+   complete fix, see http://mc.blackdown.org/mc/maillist/97-10/98.html.
+   
+   This bug will probably be fixed in 4.1.6.
+   
+9 Development
+
+  9.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, retired)
+     * Janne Kukonlehto (joined Sep 27 1994, retired Mar 8 1995, nowadays
+       Janne is the webmaster of the Midnight Commander web site)
+     * 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 Davis has made his S-Lang library
+   available to us and answered many questions about it.
+   
+   The photographs of the authors are available as:
+   
+     http://mc.blackdown.org/mc/about.html
+     
+   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
+       
+  9.2 Do I dare to use a development version?
+  
+   I am afraid you have to answer to this question yourself. Development
+   versions seldom cause data loss but they have usually got many bugs.
+   It's up to you to judge whether new features outweight the bugs.
+   
+  9.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.
+   
+   Send your report/request to mc-devel@roxanne.nuclecu.unam.mx or
+   mc@roxanne.nuclecu.unam.mx. 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".
+       
+  9.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@nuclecu.unam.mx.
+   Before you start coding check the latest development version. It might
+   be that your feature has already been implemented.
+   
+   Note that the authors of the 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.
+   
+10 More information
+
+  10.1 [UPDATED] This document didn't answer my question. Where else can I look
+  for an answer?
+  
+   Read messages from the Discussion (mailing list archive), search the
+   web site 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@nuclecu.unam.mx.
+   
+  10.2 What mailing lists are there for Midnight Commander?
+  
+   Following mailing lists discuss about Midnight Commander:
+   
+   mc
+          General discussion of the Midnight Commander
+          
+   mc-digest
+          The mc list, in digest format
+          
+   mc-announce
+          Major announcements about the Commander
+          
+   mc-patch
+          The latest Commander patches
+          
+   mc-devel
+          Technical development discussion
+          
+   mc-chat
+          Non-MC related chatting by the developers (contact Miguel to
+          subscribe)
+          
+   To subscribe, send e-mail to majordomo@roxanne.nuclecu.unam.mx with
+   the following line in the body of the message:
+
+    subscribe <list-name> [optional-address]
+
+   Replace <list-name> with the name of the list you want to subscribe
+   and [optional-address] with your email address.
+   
+  10.3 Where should I look on the World Wide Web for MC stuff?
+  
+   There is a WWW page for Midnight Commander. The URL is:
+   
+     http://mc.blackdown.org/mc/
+     
+   The WWW page features MC screen shots, photographs of the authors,
+   mailing list archive and a few other things.
+   
+  10.4 Are the mailing lists archived anywhere?
+  
+   The mc and mc-devel lists are archived on the World Wide Web page (see
+   the previous question). Other lists are not currently archived though
+   Miguel keeps a private archive. Contact him if you want copies of past
+   messages.
+   
+11 Administrivia
+
+  11.1 Authorship
+  
+   Questions and Answers is written by Janne Kukonlehto. Parts of it
+   originate from Ian Jackson, Miguel de Icaza, Dugan Porter, Norbert
+   Warmuth and Paul Sheer.
+   
+  11.2 [UPDATED] File formats
+  
+   This document is available in HTML, postscript and PDF formats at
+   http://mc.blackdown.org/mc/answers0.html.
+   
+   This document is available in ASCII format in the Midnight Commander
+   source package.
+   
+  11.3 Feedback is invited
+  
+   Send your comments about this document to janne@mc.blackdown.org
+   
+   Send your comments about the Midnight Commander to mc@nuclecu.unam.mx
+   
+  11.4 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 Public License (see
+   the COPYING file in the Midnight Commander source distribution).
+   Questions and Answers is not public domain.
+     __________________________________________________________________
+                                      
+   This document is maintained by Janne Kukonlehto
+   <janne@mc.blackdown.org>.
+   
diff --git a/rosapps/mc/doc/install b/rosapps/mc/doc/install
new file mode 100644 (file)
index 0000000..c6d28d8
--- /dev/null
@@ -0,0 +1,529 @@
+-*-text-*-
+
+This file contains:
+
+- Installation instructions and notes for the Midnight Commander
+- Where to get more information on the Midnight Commander
+- Common problems
+- Information on porting the program
+- Obtaining the missing pieces of the Midnight Commander
+
+
+Installation instructions for the Midnight Commander
+----------------------------------------------------
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation, and creates
+the Makefile.  It also creates a file `config.status' that you can run
+in the future to recreate the current configuration.
+
+(Nextstep users, make sure you read the "Compiling under Nextstep"
+section)
+
+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 System V, 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 its standard output redirected
+to `/dev/null'; for example, `./configure >/dev/null'.
+
+   To compile the package in a different directory from the one
+containing the source code, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  If
+for some reason `configure' is not in the source code directory that
+you are configuring, then it will report that it can't find the source
+code.  In that case, 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'.  Alternately, you can do so by consistently
+giving a value for the `prefix' variable when you run `make', e.g.,
+     make prefix=/usr/gnu
+     make prefix=/usr/gnu install
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If
+you give `configure' the option `--exec-prefix=PATH' or set the `make'
+variable `exec_prefix' to PATH, the package will use PATH as the
+prefix for installing programs and libraries.  Data files and
+documentation will still use the regular prefix.  Normally, all files
+are installed using the same prefix.
+
+    The program 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' also recognizes the following options:
+
+`--help'
+     Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+     Do not print messages saying which checks are being made.
+
+`--verbose'
+     Print the results of the checks.
+
+`--version'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--with-debug'
+     Enables the built-in memory allocation debugger and forces
+     compilation with -Wall.  This is an option intended to be used by
+     the program developers.
+
+`--without-edit'
+     Configures the program to be compiled without the built-in file
+     editor.   The built-in editor is compiled in by default.
+
+`--with-ext2undel[=PATH]'
+     On systems that use the Extended 2 file system and have the
+     libext2fs.a library available, this compiles into the Midnight
+     Commander the support code for recovering deleted files (the
+     undel virtual file system). 
+     Use =PATH if libext2fs.a is installed in a non-standard place. 
+     The configure will append `lib' and `include' to find the ext2fs 
+     libraries and include files respectively.
+
+`--with-gpm-mouse[=PATH]'
+     Use this flag if your GPM mouse package cannot be detected by the
+     configure. Use =PATH if it is installed in a non-standard place.
+     The configure will append `lib' and `include' to find the libgpm.a
+     and gpm.h files respectively.
+
+`--without-gpm-mouse'
+     Use this flag to disable GPM mouse support (e.g. if you want to
+     use mouse only on X terminals).
+
+`--with-hsc'
+     Compiles support into the ftp virtual file system to support the
+     HSC firewall.
+
+`--with-mmap'
+     Needed when compiling under AIX if you want the fast viewer.
+
+`--with-sco'
+     This option is used to compile on SCO: it turns on SCO-specific
+     code, i.e. disables the terminal resizing mechanism, uses the
+     BSD-like pseudoterminal handling, adds screen-saving capabilities
+     on console, etc.
+
+`--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, you have to specify the `-U' flag when
+     running the program.
+
+`--with-termnet'
+     Enables the network support with the Term package.
+
+`--with-tk'                    [WARNING: X code is not released]
+     This option enables including the Tcl/Tk version.
+
+`--with-tk-includes=DIR'       [WARNING: X code is not released]
+     Lets you specify the place where you have your Tcl/Tk headers installed.
+     It should be a directory containing tcl.h and tk.h.
+
+`--with-tk-libraries=DIR'      [WARNING: X code is not released]
+     Lets you specify the place where you have your Tcl/Tk libraries - 
+     libtcl and libtk.
+
+`--with-xview'                 [WARNING: X code is not released]
+     This option enables including the XView version.
+
+`--with-xview-includes=DIR'    [WARNING: X code is not released]
+     Lets you specify the place where you have your xview headers installed.
+     It should be the directory, which has subdirectories xview and
+     hopefuly xview_private.
+
+`--with-xview-libraries=DIR'   [WARNING: X code is not released]
+     Lets you specify the place where you have your xview libraries - 
+     libolgx and libxview.
+
+`--with-xv-bindir=DIR'         [WARNING: X code is not released]
+     Lets you specify the place where program mxc will be installed.
+     Default is somewhere in your XView binaries directory,
+     $OPENWINHOME/bin.
+
+`--without-dusum'
+     This option disables a feature of the Midnight Commander, which is
+     forking the du command with the -s option when you want to calculate
+     directory sizes.
+
+`--without-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 will not get the
+     transparent tar File system manipulation as well nor the
+     networked Midnight Commander file system.
+
+You may also tell configure which display manager you want to use with
+the Midnight Commander.  The configure script will use SLang as default,
+but you can override this by using any of the following flags (please 
+note that slang is included as part of the distribution),
+
+`--with-slang' (default)
+     This is used to configure the program to use the SLang screen
+     manager.  This is included as part of the Midnight Commander,
+     you don't need it installed on your system. If SLang is installed
+     on your system it will be used if possible. You can force usage of
+     the included SLang with the `--with-included-slang' option.
+     Slang is the only library that will let you resize the Midnight
+     Commander window on an xterm.
+
+     This option will usually try to use the terminfo database if it
+     is available, otherwise it will use the termcap database.  At
+     compile time, you may force the use the terminal database with
+     the `--with-termcap' and `--with-terminfo' options (both options
+     automaticly turn `--with-included-slang' on).
+
+`--with-ncurses[=directory]'
+     Use this flag (either with or without the =directory part), if
+     you want to compile with ncurses instead of the default SLang.
+
+     Use the =directory part if your ncurses is not installed in any of the
+     places configure will check (/usr/include, /usr/include/ncurses,
+     /usr/local/include and /usr/local/include/ncurses).
+     The argument to this flag is the base directory where the ncurses
+     files are located.  The configure will append lib and include to
+     find the libncurses.a and ncurses.h file respectively.  For
+     example, if you have installed ncurses under /gnu/lib and
+     /gnu/include, you specify: --with-ncurses=/gnu
+
+     You will need the ncurses package only if your system does not
+     provide a compatible curses.  If after compiling, the program
+     says that it can't resolve the has_colors function, then you need
+     the ncurses package or you may always go back to the included SLang
+     screen manager.
+
+`--with-vcurses[=directory]'
+     Use this flag to force the Midnight Commander to use a SystemV
+     type ncurses, the optional directory specifies where should
+     the C compiler find the include files.
+
+`--with-sunos-curses'
+     You use this flag on SunOS machines if you want to use SunOS 4.x
+     curses instead of ncurses.  You don't need this flag if you don't
+     have ncurses installed: it's only needed to force the usage of
+     SunOS curses over ncurses.
+
+   `configure' also accepts and ignores some other 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 setting them in the
+environment.  In Bourne-compatible shells, you can do that on the
+command line like this:
+
+     CC='gcc -traditional' LIBS=-lposix ./configure
+
+On systems that have the `env' program, you can do it like this:
+
+     env CC='gcc -traditional' LIBS=-lposix ./configure
+
+   Here are the `make' variables that you might want to override with
+environment variables when running `configure'.
+
+   For these variables, any value given in the environment overrides the
+value that `configure' would choose:
+
+ - Variable: CC
+     C compiler program.  The default is `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 environment is added to
+the value that `configure' chooses:
+
+ - Variable: LIBS
+     Libraries to link with, in the form `-lfoo -lbar...'.
+
+   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.  If the package comes with self-tests and you want to run them,
+type `make check'.  If you're not sure whether there are any, try it;
+if `make' responds with something like
+       make: *** No way to make target `check'.  Stop.
+then the package does not come with self-tests.
+
+4.  Type `make install' to install programs, data files, and
+documentation.
+If your system is Linux, then install installs the Linux console screen
+saver as well.
+
+5.  You can remove the program binaries and object files from the
+source directory by typing `make clean'.  To also remove the
+Makefile(s), the header file containing system-dependent definitions
+(if the package uses one), and `config.status' (all the files that
+`configure' created), type `make realclean'. 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.
+
+6.  The Midnight Commander allows you to be kept on the directory you
+were when you quit the program, this is done with a shell function,
+the man page has more information about this.  If you want to let the
+install program make the change to your /etc/profile or your
+~/.profile or ~/.bashrc, then type: `make mcfninstall'.
+
+   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'.
+
+Compiling under NeXTStep 
+------------------------
+
+These instructions were provided by Gregor Hoffleit
+<flight@mathi.uni-heidelberg.DE>, he recommends configuring the
+program like this:
+
+
+export CC="cc -posix"
+configure --without-subshell --with-termcap
+Edie config.h and make sure you have #undef HAVE_GETWD
+make
+
+
+\f
+- Where to get more information on the Midnight Commander
+---------------------------------------------------------
+
+Janne Kukonlehto set up a WWW page, here is the URL:
+http://mc.blackdown.org/mc/
+
+We also a set of mailing lists for the program:
+
+mc-announce: Announcements of new version of the Midnight Commander.
+mc-digest:   Digest version of the mc list.
+mc-patches:  Patches by mail (also on the ftp site).
+mc:          Discussion on the Midnight Commander file manager.
+mc-devel:    For discussion between the developers of the program.
+
+to subscribe to the mailing lists, send a message to:
+
+majordomo@roxanne.nuclecu.unam.mx
+
+with the following text in the body of the message:
+
+subscribe <list-name> [address]
+
+The address is optional and list-name is one of the above list names
+(mc, mc-announce, mc-patches or mc-digest).
+
+\f
+Notes about the Midnight Commander installation
+------------------------------------------------
+
+The Midnight Commander has been run in the following configurations:
+
+i386-*-linux
+sparc-*-linux
+alpha-*-linux
+mips-dec-ultrix4.3
+mips-dec-{open,net}bsd1.0
+mips-sgi-irix5.2
+mips-sgi-irix5.3
+rs6000-ibm-aix3.2.5
+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,freebsd}
+
+Since the Midnight Commander is configured via the GNU autoconf
+program, it's not difficult to run it in other operating systems.
+
+If you're using AIX, with the cc6000 compiler, you have to specify the
+`--with-mmap' command line option. 
+
+You will need GNU C (or an ANSI C Compiler) and optionally a color
+curses library (ncurses is a good choice).  The Midnight Commander now
+comes with the Slang screen manager, a fast screen manager, so ncurses
+is not required anymore unless you want to use it.  
+
+Many Linux systems ship with ncurses version 1.9.9e, however, we recommend
+ncurses 4.1 or above, since the former version does not support resizing
+of the xterm window.
+
+Since version 0.9 the Midnight Commander comes with 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 the Missing Pieces" in this file).
+
+Once you get the Mouse Server, 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 (you could check the
+file TODO included with this distribution for the current projects).
+
+If you happen to find an undocumented feature that doesn't do what you
+expected, please drop us a note telling us as much as you can about
+the problem you're experiencing (to miguel@roxanne.nuclecu.unam.mx).
+
+\f
+Porting the program
+-------------------
+
+Random notes on porting to other architectures.  
+
+The Midnight Commander uses now by default the Slang library for
+handling the display.  If you can't port Slang (which should be a
+pretty trivial job), you may want to attempt using ncurses (the
+Midnight Commander can use ncurses as well as the display engine). 
+
+If you don't want to install ncurses and your OS is a SystemV Release
+4 variant, maybe the curses supplied with your system will do the
+work.  If you experience display problems, then it means that we are
+dealing with a buggy implementation of curses.  You have two options:
+one, download ncurses and recompile with ncurses or recompile all your
+source code with the symbol BUGGY_CURSES defined.  But you can always
+switch to the default SLang screen manager.
+
+The fast way to do this is to:
+
+make clean; make XINC=-DBUGGY_CURSES
+
+\f
+Obtaining the missing pieces of the Midnight Commander
+------------------------------------------------------
+
+The Midnight Commander will build without requiring you to get any
+other software packages, however, you may be interested in enhancing
+the Midnight Commander environment with some of these:
+
+o 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.
+
+o In the past the Midnight Commander required the NCurses library to
+  build, now it's optional.  You can get Ncurses from
+
+  ftp.gnu.org:/pub/gnu
+  ftp.clark.net:/pub/dickey/ncurses
+
+o The GPM Mouse Server is available at:
+
+  iride.unipv.it:/pub/gpm
+
+o The X Windows System libraries are only used if you are going to
+  build the X11 versions of the program.  Please note that this code
+  is not finished, so it's only useful if you want to look at what we
+  are doing or want to help in one of the two X11 versions.
+  
+o The XView library can be obtained from (currently the newest is
+  XView3.2p1-X11R6.tar.gz):
+
+  ftp.nuclecu.unam.mx:/Midnight/devel/XView.libs
+  ftp.x.org:/contrib/libraries
+  ftp.cvut.cz:/pub/x11/contrib/libraries
+
+  - Linux/ELF shared binaries:
+
+      sunsite.unc.edu:/pub/Linux/libs/X/xview
+      ftp.cvut.cz:/pub/linux/sunsite/libs/X/xview
+
+o The Tcl/Tk libraries can be obtained from:
+
+  ftp.smli.com:/pub/tcl
+  ftp.aud.alcatel.com:/tcl/ftp.smli.com
+  ftp.cvut.cz:/pub/tcl/ftp.smli.com
+
+  - Linux/ELF shared binaries:
+
+      ftp.ods.com:/pub/linux
+      ftp.cvut.cz:/pub/linux/ods
+
+o The Xpm library (used by the XView version) can be obtained from
+  (currently xpm-3.4f.tar.gz):
+
+  koala.inria.fr:/pub/xpm
+  ftp.x.org:/contrib/libraries
+  ftp.cvut.cz:/pub/x11/contrib/libraries
+
+  - Linux/ELF shared binaries:
+
+      ftp.ctd.comsat.com:/pub/linux/ELF
+      ftp.cvut.cz:/pub/linux/comsat
+
+To get the mouse support working on the Linux console:
+
+If you're using Linux version >= 1.1.34, then you will have to choose yes
+to selection when you compile your kernel. If your Linux version is
+older than this one, you may try to apply one of the patches included in
+the gpm package.
+
+And the GNU C Compiler may be obtained from the following sites:
+
+        ASIA: ftp.cs.titech.ac.jp, utsun.s.u-tokyo.ac.jp:/ftpsync/prep,
+              cair.kaist.ac.kr:/pub/gnu
+        AUSTRALIA: archie.au:/gnu (archie.oz or archie.oz.au for ACSnet)
+        AFRICA: ftp.sun.ac.za:/pub/gnu
+        MIDDLE-EAST: ftp.technion.ac.il:/pub/unsupported/gnu
+        EUROPE: ftp.cvut.cz:/pub/gnu, irisa.irisa.fr:/pub/gnu, 
+              ftp.univ-lyon1.fr:pub/gnu, ftp.mcc.ac.uk, 
+              unix.hensa.ac.uk:/pub/uunet/systems/gnu,
+              src.doc.ic.ac.uk:/gnu, ftp.win.tue.nl, ugle.unit.no, 
+              ftp.denet.dk, ftp.informatik.rwth-aachen.de:/pub/gnu, 
+              ftp.informatik.tu-muenchen.de, ftp.eunet.ch, 
+              nic.switch.ch:/mirror/gnu, nic.funet.fi:/pub/gnu, isy.liu.se, 
+              ftp.stacken.kth.se, ftp.luth.se:/pub/unix/gnu, archive.eu.net
+        CANADA: ftp.cs.ubc.ca:/mirror2/gnu
+        USA: wuarchive.wustl.edu:/mirrors/gnu, labrea.stanford.edu,
+             ftp.kpc.com:/pub/mirror/gnu, ftp.cs.widener.edu, uxc.cso.uiuc.edu,
+             col.hp.com:/mirrors/gnu, ftp.cs.columbia.edu:/archives/gnu/prep,
+             gatekeeper.dec.com:/pub/GNU, ftp.uu.net:/systems/gnu
+
+
+Unsupported options to configure:
+---------------------------------
+`--with-bsd-curses'
+     If you don't want to use ncurses and are using an Ultrix box, you
+     can use this switch.  Be aware that ncurses is a better option
+     than the curses included in Ultrix.
+
diff --git a/rosapps/mc/doc/install.fast b/rosapps/mc/doc/install.fast
new file mode 100644 (file)
index 0000000..1bb3453
--- /dev/null
@@ -0,0 +1,70 @@
+-*-text-*-
+
+Read the INSTALL file for the complete instructions. 
+
+   The Midnight Commander by default will use the Slang screen
+manager, if something fails with the Slang screen manager, you may
+compile the program with your system curses (You will need a SysV
+compatible curses, in case you don't have such, read the README file
+for directions on getting the ncurses package, a freely available 
+replacement for SysV curses).
+
+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-slang' (default)
+       The easy way to get the Commander running: Slang is part of
+       the distribution. This is the default screen manager, if you run
+       configure without any --with-*curses parameter.
+   
+`--with-ncurses[=PATH]'
+       Use the flag without =PATH if you want to compile with ncurses
+       (default is in version 3.0 the SLang screen manager included
+       in the distribution).
+       Use this flag with =PATH part, if you want to compile with ncurses
+       and your ncurses is not installed in any of the
+       places configure checks (/usr/include, /usr/include/ncurses,
+       /usr/local/include and /usr/local/include/ncurses). The
+       configure script will append `lib' and `include' to find the
+       libncurses.a and ncurses.h files respectively.
+
+`--with-gpm-mouse[=PATH]'
+       Use this flag if your GPM mouse package cannot be detected by the
+       configure. Use =PATH if it is installed in a non-standard place.
+       The configure will append `lib' and `include' to find the libgpm.a
+       and gpm.h files respectively.
+
+`--with-sco'
+       If you are compiling on a SCO machine.
+
+   You may also want to specify CFLAGS for the compiler, even if it finds
+   itself some defaults by typing e.g.
+
+   `CFLAGS=-O2 ./configure'
+
+2. Type `make' to compile the package.
+
+3. Type `make install' (as root) to install programs, data files, and
+documentation. If you're on a Linux system, this will install the 
+`cons.saver' utility, which allows the Midnight Commander to save and 
+restore the screen contents. If you're making a mc binary distribution for
+other people and want to tar the whole binary later, you may want to specify
+`make install DESTDIR=PATH', which will make PATH the root for installation
+(but in the installed stuff will be still stored only --prefix).
+
+3a. Type `make mcfninstall' to get an interactive program check if you
+want to define an useful alias for the Midnight Commander.
+
+4. Type `mc' and enjoy!
diff --git a/rosapps/mc/doc/mc.1 b/rosapps/mc/doc/mc.1
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/rosapps/mc/doc/mcedit.1 b/rosapps/mc/doc/mcedit.1
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/rosapps/mc/doc/mcserv.8 b/rosapps/mc/doc/mcserv.8
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/rosapps/mc/doc/news b/rosapps/mc/doc/news
new file mode 100644 (file)
index 0000000..136a885
--- /dev/null
@@ -0,0 +1,516 @@
+
+Version 3.5
+
+- New hotlist code.
+       - The bookmark code has been completely revamped and now it supports
+         folders.  New format for the hot list file.
+       - It is possible to copy a selected path name into the input line 
+         (C-Enter).
+
+- Tk enhancements.
+       - New built in GUI designer to help developers modify the look
+         of the program at run time (no penaly for users).
+       - Many dialog boxes now work.
+       - Right button now pops up a context sensitive action menu.
+       - Added many visual enhancements.
+       - The Tk edition is not yet finished though.
+
+- File management.
+       - Now we do background copy and move operations.
+         (you can ftp your files in the background now, for example).
+
+- Built in text editor
+       - This is an easy to use text editor with pull-down menus.
+         The features it presently supports are: Block copy, move,
+         delete, cut, paste; key for key undo; file insertion; macro
+         definition; regular expression search and replace (and our
+         own scanf-printf search and replace); shift-arrow MSW-MAC
+         text highlighting (for the linux console only);
+         insert-overwrite toggle; and an option to pipe text blocks
+         through shell commands like indent.  
+
+         Comes with Emacs keybindings as well.
+
+         mcedit is a link to mc which bring it up in editor mode. 
+
+- FTP File system
+       - Many fixes and enhacements, better support for proxy
+         machines.
+       - Now we support both active and passive opens.
+       - Estimated time of arrival for ftp transfers.
+       - stalled detection.
+       - Much better support for proxies.
+       - ftp URL's now allow a password to be provided.
+
+- ext2fs Undelete File system
+       - Minor enhancements.
+
+- TAR File system
+       - Now we flush the tarfs if the tar file has been modified
+
+- External File systems:
+       - Speeded up RPM file system.
+       - New LHA file system.
+       - New ARC file system.
+       - New DEB file system (for those users of Debian).
+       - New RAR file system.
+       - Fixed problems with different zipfs.
+
+- MC file system:
+       - We get can use a mc file system by using either mc: or mc:// prefixes. 
+
+- Viewer changes:
+       - Now we include a program that preprocesses mail if you view it
+         so, you get colored mails in the viewer.
+       - A simple ruler has been implemented (press Alt-r to enable it).
+
+- New hex editor
+       - Now you can do hex editions in your files with a single keystroke.
+         (invoke it by using the hex-viewer and then clicking on edit).
+
+- Find file command:
+       - Now we can search inside files using a piped grep (particularly
+         interesting to search inside virtual file system: tar files, 
+         tar files on remote ftp sites, or searching information on an 
+         ftp site)
+
+- Widgets:
+       - Input lines now support control-left, control-right movement on the
+         Linux console.
+
+- Extension file:
+       - We now support extra entries in a given rule with the Include=
+         tag.
+       
+- Ports:
+       - Windows NT, Windows 95 by Juan Grigera
+       - OS/2 by Alexander Dong.
+
+
+- Many many many bug fixes and memory leaks have been fixed.
+
+
+Version 3.2
+
+- External File system:
+       - Mtools file system works.
+       - New Cpio file system.
+       - New RPM file system.
+
+- FTP file system:
+       - support for HSC firewall
+
+- Lots of subshell fixes
+
+- Regexp-extension:
+       - Editing of non-local files works now.
+
+- Bunch of bug fixes.
+
+- Panelize now works properly.
+
+- Can work on Nextstep now.
+
+- Windows NT port by Juan Grigera.
+
+- Midnight Commander file system server:
+       - Fixed errno handling in the server.
+       - Fixed time handling in the server.
+       - Better caching.
+       - Works with PAM if supported on the system.
+
+Version 3.1
+
+This has been finished:
+
+- Enhanced ftpfs:
+  - Displays progress bars.
+  - Supports netware and windows nt servers
+  - Better support for symlinked files.
+  - Handles those warez sites file names.
+  - Increase the directory cache timeout.
+  - Cache flushing (C-r)
+  - If you append a /~ to the directory, you will log into your home
+    directory (this is done by default if you use the menus to connect).
+  - More robust.
+- Subshell fixes (it should not hang any longer).
+  - Fixes prompt handling for zsh and tcsh users.
+  - Fixes variable expansion for tcsh (now you may edit files).
+  - Rewrote the sync code between the parend and child, should not hang
+    any longer.
+- Better command completion.
+- Keypad handling enhanced:
+  - Special key treatment for +, -, \ and now may be configure to
+    only take place if you do not have a command typed in.
+  - Now the + and \ bindings when ran on the Linux console work
+    may use the keypad and M-+ and M-\ and leave the + and \ keys
+    free.
+- Better handling of the line drawing chars on OSF/1 and AIX.
+- Enhanced tar/compressed tar file systems.
+- Global kill ring.
+- Added undelete feature for Linux systems: now you may recover deleted files
+  on ext2 file systems with the Undelete file system.
+- Symlink commands (for symlink lovers).
+  see the docs on C-x C-r,  C-x C-l, C-x C-s keystrokes.
+- New macros:
+  %b and %B return the basename of the selected filename
+  %var{ENV-VAR} expands to the contents of ENV-VAR variable.
+- MC may be invoked as a viewer (mc -f flag).
+- Added Unicode support on the Linux console (run with mc -N)
+- Tons of bug fixes, the code is cleaner and hopefully 
+- Allow a vfs pathname to be passed as a startup directory.
+
+This is a list of people that put their effort into making the 3.1
+release:
+
+Adam Tla/lka, Antonio Palama, Carl Thompson, Ching Hui, Dugan Porter, Gerd
+Knorr, Ilya Rybkin, Jakub Jelinek, Janne Kikonlehto, Juan Grigera, Juan Jose
+Ciarlante, John Davis, Marcelo Fabian Roccasalva, Perry Francis Nguyen,
+Sergey Ya Korshunoff Steven Hirsch, Thanh Ma and Torben Fjerdingstad.
+
+Version 3.0
+
+This has been finished:
+
+- Virtual File System: You now can browse tar, compressed tar and 
+  file systems over the network as if they were local subdirectories;
+- Slang support, you don't need ncurses anymore (but you can still compile
+  with ncurses, if you want).
+- New mc.ext format, for details see the sample mc.ext file provided.
+- Append option if you try to copy/move a file onto already existing one.
+- Internal cd command uses CDPATH variable if set (like in BASH).
+- Find file command is much faster.
+- External panelize command - finding files using unlimited number of
+  criteria - actually spawns an external command and it can be find, awk,
+  grep -l or anything else.
+- Learn keys makes setting up of mc on terminals with broken
+  terminfo/termcap databases easier. It just asks you to press keys which
+  are not working.
+- Advanced chown command.
+- C-PgUp and C-PgDn takes you to the previous and currently selected
+  directory respectively on the Linux console.
+- You can choose between 7 data bits, iso-latin-1 (0-127+160-255) or
+  other (0-255).
+- Confirmation for overwriting, deleting and exiting added.
+- Viewer has growing buffers.
+- Filename, username, hostname and variable completion (M-Tab) on all
+  input lines plus command completion on appropriate places of command
+  line.
+- Following of symlinks at changing directory.
+- Viewer now supports bold faces and underlines, and it fits the 
+  information on the screen better.  Now you can also specify the starting
+  mode for the viewer depending on the contents of the viewed file.
+- Mask rename and copy.
+- Colors now let you specify the intensity of the colors you want.
+
+This is being worked on:
+- Virtual File System: FTP file system.
+- Tcl/Tk and XView versions of the program (preliminary versions are
+  up and running).
+
+
+Version 2.0
+
+Now users are able to define their own display 
+
+- User defined display formats.
+
+  Now you can configure the file display to suit your needs.
+  For example, you can say which information you want to see displayed
+  instead of our defaults.
+
+- User definable program layout.
+
+  Panels could be shown vertically or horizontally;
+  panels could be different sizes, you can hide or show most
+  program windows (command line, keybar or menubar).
+
+- Output window.
+
+  Now, it's possible to see part of the last program output on the Linux
+  console without having to switch screens via an option in the layout
+  menu.
+
+- New View modes:
+
+     Quick view: as you browse your files, each one is displayed on
+                 the other panel on the idle time.
+
+     Tree view:  let's you browse your directories by traveling a tree.  
+                We have two traveling modes available.  And the tree does
+                not take your precious time: it's build on the fly, as you
+                 browse your disk (you can always loose your time if you
+                want to :-).
+
+     Info view:  Gives you information on the currently select file and
+                 the current file system as you move.
+
+     User view:  Let's you define a directory listing and the format you
+                 want to use.
+
+- New subshell support (concurrent shell execution)
+
+  The Midnight Commander will now spawn one copy of the shell, so you
+  get better performance and you can use shell functions, define variables
+  and execute complete shell commands.  Supported shells: bash, zsh and
+  tcsh.  If your shell is not supported, then the old mode is still
+  available.
+
+- Dialog box manager
+
+  Almost all the new configuration options are configured with this
+  new dialog manager, easy to use if you are familiar with dialog boxes
+  in DOS and Windows. 
+
+  Available widgets: check buttons, buttons, radio buttons, 
+  input lines and list boxes (So you can take our code and use it on
+  your applications).
+
+- New option configuration.
+
+  Now the program options are configured with a dialog box.
+
+- Chmod and Chown commands:
+
+  For changing permissions as well as ownership of files and
+  directories, uses our new dialog manager.  
+
+- Color customization support
+
+  Now you can change the default color of the program with any of
+  these:
+  environment variable, Colors section in the init file (colors per 
+  terminal type) and command line.
+
+- User menu and extension enhancements:
+
+  Execution understand the %t macro (tagged files). 
+
+  User menu also has a new macro to let the user specify options.
+
+  You can hide and show entries in the user menus by using conditions.
+
+  Auto detect best match depending on a regexp.
+
+- Viewer: 
+     Goto line command,
+     horizontal scrolling,
+     on the fly uncompression (and we don't eat unneeded cycles of CPU),
+     allow non gunzip operation.
+
+- Internal move command:
+
+  Now, we don't rely anymore on system commands in /bin, so the
+  program is more robust and is much faster.  Bunchs of code come
+  from the GNU fileutils.
+
+- The Tree view and normal views allows wrapped incremental searchs of
+  file names.
+
+- Mask rename:
+
+  Now it's possible to do things like rename *.pas in *.bak
+
+- Compare directories command
+
+- Allow panels to be in Long mode without forcing the user to a single panel.
+
+  (You can even have two long panels).
+
+- F10, C-g cancels as well as ESC ESC.
+
+- Improved help system.
+  
+  We updated and spelled the help system and added a lots of links.
+  The Web page is constructed with the same tools.
+
+- Allows tagging of directories:
+
+  Now you can copy, rename, move and delete complete directories.  You
+  are not limited anymore to files.  
+
+- View output (screen save/restore) on Linux console.
+
+  On old Linux systems, only b&w is supported, on newer Linux systems
+  (1.1.67 and newer), we also support color screen save/restore and
+  cursos positions.
+
+- 8 bit clean support.
+
+- Visual feedback while i-searching files.
+
+- Much more intuitive, you have to use it.
+
+- It's better than aspirin.
+
+- New memory allocation debugger.
+
+  During testing time, we used a powerfull memory allocation debugger,
+  so the program will not eat all your memory, and will make a good use of
+  your memory.  
+
+- Now it also runs on hppa-hp-hpux9, hppa-hp-hpux7, m68k-apple-aux and
+  sparc-sun-netbsd1.0.  The best platform to run it is Linux, of course,
+  since that's where most of us develop it.
+
+- Inode sort option.
+
+- Nice progress status indicator.
+
+  We have two of them: a moving dash indicator and a progress bar
+  indicator for file operations.
+
+Version 0.15
+
+- Uses GNU autoconf.
+   Currently, it has been ported to this configurations:
+   i386-*-linux1.0
+   i386-*-linux1.1
+   mips-sgi-irix5.2
+   mips-dec-ultrix4.3
+   rs6000-ibm-aix3.2.5
+   sparc-sun-sunos4.1
+   sparc-sun-solaris2.3
+
+- Improvements to the internal file viewer:
+   Wrap/Unwrap mode.
+   Hex mode.
+   Hex searches.
+   Now you can view compressed files (gzip, compress, zip, pack and lzh).
+   Performance enhancements, now it's much faster.
+   Works on systems without mmap.
+
+- Mouse Support now also works on xterms.
+   If you run in the Linux console, you will still need the gpm mouse server
+   to use the mouse support, but if you use xterms, then you're lucky 
+   and can use the mouse support when using xterms.
+
+- Help system and man page.
+   Both were updated and has many more hypertext links inside, the
+   help system can also be used with a mouse.
+
+- If running on xterms, now you can see the output of the last program
+  you ran by using the C-o key combination.
+
+- Switch panels command (C-u)
+- With filter command per panel.
+- With auto mounting/umounting on chdir feature.
+- cd now expands tildes (~, ~user).
+- Much more portable.
+- Many bugs were fixed.
+
+Version 0.14
+
+- Now can handle directories with an unlimited number of files.
+- New link and symlink commands (C-x l, C-x s).
+- New insert tagged files or selection command (C-x t).
+
+Version 0.13
+
+- Behave more like the Norton Commander.
+- Added menu file edit.
+- If there is no permission to load a directory, now it loads a dummy
+  directory.
+- When a panel is re-sorted, keep the selected file selected.
+- forward_word and backward_word command on the input line now skip
+  over letters and numbers.
+- Fixed backward scrolling in the internal viewer.
+- The internal viewer now computes the percentage in a more natural
+  way.
+- Added handling of the Home and End keys to the internal viewer
+- Bug fixes.
+
+Version 0.12
+
+- Preliminary support for System V compilation.
+- Bug fix: didn't call closedir in all cases.
+- bug fixes.
+
+Version 0.11
+
+- Support cd -.
+- Corrected Makefile.
+
+Version 0.10 
+
+- Added new Alt-G, Alt-H, Alt-J to select the top file, middle file
+  and bottom file in the current panel.
+- Now it's allowed to select option in query boxes by the first initial
+- Fixed mouse repeat rate.
+- Fixed a bug that prevent copying individual files to another file.
+- Some minor bug fixes.
+
+Version 0.9
+
+- Mouse Support.
+- Internal Copy command (it no longer uses cp).
+- Verbose Copying of files.
+- Confirmation on Overwrite and on Delete.
+- Support reverse sorting.
+- Many visual enhancements.
+- Per panel options are saved and restored.
+- New truncation of names in the panels.
+- History in Input Lines (M-p and M-n).
+- Input line enhancements.
+- Dialog boxes are nicer than before.
+- Cache in gid and uid translators.
+- More keybindings for the Input lines.
+- Better kill management in Input Lines.
+- Bug fixes.
+
+Version 0.8
+
+- The online help now comes with the complete man page.
+- Input lines now support M-b and M-f for movement by word.
+- Unlimited input lines (command line).
+- Filename searches now must be started with C-s or M-s.
+- Many bug fixes.
+
+Version 0.7
+
+- The stat() reloading optimization is now a configuration option.
+- Many bug fixes went to the find file command.
+- New history in the hypertext viewer. 
+- ESC-Tab will copy the name of the other-panel selected file to the
+  input line.
+- Now it's possible to display files and directories mixed together or
+  separated (like the Norton Commander).
+- Many bug fixes, see the ChangeLog for details.
+
+Version 0.6 
+
+- Extension dependent execution implemented (now you can execute
+  things like tar tzvf over compressed tar files, just a tap in the
+  Enter key).
+- Added simple expansion of useful variables in the user menu.
+- Avoid unnecessary reloading of subdirectories using stat (suggested
+  by Torben Fjerdingstad <tfj@olivia.ping.dk>).
+- Added options to disable colors and display version number.
+- Allow start up directory specification (ex: mc /usr/local/bin /tmp).
+- Fixed bug that operated on the selection instead of the tagged file
+(when only one file was tagged). 
+- Some cosmetic changes.
+- Bug fixes.
+
+Version 0.5
+
+- Fixed bug in the help browser that crashed the program.
+- New internal viewer.
+- New long directory listing format.
+- some bug fixes.
+
+Version 0.4 
+
+- User Menus (F2 key).
+- Quick search of files in a panel (Alt-filename takes you to that file).
+- Char quoting (C-q).
+- exec() enhancements.
+- now you can suspend the program (C-z).
+- The find file command now seems to be very stable.
+- misc bug fixes.
+
+Version 0.3
+
+- Setup loading/saving.
+- Support for any size screen.
+- Many, many bug fixes.
diff --git a/rosapps/mc/doc/readme b/rosapps/mc/doc/readme
new file mode 100644 (file)
index 0000000..6d11894
--- /dev/null
@@ -0,0 +1,191 @@
+-*-Text-*-
+
+Contents:
+---------
+  Intro text
+  Midnight Commander editions
+  Where to get more information
+  The Midnight Commander
+  Mini-docs
+  Obtaining the Midnight Commander
+  Reporting problems.
+
+This is version 4 of the Midnight Commander, a free Norton Commander
+Clone with many useful features. The Midnight Commander comes with
+mouse support on xterms and optionally on the Linux console.
+
+The Midnight Commander is a directory browsing tool which bears a
+certain remote resemblance to John Socha's Norton Commander for DOS.
+It is feature packed:
+
+       o Built in Virtual File System: manipulate remote files
+       systems through the ftp protocol or Midnight Commander's own
+       mcfs protocol.  Browse tar, compressed tar files, rpm, zip,
+       cpio, lha and rar files with a single click.  
+
+       o All of the Midnight Commander operations work with the virtual
+       file system, enabling you to do complex tasks.
+
+       o Mouse support on the Linux console and under X11's xterms. 
+
+       o Learn Keys: The Midnight Commander may be configured at run
+       time to support any kind of input keys for a given terminal,
+       making its operation even on the most wierd terminals a
+       breeze. 
+
+       o Text and hex editors are available for you to use.
+
+       o Hotlist allows you to keep a list of common visited
+       locations (including ftp sites).
+
+       o Command completion: By pressing Alt-Tab in any place where a
+       filename or an executable are expected, the Midnight Commander
+       will complete for you the name.  If you quickly press Alt-Tab
+       twice you can get a listbox with the possible completions
+       available. 
+
+       o Subshell support: Run your commands by a real shell
+       interpreter.  The Midnight Commander interacts with bash, tcsh
+       and zsh to provide you with all of the facilities available in
+       your shell.
+
+       o Find file command can now search inside the contents of
+       files.
+
+       o Background operations allows you to copy or move files from
+       any virtual file system while you do other tasks (ie, you can
+       do background ftp copies).
+
+       o Proxy support with our ftpfs.
+
+       o Linux file recovery: If you are using Linux system, you can
+       recover deleted files from an ext2fs partition with the
+       undelete file system.  This is a low level file recovery
+       function that will recover files deleted by any program in
+       Linux. 
+
+       Please note that the undelete file system can only recover
+       12 file system blocks if the file was deleted with a kernel 
+       in the 2.0.x series.  The 2.1.x series have fixed this and you
+       can recover all of the file contents there.
+
+       o External panelization: You can run any arbitrary external
+       command and the Midnight Commander will display the output
+       generated as a file listing that can be manipulated as a
+       regular directory. 
+
+       o Emacs like key bindings in all of our widgets.
+
+       o Powerfull context dependant actions are available. 
+
+       o Powerfull built-in file viewer:  The file viewer, together
+       with the context dependant actions is used to format man pages
+       on the fly, coloring mail messages and more.
+
+
+Midnight Commander editions:
+----------------------------
+
+The Midnight Commander may be compiled into three different editions:
+the text mode edition, the Tk edition and the XView edition.  Please
+note that currently the only supported edition is the text mode
+edition.  The Tk and XView editions are included with the tar file but
+are not finished and thus not supported.
+
+
+Where to get more information:
+------------------------------
+
+There is a mailing list for discussion on enhancing the program, future
+directions and announcements; if you want to subscribe, send mail to:
+
+majordomo@roxanne.nuclecu.unam.mx
+
+There is a WWW page for the Midnight Commander with the URL:
+<http://mc.blackdown.org/mc/>.
+
+
+The Midnight Commander:
+-----------------------
+
+The Midnight Commander is released under the GNU General Public License
+version 2.0 or any later version.  A copy of the file is included with
+this distribution package.
+
+If you have comments, you can send them to me:
+
+miguel@roxanne.nuclecu.unam.mx
+
+or if it would benefit more people, to the mailing list:
+
+mc@roxanne.nuclecu.unam.mx
+
+Help develop and enhance free software.
+
+
+Mini-documentation:
+-------------------
+
+o 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.
+
+o Tab changes the current panel.
+
+o All input lines have emacs-like key-bindings (command history is
+  accessed through the M-p and M-n keys).
+
+o The panels accept C-n, C-p for browsing the panel (like in emacs).
+
+o M-Enter copies the currently selected file name to the input line.
+
+o M-Tab completes the current word (or tries to).
+
+o 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 mcfs file system.
+
+o Please read the manual page.
+
+o Read the file src/TODO for the current projects.
+
+You can access the whole documentation online with the F1 key,
+although it's not as nice as the groff printed manual page :-)
+
+
+Where you may obtain the Midnight Commander
+-------------------------------------------
+
+The software should be available by anonymous ftp at sunsite.unc.edu
+in the directory /pub/Linux/utils/file and at ftp.nuclecu.unam.mx
+in the directory /linux/local.
+
+The last alpha versions are available at ftp.nuclecu.unam.mx in the
+directory /linux/local/devel.
+
+European mirrors of both version 3.1 and alpha versions are available
+at sunsite.mff.cuni.cz in the directory /GNU/mc and at ftp.teuto.de
+in the directory /lmb/mc.
+
+
+Reporting problems
+------------------
+
+Please, send a detailed description of your problem to the
+mc-bugs@roxanne.nuclecu.unam.mx address.
+
+Include the version of the program, the operating system that you are
+using, the compiler and compiler flags used to compile the program (if
+you know them), what kind of distribution you are using (if a
+GNU/Linux system).
+
+If the program crashed and produces a core dump, please provide a
+stack trace of the program.
+
+You can do this by running dbx or gdb like this:
+
+gdb mc core
+(gdb) where
+
+
+
diff --git a/rosapps/mc/doc/readme.nt b/rosapps/mc/doc/readme.nt
new file mode 100644 (file)
index 0000000..8f13dd6
--- /dev/null
@@ -0,0 +1,126 @@
+
+Midnight Commander for Windows NT and Windows '95
+-------------------------------------------------
+
+0. Hello
+1. Compiling
+2. Changes made
+
+0. Hello
+--------
+Hello, this is the Midnight Commander port to Win32. It has many bugs, but is
+quite stable now. Maybe you can help as an beta tester or as a programmer. In
+either case you would like subscribe to mc-devel list
+(see readme files in main doc on how to do this) and contact us.
+
+1. Compiling
+------------
+
+1.1. Compiler
+----------------
+Microsoft Visual C++ for Windows NT (all versions, including 4.x) are supported.
+In nt/makefile you can find an external makefile, and in nt/makefile.vc1.nt, vc4.nt
+projects for the visual IDE. Two makefiles are add since the version 3.5.39. They
+are produced from MS VC 4.x and are named as ntaxp.mak (for Windows NT AXP) 
+and ntint.mak (for Windows NT Intel). If you want to use them, you will have to
+change the path coded in these two files.
+
+Other compilers such as Watcom, or Borland tools should be quite
+straightforward, but has not been tested.
+
+Under Cygnus tools, apparently everything works just fine.
+
+1.2. General issues
+--------------------
+Preprocessor
+        Define:
+                LIBDIR
+                _OS_NT          -  OS flag
+                OS2_NT         -  Flag for OS/2 and NT
+                HAVE_CONFIG_H   - config.h flag
+
+        Includes:
+                So as to avoid chaos in include files, I decided to create some
+        fake includes for UNIX counterparts. The empty files you need to create are:
+                pwd.h           grp.h
+                sys/param.h     sys/time.h
+
+1.3 Windowing Library
+--------------------------------
+Currently only support for S-lang windowing library is given. I know no curses
+public library ported to Win32 consoles, and I think it is useless to port
+it now. You may want to download the complete distribution it from
+ftp://space.mit.edu/pub/davis.
+
+
+2. Changes made
+---------------
+
+2.1. Changes to main code
+-------------------------
+They are enclosed in #ifdef _OS_NT or OS2_NT blocks.
+
+Wrote something similar to statfs in UTIL.C
+Wrote truncate.
+Changed (almost) all references to "/" path slash with PATH_CHAR and strPATH_CHAR.
+Changed name of CONTROL_FILE.
+Changed name of shell and call to shell.
+
+In some cases we supressed code. This is temporal (so that mc can compile). In
+the future we will provide fake or true interfaces for these features.
+   - Links: creation and information on links are not supported in NT. We
+            should provide a fake interface for the local filesystem and
+            a true one for networked.
+   - GID/UID queries (get_user, owner, preserve UID/GID on copy, ...).
+   - TERMinals: all the code directly done with terminals must be supressed.
+   - Signals: deleted. Should support the native ones.
+   - pipes: had some trouble in ext.c and with error_pipes but soon will be fixed.
+   - Chown command: Not supported yet.
+
+2.2. Files rewritten
+--------------------
+There are 3 files with so many changes that they have been moved to independent
+archives (or OS dependent).
+  - Chmod.nt.c: this command will query and change attributes (hidden, system,
+                archive,...). Maybe we should write a real chmod (and also a
+                chown). It is not finished, but works almost fine. Look that
+                the stat st_mode member is filled with attributes, not modes.
+  - Cons.handler.nt.c: Supports same API as linux cons.handler.c. It allocates
+                a new console buffer and switches between the two when doing a
+                shell. The new allocated one is the used by Midnight commander.
+                (look that to make this we should also redirect standard handles)
+  - Key.nt.c:   a static table maps Virtual Key codes to Curses-like Key codes.
+                Also mouse events are supported.
+                still preliminar.
+  - utilnt.c:   Contains utilunix.c functions, with Win32 implementation
+
+2.3. New files
+--------------
+  - drive.nt.c: A Change Drive command has been implemented. Two lines
+                in main.c were included (in the left/right panel menus).
+                The funcs drive_cmd_a/b are implemented in this new file.
+                It will build a dialog with available drives as buttons.
+                bug: too many drives are not supported (think just 7). have
+                     to rewrite to support more than one line.
+
+  - util.debug.c: developers-only utilities to trace Win32 API call error codes
+  - util.WinNT.c: Windows NT specific functions:
+                     getuid(): Will check your priviledges and return 0 (root)
+                               if you have Administrator priviledges.
+  - util.Win32.c: Windows NT & 95 utilities: (specific to Win32, no UNIX counterpart)
+                     getEXEtype(): check if executable is CUI or GUI.
+
+2.4. Changes made from me (Alexander Dong, ado@software-ag.de)
+--------------------
+
+I have hacked some codes for Windows NT AXP and NT Intel. 
+Drive.nt.c was rewritten for a beautiful Drive_Change dialog window. 
+
+All main source changed from me are marked with the comment /* .ado */.
+
+I have also included two own Makefiles:
+        ntaxp.mak (for Windows NT Alpha) and
+        ntint.mak (for Windows 95/NT Intel).
+You will have to change the path in these files before use them. They
+are both for Microsoft Visual C++ 4.x.
+
diff --git a/rosapps/mc/edit/Makefile b/rosapps/mc/edit/Makefile
new file mode 100644 (file)
index 0000000..4dbfbcd
--- /dev/null
@@ -0,0 +1,86 @@
+# Generated automatically from Makefile.in by configure.
+srcdir = .
+
+rootdir = $(srcdir)/..
+include ../Make.common
+
+CFLAGS = $(XCFLAGS)
+CPPFLAGS = $(XCPPFLAGS)
+LDFLAGS = $(XLDFLAGS) 
+DEFS = $(XDEFS)
+LIBS =  $(XLIBS)   $(XLIB)
+INSTALL = /usr/bin/install -c
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_DATA = ${INSTALL} -m 644
+AR = /usr/bin/ar
+
+#
+# Distribution variables
+#
+
+EDITSRC = edit.c editcmd.c editwidget.c edit_key_translator.c editdraw.c \
+         edit.h editmenu.c editcmddef.h wordproc.c syntax.c editoptions.c
+
+EDITOBJS = edit.o editcmd.o editwidget.o editdraw.o editmenu.o wordproc.o \
+         syntax.o editoptions.o
+
+DIST =         Makefile.in README.edit $(EDITSRC)
+
+all: libedit.a
+
+.c.o:
+       $(CC) -c $(CPPFLAGS) $(DEFS) $(CFLAGS) -DMIDNIGHT $<
+
+check:
+       @echo no tests are supplied.
+
+libedit.a: $(EDITOBJS)
+       $(RMF) $@
+       $(AR) cr $@ $(EDITOBJS)
+       -$(RANLIB) $@
+
+mcedit:
+       -$(RMF) $(DESTDIR)$(bindir)/$(binprefix)mcedit
+       $(LN_S) mc $(DESTDIR)$(bindir)/$(binprefix)mcedit
+
+showlibdep:
+       @echo 'OBJS="$(EDITOBJS)"'
+
+cross:
+       $(MAKE) CC=gcc-linux CPP="gcc-linux -E" \
+       CPPFLAGS="$(CPPFLAGS) -I/usr/local/lib/gcc-lib/i386-linux-linux/include/ncurses "
+
+TAGS: $(EDITSRC)
+       etags $(EDITSRC)
+
+clean:
+       $(RMF) *.o core a.out libedit.a
+
+realclean: clean
+       $(RMF) .depend
+       $(RMF) TAGS
+       $(RMF) *~
+
+distclean:
+       -$(RMF) $(srcdir)/*~ $(srcdir)/*.o $(srcdir)/a.out
+       -$(RMF) $(srcdir)/core $(srcdir)/libedit.a
+       -if test $(srcdir) = .; then $(MAKE) realclean; fi
+       -$(RMF) $(srcdir)/Makefile
+
+install: mcedit
+
+uninstall:
+       -$(RMF) $(DESTDIR)$(bindir)/$(binprefix)mcedit
+
+distcopy:
+       $(CP) $(DIST) ../../mc-$(VERSION)/edit
+
+depend dep: mcdep
+
+fastdeploc:
+
+# ***Dependencies***Do not edit***
+ifeq (.depend,$(wildcard .depend)) 
+include .depend 
+endif
+# ***End of dependencies***
diff --git a/rosapps/mc/edit/edit.c b/rosapps/mc/edit/edit.c
new file mode 100644 (file)
index 0000000..f5dbb4e
--- /dev/null
@@ -0,0 +1,2279 @@
+/* editor low level data handling and cursor fundamentals.
+
+   Copyright (C) 1996, 1997 the Free Software Foundation
+   
+   Authors: 1996, 1997 Paul Sheer
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#define _EDIT_C THIS_IS
+
+#include <config.h>
+#if defined(OS2_NT)
+#    include <io.h>
+#    include <fcntl.h>
+#    define CR_LF_TRANSLATION
+#endif
+#include "edit.h"
+
+#ifdef SCO_FLAVOR
+#      include <sys/timeb.h>
+#endif /* SCO_FLAVOR */
+#include <time.h>      /* for ctime() */
+
+/*
+ *
+ * here's a quick sketch of the layout: (don't run this through indent.)
+ * 
+ * (b1 is buffers1 and b2 is buffers2)
+ * 
+ *                                       |
+ * \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]   | ...
+ *      |->        |->        |->        |->        |->        |->        |
+ *                                       |
+ *           _<------------------------->|<----------------->_
+ *                   WEdit->curs2        |   WEdit->curs1
+ *           ^                           |                   ^
+ *           |                          ^|^                  |
+ *         cursor                       |||                cursor
+ *                                      |||
+ *                              file end|||file beginning
+ *                                       |
+ *                                       |
+ * 
+ *           _
+ * This_is_some_file
+ * fin.
+ *
+ *
+ */
+
+/*
+   returns a byte from any location in the file.
+   Returns '\n' if out of bounds.
+ */
+int edit_get_byte (WEdit * edit, long byte_index)
+{
+    unsigned long p;
+    if (byte_index >= (edit->curs1 + edit->curs2) || byte_index < 0)
+       return '\n';
+
+    if (byte_index >= edit->curs1) {
+       p = edit->curs1 + edit->curs2 - byte_index - 1;
+       return edit->buffers2[p >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (p & M_EDIT_BUF_SIZE) - 1];
+    } else {
+       return edit->buffers1[byte_index >> S_EDIT_BUF_SIZE][byte_index & M_EDIT_BUF_SIZE];
+    }
+}
+
+char *edit_get_buffer_as_text (WEdit * e)
+{
+    int l, i;
+    char *t;
+    l = e->curs1 + e->curs2;
+    t = CMalloc (l + 1);
+    for (i = 0; i < l; i++)
+       t[i] = edit_get_byte (e, i);
+    t[l] = 0;
+    return t;
+}
+
+/* Initialisation routines */
+
+/* returns 1 on error */
+/* loads file OR text into buffers. Only one must be none-NULL. */
+/* cursor set to start of file */
+int init_dynamic_edit_buffers (WEdit * edit, const char *filename, const char *text)
+{
+#if defined CR_LF_TRANSLATION
+    /* Variables needed for safe handling of Translation from Microsoft CR/LF EOL to
+       Unix Style LF EOL - Franco */
+    long bytes_wanted,bytes_read,bytes_missing;
+    char *p;
+#endif
+    long buf;
+    int j, file = 0, buf2;
+
+    for (j = 0; j <= MAXBUFF; j++) {
+       edit->buffers1[j] = NULL;
+       edit->buffers2[j] = NULL;
+    }
+
+    if (filename)
+       if ((file = open ((char *) filename, O_RDONLY | MY_O_TEXT)) == -1) {
+/* The file-name is printed after the ':' */
+           edit_error_dialog (_(" Error "), get_sys_error (catstrs (_(" Fail trying to open file for reading: "), filename, " ", 0)));
+           return 1;
+       }
+    edit->curs2 = edit->last_byte;
+
+    buf2 = edit->curs2 >> S_EDIT_BUF_SIZE;
+
+    edit->buffers2[buf2] = CMalloc (EDIT_BUF_SIZE);
+
+/*
+_read returns the number of bytes read, 
+which may be less than count if there are fewer than count bytes left in the file 
+or if the file was opened in text mode, 
+in which case each carriage return\96linefeed (CR-LF) pair is replaced 
+with a single linefeed character. Only the single linefeed character is counted 
+in the return value. The replacement does not affect the file pointer.
+
+_eof returns 1 if the current position is end of file, or 0 if it is not. 
+A return value of -1 indicates an error; in this case, errno is set to EBADF, 
+which indicates an invalid file handle.
+*/
+    if (filename){
+
+#if defined CR_LF_TRANSLATION
+       bytes_wanted=edit->curs2 & M_EDIT_BUF_SIZE;
+       p = (char *) edit->buffers2[buf2] + EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE);
+       bytes_read = read (file, p , edit->curs2 & M_EDIT_BUF_SIZE);
+       bytes_missing = bytes_wanted - bytes_read ;
+       while(bytes_missing ){
+               p += bytes_read;
+               bytes_read = read(file,p,bytes_missing);
+               if(bytes_read <= 0) break;
+               bytes_missing -= bytes_read ;
+       }
+#else
+       read (file, (char *) edit->buffers2[buf2] + EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE), edit->curs2 & M_EDIT_BUF_SIZE);
+#endif
+    }
+    else {
+       memcpy (edit->buffers2[buf2] + EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE), text, edit->curs2 & M_EDIT_BUF_SIZE);
+       text += edit->curs2 & M_EDIT_BUF_SIZE;
+    }
+
+    for (buf = buf2 - 1; buf >= 0; buf--) {
+       edit->buffers2[buf] = CMalloc (EDIT_BUF_SIZE);
+       if (filename){
+#if defined CR_LF_TRANSLATION
+               bytes_wanted = EDIT_BUF_SIZE;
+               p = (char *) edit->buffers2[buf];
+               bytes_read = read (file, p, EDIT_BUF_SIZE);
+               bytes_missing = bytes_wanted - bytes_read ;
+               while(bytes_missing ){
+                       p += bytes_read;
+                       bytes_read = read(file,p,bytes_missing);
+                       if(bytes_read <= 0) break;
+                       bytes_missing -= bytes_read ;
+               }
+#else
+           read (file, (char *) edit->buffers2[buf], EDIT_BUF_SIZE);
+#endif
+       }
+       else {
+           memcpy (edit->buffers2[buf], text, EDIT_BUF_SIZE);
+           text += EDIT_BUF_SIZE;
+       }
+    }
+
+    edit->curs1 = 0;
+    if (filename)
+       close (file);
+
+    return 0;
+}
+
+/* returns 1 on error */
+int edit_load_file (WEdit * edit, const char *filename, const char *text, unsigned long text_size)
+{
+    struct stat s;
+    int file;
+
+/* VARS for Lastbyte calculation in TEXT mode FRANCO */
+#if defined CR_LF_TRANSLATION
+ char tmp_buf[1024];
+ long real_size,bytes_read;
+#endif
+
+    if (text) {
+       edit->last_byte = text_size;
+       filename = NULL;
+    } else {
+#if defined(MIDNIGHT) || defined(GTK)
+    if ((file = open ((char *) filename, O_RDONLY | MY_O_TEXT )) < 0)
+       {
+               close(creat((char *) filename, 0666));
+               if ((file = open ((char *) filename, O_RDONLY | MY_O_TEXT )) < 0) {
+                       edit_error_dialog (_(" Error "), get_sys_error (catstrs (" Fail trying to open the file, ", filename, ", for reading ", 0)));
+                       return 1;
+               }
+               edit->delete_file = 1;
+       }
+#else
+       if ((file = open ((char *) filename, O_RDONLY)) < 0) {
+           edit_error_dialog (_(" Error "), get_sys_error (catstrs (_(" Fail trying to open file for reading: "), filename, " ", 0)));
+           return 1;
+       }
+#endif
+       if (stat ((char *) filename, &s) < 0) {
+           close (file);
+/* The file-name is printed after the ':' */
+           edit_error_dialog (_(" Error "), get_sys_error (catstrs (_(" Cannot get size/permissions info on file: "), filename, " ", 0)));
+           return 1;
+       }
+       if (S_ISDIR (s.st_mode) || S_ISSOCK (s.st_mode)
+           || S_ISFIFO (s.st_mode)) {
+           close (file);
+/* The file-name is printed after the ':' */
+           edit_error_dialog (_(" Error "), catstrs (_(" Not an ordinary file: "), filename, " ", 0));
+           return 1;
+       }
+       if (s.st_size >= SIZE_LIMIT) {
+           close (file);
+/* The file-name is printed after the ':' */
+           edit_error_dialog (_(" Error "), catstrs (_(" File is too large: "), \
+               filename, _(" \n Increase edit.h:MAXBUF and recompile the editor. "), 0));
+           return 1;
+       }
+
+/* Lastbyte calculation in TEXT mode FRANCO */
+#if defined CR_LF_TRANSLATION
+       if(file && (!text)){
+               real_size=0;
+               tmp_buf[1024]=0;
+               while((bytes_read = read(file,tmp_buf,1024)) > 0){
+                       real_size += bytes_read;
+               }
+               s.st_size = real_size;
+       }
+
+#endif
+
+       close (file);
+       edit->last_byte = s.st_size;
+       edit->stat = s;
+    }
+
+    return init_dynamic_edit_buffers (edit, filename, text);
+}
+
+#ifdef MIDNIGHT
+#define space_width 1
+#else
+int space_width;
+extern int option_long_whitespace;
+extern unsigned char per_char[256];
+
+void edit_set_space_width (int s)
+{
+    space_width = s;
+}
+
+#endif
+
+/* fills in the edit struct. returns 0 on fail. Pass edit as NULL for this function to do an malloc for you */
+WEdit *edit_init (WEdit * edit, int lines, int columns, const char *filename, const char *text, const char *dir, unsigned long text_size)
+{
+    char *f;
+#ifndef MIDNIGHT
+    if (option_long_whitespace)
+       edit_set_space_width (per_char[' '] * 2);
+    else
+       edit_set_space_width (per_char[' ']);
+#endif
+    if (!edit)
+       edit = malloc (sizeof (WEdit));
+    if (!edit) {
+       edit_error_dialog (_(" Error "), _(" Error allocating memory "));
+       return 0;
+    }
+    memset (&(edit->from_here), 0, (unsigned long) &(edit->to_here) - (unsigned long) &(edit->from_here));
+#ifndef MIDNIGHT
+    edit->max_column = columns * FONT_MEAN_WIDTH;
+#endif
+    edit->num_widget_lines = lines;
+    edit->num_widget_columns = columns;
+    edit->stat.st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+    edit->stat.st_uid = getuid ();
+    edit->stat.st_gid = getgid ();
+    edit->bracket = -1;
+    if (!dir)
+       dir = "";
+    f = (char *) filename;
+    if (filename)
+       f = catstrs (dir, filename, 0);
+    if (edit_load_file (edit, f, text, text_size)) {
+/* edit_load_file already gives an error message */
+       free (edit);
+       return 0;
+    }
+    edit->force |= REDRAW_PAGE;
+    if (filename) {
+       filename = catstrs (dir, filename, 0);
+       edit_split_filename (edit, (char *) filename);
+    } else {
+       edit->filename = strdup ("");
+       edit->dir = strdup(dir);
+    }
+    edit->stack_size = START_STACK_SIZE;
+    edit->stack_size_mask = START_STACK_SIZE - 1;
+    edit->undo_stack = malloc ((edit->stack_size + 10) * sizeof (long));
+    if (!edit->undo_stack) {
+       edit_error_dialog (_(" Error "), _(" Error allocating memory "));
+       free (edit);
+       return 0;
+    }
+    edit->total_lines = edit_count_lines (edit, 0, edit->last_byte);
+    edit_load_syntax (edit, 0, 0);
+    {
+       int fg, bg;
+       edit_get_syntax_color (edit, -1, &fg, &bg);
+    }
+    return edit;
+}
+
+
+/* clear the edit struct, freeing everything in it. returns 1 on success */
+int edit_clean (WEdit * edit)
+{
+    if (edit) {
+       int j = 0;
+       edit_free_syntax_rules (edit);
+       for (; j <= MAXBUFF; j++) {
+           if (edit->buffers1[j] != NULL)
+               free (edit->buffers1[j]);
+           if (edit->buffers2[j] != NULL)
+               free (edit->buffers2[j]);
+       }
+
+       if (edit->undo_stack)
+           free (edit->undo_stack);
+       if (edit->filename)
+           free (edit->filename);
+       if (edit->dir)
+           free (edit->dir);
+/* we don't want to clear the widget */
+       memset (&(edit->from_here), 0, (unsigned long) &(edit->to_here) - (unsigned long) &(edit->from_here));
+       return 1;
+    }
+    return 0;
+}
+
+
+/* returns 1 on success */
+int edit_renew (WEdit * edit)
+{
+    int lines = edit->num_widget_lines;
+    int columns = edit->num_widget_columns;
+    char *dir;
+
+    if (edit->dir)
+       dir = strdup (edit->dir);
+    else
+       dir = 0;
+    
+    edit_clean (edit);
+    if (!edit_init (edit, lines, columns, 0, "", dir, 0))
+       return 0;
+    return 1;
+}
+
+/* returns 1 on success */
+int edit_reload (WEdit * edit, const char *filename, const char *text, const char *dir, unsigned long text_size)
+{
+    int lines = edit->num_widget_lines;
+    int columns = edit->num_widget_columns;
+    edit_clean (edit);
+    if (!edit_init (edit, lines, columns, filename, text, dir, text_size)) {
+       return 0;
+    }
+    return 1;
+}
+
+
+/*
+   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 betwen 600 and 700 it is one
+   of the cursor functions #define'd in edit.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 curser 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)
+
+*/
+
+static int push_action_disabled = 0;
+
+void edit_push_action (WEdit * edit, long c,...)
+{
+    unsigned long sp = edit->stack_pointer;
+    unsigned long spm1;
+    long *t;
+/* first enlarge the stack if necessary */
+    if (sp > edit->stack_size - 10) {  /* say */
+       if (option_max_undo < 256)
+           option_max_undo = 256;
+       if (edit->stack_size < option_max_undo) {
+           t = malloc ((edit->stack_size * 2 + 10) * sizeof (long));
+           if (t) {
+               memcpy (t, edit->undo_stack, sizeof (long) * edit->stack_size);
+               free (edit->undo_stack);
+               edit->undo_stack = t;
+               edit->stack_size <<= 1;
+               edit->stack_size_mask = edit->stack_size - 1;
+           }
+       }
+    }
+    spm1 = (edit->stack_pointer - 1) & edit->stack_size_mask;
+    if (push_action_disabled)
+       return;
+
+#ifdef FAST_MOVE_CURSOR
+    if (c == CURS_LEFT_LOTS || c == CURS_RIGHT_LOTS) {
+       va_list ap;
+       edit->undo_stack[sp] = c == CURS_LEFT_LOTS ? CURS_LEFT : CURS_RIGHT;
+       edit->stack_pointer = (edit->stack_pointer + 1) & edit->stack_size_mask;
+       va_start (ap, c);
+       c = -(va_arg (ap, int));
+       va_end (ap);
+    } else
+#endif                         /* ! FAST_MOVE_CURSOR */
+    if (spm1 != edit->stack_bottom && ((sp - 2) & edit->stack_size_mask) != edit->stack_bottom) {
+       int d;
+       if (edit->undo_stack[spm1] < 0) {
+           d = edit->undo_stack[(sp - 2) & edit->stack_size_mask];
+           if (d == c) {
+               if (edit->undo_stack[spm1] > -1000000000) {
+                   if (c < KEY_PRESS)  /* --> no need to push multiple do-nothings */
+                       edit->undo_stack[spm1]--;
+                   return;
+               }
+           }
+/* #define NO_STACK_CURSMOVE_ANIHILATION */
+#ifndef NO_STACK_CURSMOVE_ANIHILATION
+           else if ((c == CURS_LEFT && d == CURS_RIGHT)
+                    || (c == CURS_RIGHT && d == CURS_LEFT)) {  /* a left then a right anihilate each other */
+               if (edit->undo_stack[spm1] == -2)
+                   edit->stack_pointer = spm1;
+               else
+                   edit->undo_stack[spm1]++;
+               return;
+           }
+#endif
+       } 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;
+           }
+#ifndef NO_STACK_CURSMOVE_ANIHILATION
+           else if ((c == CURS_LEFT && d == CURS_RIGHT)
+                    || (c == CURS_RIGHT && d == CURS_LEFT)) {  /* a left then a right anihilate each other */
+               edit->stack_pointer = spm1;
+               return;
+           }
+#endif
+       }
+    }
+    edit->undo_stack[sp] = c;
+  check_bottom:
+
+    edit->stack_pointer = (edit->stack_pointer + 1) & edit->stack_size_mask;
+
+/*if the sp wraps round and catches the stack_bottom then erase the first set of actions on the stack to make space - by moving stack_bottom forward one "key press" */
+    c = (edit->stack_pointer + 2) & edit->stack_size_mask;
+    if (c == edit->stack_bottom || ((c + 1) & edit->stack_size_mask) == edit->stack_bottom)
+       do {
+           edit->stack_bottom = (edit->stack_bottom + 1) & edit->stack_size_mask;
+       } while (edit->undo_stack[edit->stack_bottom] < KEY_PRESS && edit->stack_bottom != edit->stack_pointer);
+
+/*If a single key produced enough pushes to wrap all the way round then we would notice that the [stack_bottom] does not contain KEY_PRESS. The stack is then initialised: */
+    if (edit->stack_pointer != edit->stack_bottom && edit->undo_stack[edit->stack_bottom] < KEY_PRESS)
+       edit->stack_bottom = edit->stack_pointer = 0;
+}
+
+/*
+   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.
+ */
+long pop_action (WEdit * edit)
+{
+    long c;
+    unsigned long sp = edit->stack_pointer;
+    if (sp == edit->stack_bottom) {
+       return STACK_BOTTOM;
+    }
+    sp = (sp - 1) & edit->stack_size_mask;
+    if ((c = edit->undo_stack[sp]) >= 0) {
+/*     edit->undo_stack[sp] = '@'; */
+       edit->stack_pointer = (edit->stack_pointer - 1) & edit->stack_size_mask;
+       return c;
+    }
+    if (sp == edit->stack_bottom) {
+       return STACK_BOTTOM;
+    }
+    c = edit->undo_stack[(sp - 1) & edit->stack_size_mask];
+    if (edit->undo_stack[sp] == -2) {
+/*      edit->undo_stack[sp] = '@'; */
+       edit->stack_pointer = sp;
+    } else
+       edit->undo_stack[sp]++;
+
+    return c;
+}
+
+
+/* is called whenever a modification is made by one of the four routines below */
+static inline void edit_modification (WEdit * edit)
+{
+    edit->modified = 1;
+}
+
+
+/*
+   Basic low level single character buffer alterations and movements at the cursor.
+   Returns char passed over, inserted or removed.
+ */
+
+void edit_insert (WEdit * edit, int c)
+{
+/* check if file has grown to large */
+    if (edit->last_byte >= SIZE_LIMIT)
+       return;
+
+/* first we must update the position of the display window */
+    if (edit->curs1 < edit->start_display) {
+       edit->start_display++;
+       if (c == '\n')
+           edit->start_line++;
+    }
+/* now we must update some info on the file and check if a redraw is required */
+    if (c == '\n') {
+       edit->curs_line++;
+       edit->total_lines++;
+       edit->force |= REDRAW_LINE_ABOVE | REDRAW_AFTER_CURSOR;
+    }
+/* tell that we've modified the file */
+    edit_modification (edit);
+
+/* save the reverse command onto the undo stack */
+    edit_push_action (edit, BACKSPACE);
+
+/* update markers */
+    edit->mark1 += (edit->mark1 > edit->curs1);
+    edit->mark2 += (edit->mark2 > edit->curs1);
+    edit->last_get_rule += (edit->last_get_rule > edit->curs1);
+
+/* add a new buffer if we've reached the end of the last one */
+    if (!(edit->curs1 & M_EDIT_BUF_SIZE))
+       edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = malloc (EDIT_BUF_SIZE);
+
+/* perfprm the insertion */
+    edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE][edit->curs1 & M_EDIT_BUF_SIZE] = (unsigned char) c;
+
+/* update file length */
+    edit->last_byte++;
+
+/* update cursor position */
+    edit->curs1++;
+}
+
+
+/* same as edit_insert and move left */
+void edit_insert_ahead (WEdit * edit, int c)
+{
+    if (edit->last_byte >= SIZE_LIMIT)
+       return;
+    if (edit->curs1 < edit->start_display) {
+       edit->start_display++;
+       if (c == '\n')
+           edit->start_line++;
+    }
+    if (c == '\n') {
+       edit->total_lines++;
+       edit->force |= REDRAW_AFTER_CURSOR;
+    }
+    edit_modification (edit);
+    edit_push_action (edit, DELETE);
+
+    edit->mark1 += (edit->mark1 >= edit->curs1);
+    edit->mark2 += (edit->mark2 >= edit->curs1);
+    edit->last_get_rule += (edit->last_get_rule >= edit->curs1);
+
+    if (!((edit->curs2 + 1) & M_EDIT_BUF_SIZE))
+       edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = malloc (EDIT_BUF_SIZE);
+    edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE) - 1] = c;
+
+    edit->last_byte++;
+    edit->curs2++;
+}
+
+
+int edit_delete (WEdit * edit)
+{
+    int p;
+    if (!edit->curs2)
+       return 0;
+
+    edit->mark1 -= (edit->mark1 > edit->curs1);
+    edit->mark2 -= (edit->mark2 > edit->curs1);
+    edit->last_get_rule -= (edit->last_get_rule > edit->curs1);
+
+    p = edit->buffers2[(edit->curs2 - 1) >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - ((edit->curs2 - 1) & M_EDIT_BUF_SIZE) - 1];
+
+    if (!(edit->curs2 & M_EDIT_BUF_SIZE)) {
+       free (edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE]);
+       edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = NULL;
+    }
+    edit->last_byte--;
+    edit->curs2--;
+
+    if (p == '\n') {
+       edit->total_lines--;
+       edit->force |= REDRAW_AFTER_CURSOR;
+    }
+    edit_push_action (edit, p + 256);
+    if (edit->curs1 < edit->start_display) {
+       edit->start_display--;
+       if (p == '\n')
+           edit->start_line--;
+    }
+    edit_modification (edit);
+
+    return p;
+}
+
+
+int edit_backspace (WEdit * edit)
+{
+    int p;
+    if (!edit->curs1)
+       return 0;
+
+    edit->mark1 -= (edit->mark1 >= edit->curs1);
+    edit->mark2 -= (edit->mark2 >= edit->curs1);
+    edit->last_get_rule -= (edit->last_get_rule >= edit->curs1);
+
+    p = *(edit->buffers1[(edit->curs1 - 1) >> S_EDIT_BUF_SIZE] + ((edit->curs1 - 1) & M_EDIT_BUF_SIZE));
+    if (!((edit->curs1 - 1) & M_EDIT_BUF_SIZE)) {
+       free (edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE]);
+       edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = NULL;
+    }
+    edit->last_byte--;
+    edit->curs1--;
+
+    if (p == '\n') {
+       edit->curs_line--;
+       edit->total_lines--;
+       edit->force |= REDRAW_AFTER_CURSOR;
+    }
+    edit_push_action (edit, p);
+
+    if (edit->curs1 < edit->start_display) {
+       edit->start_display--;
+       if (p == '\n')
+           edit->start_line--;
+    }
+    edit_modification (edit);
+
+    return p;
+}
+
+#ifdef FAST_MOVE_CURSOR
+
+#define memqcpy(edit,d,s,i)                                            \
+       {                                                               \
+           unsigned long next;                                         \
+           char *dest = d;                                             \
+           char *src = s;                                              \
+           int n = i;                                                  \
+           while ((next =                                              \
+                   (unsigned long) memccpy (dest, src, '\n', n))) {    \
+               edit->curs_line--;                                      \
+               next -= (unsigned long) dest;                           \
+               n -= next;                                              \
+               src += next;                                            \
+               dest += next;                                           \
+           }                                                           \
+       }
+
+int edit_move_backward_lots (WEdit * edit, long increment)
+{
+    int r, s, t;
+    char *p;
+
+    if (increment > edit->curs1)
+       increment = edit->curs1;
+    if (increment <= 0)
+       return -1;
+    edit_push_action (edit, CURS_RIGHT_LOTS, increment);
+
+    t = r = EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE);
+    if (r > increment)
+       r = increment;
+    s = edit->curs1 & M_EDIT_BUF_SIZE;
+
+    p = 0;
+    if (s > r) {
+       memqcpy (edit, edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] + t - r,
+             edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] + s - r, r);
+    } else {
+       if (s) {
+           memqcpy (edit, edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] + t - s,
+                    edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE], s);
+           p = edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE];
+           edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = 0;
+       }
+       memqcpy (edit, edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] + t - r,
+                edit->buffers1[(edit->curs1 >> S_EDIT_BUF_SIZE) - 1] + EDIT_BUF_SIZE - (r - s), r - s);
+    }
+    increment -= r;
+    edit->curs1 -= r;
+    edit->curs2 += r;
+    if (!(edit->curs2 & M_EDIT_BUF_SIZE)) {
+       if (p)
+           edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = p;
+       else
+           edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = malloc (EDIT_BUF_SIZE);
+    } else {
+       if (p)
+           free (p);
+    }
+
+    s = edit->curs1 & M_EDIT_BUF_SIZE;
+    while (increment) {
+       p = 0;
+       r = EDIT_BUF_SIZE;
+       if (r > increment)
+           r = increment;
+       t = s;
+       if (r < t)
+           t = r;
+       memqcpy (edit,
+                edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] + EDIT_BUF_SIZE - t,
+                edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] + s - t,
+                t);
+       if (r >= s) {
+           if (t) {
+               p = edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE];
+               edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = 0;
+           }
+           memqcpy (edit,
+                    edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] + EDIT_BUF_SIZE - r,
+                    edit->buffers1[(edit->curs1 >> S_EDIT_BUF_SIZE) - 1] + EDIT_BUF_SIZE - (r - s),
+                    r - s);
+       }
+       increment -= r;
+       edit->curs1 -= r;
+       edit->curs2 += r;
+       if (!(edit->curs2 & M_EDIT_BUF_SIZE)) {
+           if (p)
+               edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = p;
+           else
+               edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = malloc (EDIT_BUF_SIZE);
+       } else {
+           if (p)
+               free (p);
+       }
+    }
+    return edit_get_byte (edit, edit->curs1);
+}
+
+#endif         /* ! FAST_MOVE_CURSOR */
+
+/* moves the curser right or left: increment positive or negative respectively */
+int edit_cursor_move (WEdit * edit, long increment)
+{
+/* this is the same as a combination of two of the above routines, with only one push onto the undo stack */
+    int c;
+
+#ifdef FAST_MOVE_CURSOR
+    if (increment < -256) {
+       edit->force |= REDRAW_PAGE;
+       return edit_move_backward_lots (edit, -increment);
+    }
+#endif         /* ! FAST_MOVE_CURSOR */
+
+    if (increment < 0) {
+       for (; increment < 0; increment++) {
+           if (!edit->curs1)
+               return -1;
+
+           edit_push_action (edit, CURS_RIGHT);
+
+           c = edit_get_byte (edit, edit->curs1 - 1);
+           if (!((edit->curs2 + 1) & M_EDIT_BUF_SIZE))
+               edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = malloc (EDIT_BUF_SIZE);
+           edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE) - 1] = c;
+           edit->curs2++;
+           c = edit->buffers1[(edit->curs1 - 1) >> S_EDIT_BUF_SIZE][(edit->curs1 - 1) & M_EDIT_BUF_SIZE];
+           if (!((edit->curs1 - 1) & M_EDIT_BUF_SIZE)) {
+               free (edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE]);
+               edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = NULL;
+           }
+           edit->curs1--;
+           if (c == '\n') {
+               edit->curs_line--;
+               edit->force |= REDRAW_LINE_BELOW;
+           }
+       }
+
+       return c;
+    } else if (increment > 0) {
+       for (; increment > 0; increment--) {
+           if (!edit->curs2)
+               return -2;
+
+           edit_push_action (edit, CURS_LEFT);
+
+           c = edit_get_byte (edit, edit->curs1);
+           if (!(edit->curs1 & M_EDIT_BUF_SIZE))
+               edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = malloc (EDIT_BUF_SIZE);
+           edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE][edit->curs1 & M_EDIT_BUF_SIZE] = c;
+           edit->curs1++;
+           c = edit->buffers2[(edit->curs2 - 1) >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - ((edit->curs2 - 1) & M_EDIT_BUF_SIZE) - 1];
+           if (!(edit->curs2 & M_EDIT_BUF_SIZE)) {
+               free (edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE]);
+               edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = 0;
+           }
+           edit->curs2--;
+           if (c == '\n') {
+               edit->curs_line++;
+               edit->force |= REDRAW_LINE_ABOVE;
+           }
+       }
+       return c;
+    } else
+       return -3;
+}
+
+/* These functions return positions relative to lines */
+
+/* returns index of last char on line + 1 */
+long edit_eol (WEdit * edit, long current)
+{
+    if (current < edit->last_byte) {
+       for (;; current++)
+#if 0
+           if (current == edit->last_byte || edit_get_byte (edit, current) == '\n')
+#else
+           if (edit_get_byte (edit, current) == '\n')
+#endif
+               break;
+    } else
+       return edit->last_byte;
+    return current;
+}
+
+/* returns index of first char on line */
+long edit_bol (WEdit * edit, long current)
+{
+    if (current > 0) {
+       for (;; current--)
+#if 0
+           if (current == 0 || edit_get_byte (edit, current - 1) == '\n')
+#else
+           if (edit_get_byte (edit, current - 1) == '\n')
+#endif
+               break;
+    } else
+       return 0;
+    return current;
+}
+
+
+int edit_count_lines (WEdit * edit, long current, int upto)
+{
+    int lines = 0;
+    if (upto > edit->last_byte)
+       upto = edit->last_byte;
+    if (current < 0)
+       current = 0;
+    while (current < upto)
+       if (edit_get_byte (edit, current++) == '\n')
+           lines++;
+    return lines;
+}
+
+
+/* If lines is zero this returns the count of lines from current to upto. */
+/* If upto is zero returns index of lines forward current. */
+long edit_move_forward (WEdit * edit, long current, int lines, long upto)
+{
+    if (upto) {
+       return edit_count_lines (edit, current, upto);
+    } else {
+       int next;
+       if (lines < 0)
+           lines = 0;
+       while (lines--) {
+           next = edit_eol (edit, current) + 1;
+           if (next > edit->last_byte)
+               break;
+           else
+               current = next;
+       }
+       return current;
+    }
+}
+
+
+/* Returns offset of 'lines' lines up from current */
+long edit_move_backward (WEdit * edit, long current, int lines)
+{
+    if (lines < 0)
+       lines = 0;
+    current = edit_bol (edit, current);
+    while((lines--) && current != 0)
+       current = edit_bol (edit, current - 1);
+    return current;
+}
+
+#ifdef MIDNIGHT
+/* 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. */
+long edit_move_forward3 (WEdit * edit, long current, int cols, long upto)
+{
+    long p, q;
+    int col = 0;
+
+    if (upto) {
+       q = upto;
+       cols = -10;
+    } else
+       q = edit->last_byte + 2;
+
+    for (col = 0, p = current; p < q; p++) {
+       int c;
+       if (cols != -10) {
+           if (col == cols)
+               return p;
+           if (col > cols)
+               return p - 1;
+       }
+       c = edit_get_byte (edit, p);
+       if (c == '\r')
+           continue;
+       else
+       if (c == '\t')
+           col += TAB_SIZE - col % TAB_SIZE;
+       else
+           col++;
+       /*if(edit->nroff ... */
+       if (c == '\n') {
+           if (upto)
+               return col;
+           else
+               return p;
+       }
+    }
+    return (float) col;
+}
+#endif
+
+/* returns the current column position of the cursor */
+int edit_get_col (WEdit * edit)
+{
+    return edit_move_forward3 (edit, edit_bol (edit, edit->curs1), 0, edit->curs1);
+}
+
+
+/* Scrolling functions */
+
+void edit_update_curs_row (WEdit * edit)
+{
+    edit->curs_row = edit->curs_line - edit->start_line;
+}
+
+void edit_update_curs_col (WEdit * edit)
+{
+    edit->curs_col = edit_move_forward3(edit, edit_bol(edit, edit->curs1), 0, edit->curs1);
+}
+
+/*moves the display start position up by i lines */
+void edit_scroll_upward (WEdit * edit, unsigned long i)
+{
+    int lines_above = edit->start_line;
+    if (i > lines_above)
+       i = lines_above;
+    if (i) {
+       edit->start_line -= i;
+       edit->start_display = edit_move_backward (edit, edit->start_display, i);
+       edit->force |= REDRAW_PAGE;
+       edit->force &= (0xfff - REDRAW_CHAR_ONLY);
+    }
+    edit_update_curs_row(edit);
+}
+
+
+/* returns 1 if could scroll, 0 otherwise */
+void edit_scroll_downward (WEdit * edit, int i)
+{
+    int lines_below;
+    lines_below = edit->total_lines - edit->start_line - (edit->num_widget_lines - 1);
+    if (lines_below > 0) {
+       if (i > lines_below)
+           i = lines_below;
+       edit->start_line += i;
+       edit->start_display = edit_move_forward (edit, 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, int i)
+{
+    edit->force |= REDRAW_PAGE;
+    edit->force &= (0xfff - REDRAW_CHAR_ONLY);
+    edit->start_col -= i;
+}
+
+void edit_scroll_left (WEdit * edit, int 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 */
+
+static int is_in_indent (WEdit *edit)
+{
+    long p = edit_bol (edit, edit->curs1);
+    while (p < edit->curs1)
+       if (!strchr (" \t", edit_get_byte (edit, p++)))
+           return 0;
+    return 1;
+}
+
+static int left_of_four_spaces (WEdit *edit);
+
+static void edit_move_to_prev_col (WEdit * edit, long p)
+{
+    edit_cursor_move (edit, edit_move_forward3 (edit, p, edit->prev_col, 0) - edit->curs1);
+
+    if (is_in_indent (edit) && option_fake_half_tabs) {
+       edit_update_curs_col (edit);
+       if (edit->curs_col % (HALF_TAB_SIZE * space_width)) {
+           int q = edit->curs_col;
+           edit->curs_col -= (edit->curs_col % (HALF_TAB_SIZE * space_width));
+           p = edit_bol (edit, edit->curs1);
+           edit_cursor_move (edit, edit_move_forward3 (edit, p, edit->curs_col, 0) - edit->curs1);
+           if (!left_of_four_spaces (edit))
+               edit_cursor_move (edit, edit_move_forward3 (edit, p, q, 0) - edit->curs1);
+       }
+    }
+}
+
+
+/* move i lines */
+static void edit_move_up (WEdit * edit, unsigned long i, int scroll)
+{
+    long p, l = edit->curs_line;
+
+    if (i > l)
+       i = l;
+    if (i) {
+       if (i > 1)
+           edit->force |= REDRAW_PAGE;
+       if (scroll)
+           edit_scroll_upward (edit, i);
+
+       p = edit_bol (edit, edit->curs1);
+       edit_cursor_move (edit, (p = edit_move_backward (edit, p, i)) - edit->curs1);
+       edit_move_to_prev_col (edit, p);
+
+       edit->search_start = edit->curs1;
+       edit->found_len = 0;
+    }
+}
+
+int is_blank (WEdit * edit, long offset)
+{
+    long s, f;
+    int c;
+    s = edit_bol (edit, offset);
+    f = edit_eol (edit, offset) - 1;
+    while (s <= f) {
+       c = edit_get_byte (edit, s++);
+       if ((c > ' ' && c <= '~') || c >= 160)  /* non-printables on a line are considered "blank" */
+           return 0;
+    }
+    return 1;
+}
+
+int line_is_blank (WEdit * edit, long line)
+{
+    static long p = -1, l = 0;
+    if (p == -1 || abs (l - line) > abs (edit->curs_line - line)) {
+       l = edit->curs_line;
+       p = edit->curs1;
+    }
+    if (line < l)
+       p = edit_move_backward (edit, p, l - line);
+    else if (line > l)
+       p = edit_move_forward (edit, p, line - l, 0);
+    l = line;
+    return is_blank (edit, p);
+}
+
+/* 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, int scroll)
+{
+    int i;
+    if (edit->curs_line <= 1) {
+       i = 0;
+    } else {
+       if (line_is_blank (edit, edit->curs_line)) {
+           if (line_is_blank (edit, edit->curs_line - 1)) {
+               for (i = edit->curs_line - 1; i; i--)
+                   if (!line_is_blank (edit, i)) {
+                       i++;
+                       break;
+                   }
+           } else {
+               for (i = edit->curs_line - 1; i; i--)
+                   if (line_is_blank (edit, i))
+                       break;
+           }
+       } else {
+           for (i = edit->curs_line - 1; i; i--)
+               if (line_is_blank (edit, i))
+                   break;
+       }
+    }
+    edit_move_up (edit, edit->curs_line - i, scroll);
+}
+
+/* move i lines */
+static void edit_move_down (WEdit * edit, int i, int scroll)
+{
+    long p, l = edit->total_lines - edit->curs_line;
+
+    if (i > l)
+       i = l;
+    if (i) {
+       if (i > 1)
+           edit->force |= REDRAW_PAGE;
+       if (scroll)
+           edit_scroll_downward (edit, i);
+       p = edit_bol (edit, edit->curs1);
+       edit_cursor_move (edit, (p = edit_move_forward (edit, p, i, 0)) - edit->curs1);
+       edit_move_to_prev_col (edit, p);
+
+       edit->search_start = edit->curs1;
+       edit->found_len = 0;
+    }
+}
+
+/* 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, int scroll)
+{
+    int i;
+    if (edit->curs_line >= edit->total_lines - 1) {
+       i = edit->total_lines;
+    } else {
+       if (line_is_blank (edit, edit->curs_line)) {
+           if (line_is_blank (edit, edit->curs_line + 1)) {
+               for (i = edit->curs_line + 1; i; i++)
+                   if (!line_is_blank (edit, i) || i > edit->total_lines) {
+                       i--;
+                       break;
+                   }
+           } else {
+               for (i = edit->curs_line + 1; i; i++)
+                   if (line_is_blank (edit, i) || i >= edit->total_lines)
+                       break;
+           }
+       } else {
+           for (i = edit->curs_line + 1; i; i++)
+               if (line_is_blank (edit, i) || i >= edit->total_lines)
+                   break;
+       }
+    }
+    edit_move_down (edit, i - edit->curs_line, scroll);
+}
+
+static void edit_begin_page (WEdit *edit)
+{
+    edit_update_curs_row (edit);
+    edit_move_up (edit, edit->curs_row, 0);
+}
+
+static void edit_end_page (WEdit *edit)
+{
+    edit_update_curs_row (edit);
+    edit_move_down (edit, edit->num_widget_lines - edit->curs_row - 1, 0);
+}
+
+
+/* goto beginning of text */
+static void edit_move_to_top (WEdit * edit)
+{
+    if (edit->curs_line) {
+       edit_cursor_move (edit, -edit->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->curs_line < edit->total_lines) {
+       edit_cursor_move (edit, edit->curs2);
+       edit->start_display = edit->last_byte;
+       edit->start_line = edit->total_lines;
+       edit_update_curs_row(edit);
+       edit_scroll_upward (edit, edit->num_widget_lines - 1);
+       edit->force |= REDRAW_PAGE;
+    }
+}
+
+/* goto beginning of line */
+static void edit_cursor_to_bol (WEdit * edit)
+{
+    edit_cursor_move (edit, edit_bol (edit, edit->curs1) - edit->curs1);
+    edit->search_start = edit->curs1;
+    edit->prev_col = edit_get_col (edit);
+}
+
+/* goto end of line */
+static void edit_cursor_to_eol (WEdit * edit)
+{
+    edit_cursor_move (edit, edit_eol (edit, edit->curs1) - edit->curs1);
+    edit->search_start = edit->curs1;
+    edit->prev_col = edit_get_col (edit);
+}
+
+/* move cursor to line 'line' */
+void edit_move_to_line (WEdit * e, long line)
+{
+    if(line < e->curs_line)
+       edit_move_up (e, e->curs_line - line, 0);
+    else
+       edit_move_down (e, line - e->curs_line, 0);
+    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_action (edit, MARK_1 + edit->mark1);
+    edit_push_action (edit, MARK_2 + edit->mark2);
+}
+
+void free_selections (void)
+{
+    int i;
+    for (i = 0; i < NUM_SELECTION_HISTORY; i++)
+       if (selection_history[i].text) {
+           free (selection_history[i].text);
+           selection_history[i].text = 0;
+           selection_history[i].len = 0;
+       }
+    current_selection = 0;
+}
+
+/* return -1 on nothing to store or error, zero otherwise */
+void edit_get_selection (WEdit * edit)
+{
+    long start_mark, end_mark;
+    if (eval_marks (edit, &start_mark, &end_mark))
+       return;
+    if (selection_history[current_selection].len < 4096)       /* large selections should not be held -- to save memory */
+       current_selection = (current_selection + 1) % NUM_SELECTION_HISTORY;
+    selection_history[current_selection].len = end_mark - start_mark;
+    if (selection_history[current_selection].text)
+       free (selection_history[current_selection].text);
+    selection_history[current_selection].text = malloc (selection_history[current_selection].len + 1);
+    if (!selection_history[current_selection].text) {
+       selection_history[current_selection].text = malloc (1);
+       *selection_history[current_selection].text = 0;
+       selection_history[current_selection].len = 0;
+    } else {
+       unsigned char *p = selection_history[current_selection].text;
+       for (; start_mark < end_mark; start_mark++)
+           *p++ = edit_get_byte (edit, start_mark);
+       *p = 0;
+    }
+    selection.text = selection_history[current_selection].text;
+    selection.len = selection_history[current_selection].len;
+}
+
+void edit_set_markers (WEdit * edit, long m1, long m2, int c1, int c2)
+{
+    edit->mark1 = m1;
+    edit->mark2 = m2;
+    edit->column1 = c1;
+    edit->column2 = c2;
+}
+
+
+/* highlight marker toggle */
+void edit_mark_cmd (WEdit * edit, int 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_set_markers (edit, edit->curs1, -1, edit->curs_col, edit->curs_col);
+           edit->force |= REDRAW_PAGE;
+       } else
+           edit_set_markers (edit, edit->mark1, edit->curs1, edit->column1, edit->curs_col);
+    }
+}
+
+int my_type_of (int c)
+{
+    if (c < ' ' && c > 0)
+       return 1;
+    if (strchr ("+_-.", c))
+       if (strchr (option_whole_chars_move, c))
+           return 3;
+    if (!strcasechr (option_whole_chars_move, c))
+       return 2;
+    if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c >= 160)
+       return 3;
+    return c;
+}
+
+void edit_left_word_move (WEdit * edit)
+{
+    do {
+       edit_cursor_move (edit, -1);
+       if (!edit->curs1)
+           break;
+    } while (my_type_of (edit_get_byte (edit, edit->curs1))
+            ==
+            my_type_of (edit_get_byte (edit, edit->curs1 - 1)));
+}
+
+static void edit_left_word_move_cmd (WEdit * edit)
+{
+    edit_left_word_move (edit);
+    if (strchr (option_whole_chars_move, ' '))
+       if (strchr ("\t ", edit_get_byte (edit, edit->curs1)))
+           edit_left_word_move (edit);
+    edit->force |= REDRAW_PAGE;
+}
+
+void edit_right_word_move (WEdit * edit)
+{
+    do {
+       edit_cursor_move (edit, 1);
+       if (edit->curs1 >= edit->last_byte)
+           break;
+    } while (my_type_of (edit_get_byte (edit, edit->curs1 - 1))
+            ==
+            my_type_of (edit_get_byte (edit, edit->curs1)));
+}
+
+static void edit_right_word_move_cmd (WEdit * edit)
+{
+    edit_right_word_move (edit);
+    if (strchr (option_whole_chars_move, ' '))
+       if (strchr ("\t ", edit_get_byte (edit, edit->curs1)))
+           edit_right_word_move (edit);
+    edit->force |= REDRAW_PAGE;
+}
+
+
+static void edit_right_delete_word (WEdit * edit)
+{
+    int c;
+    do {
+       c = edit_delete (edit);
+    } while (my_type_of (c) == my_type_of (edit_get_byte (edit, edit->curs1)));
+}
+
+static void edit_left_delete_word (WEdit * edit)
+{
+    int c;
+    do {
+       c = edit_backspace (edit);
+    } while (my_type_of (c) == my_type_of (edit_get_byte (edit, edit->curs1 - 1)));
+}
+
+
+/*
+   the start column position is not recorded, and hence does not
+   undo as it happed. But who would notice.
+ */
+void edit_do_undo (WEdit * edit)
+{
+    long ac;
+    long count = 0;
+
+    push_action_disabled = 1;  /* don't record undo's onto undo stack! */
+
+    while ((ac = pop_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:
+           edit_backspace (edit);
+           break;
+       case DELETE:
+           edit_delete (edit);
+           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;
+       } else if (ac >= MARK_2 - 2 && ac < KEY_PRESS) {
+           edit->mark2 = ac - MARK_2;
+       }
+       if (count++)
+           edit->force |= REDRAW_PAGE;         /* more than one pop usually means something big */
+    }
+
+    if (edit->start_display > ac - KEY_PRESS) {
+       edit->start_line -= edit_count_lines (edit, ac - KEY_PRESS, edit->start_display);
+       edit->force |= REDRAW_PAGE;
+    } else if (edit->start_display < ac - KEY_PRESS) {
+       edit->start_line += edit_count_lines (edit, edit->start_display, ac - KEY_PRESS);
+       edit->force |= REDRAW_PAGE;
+    }
+    edit->start_display = ac - KEY_PRESS;      /* see push and pop above */
+    edit_update_curs_row(edit);
+
+    done_undo:;
+    push_action_disabled = 0;
+}
+
+static void edit_delete_to_line_end (WEdit * edit)
+{
+    for (;;) {
+       if (edit_get_byte (edit, edit->curs1) == '\n')
+           break;
+       if (!edit->curs2)
+           break;
+       edit_delete (edit);
+    }
+}
+
+static void edit_delete_to_line_begin (WEdit * edit)
+{
+    for (;;) {
+       if (edit_get_byte (edit, edit->curs1 - 1) == '\n')
+           break;
+       if (!edit->curs1)
+           break;
+       edit_backspace (edit);
+    }
+}
+
+static void edit_delete_line (WEdit * edit)
+{
+    int c;
+    do {
+       c = edit_delete (edit);
+    } while (c != '\n' && c);
+    do {
+       c = edit_backspace (edit);
+    } while (c != '\n' && c);
+    if (c)
+       edit_insert (edit, '\n');
+}
+
+static void insert_spaces_tab (WEdit * edit)
+{
+    int i = option_tab_spacing;
+    while (i--)
+       edit_insert (edit, ' ');
+}
+
+static int is_aligned_on_a_tab (WEdit * edit)
+{
+    edit_update_curs_col (edit);
+    if ((edit->curs_col % (TAB_SIZE * space_width)) && edit->curs_col % (TAB_SIZE * space_width) != (HALF_TAB_SIZE * space_width))
+       return 0;               /* not alligned on a tab */
+    return 1;
+}
+
+static int right_of_four_spaces (WEdit *edit)
+{
+    int i, ch = 0;
+    for (i = 1; i <= HALF_TAB_SIZE; i++)
+       ch |= edit_get_byte (edit, edit->curs1 - i);
+    if (ch == ' ')
+       return is_aligned_on_a_tab (edit);
+    return 0;
+}
+
+static int left_of_four_spaces (WEdit *edit)
+{
+    int i, ch = 0;
+    for (i = 0; i < HALF_TAB_SIZE; i++)
+       ch |= edit_get_byte (edit, edit->curs1 + i);
+    if (ch == ' ')
+       return is_aligned_on_a_tab (edit);
+    return 0;
+}
+
+int edit_indent_width (WEdit * edit, long p)
+{
+    long q = p;
+    while (strchr ("\t ", edit_get_byte (edit, q)) && q < edit->last_byte - 1) /* move to the end of the leading whitespace of the line */
+       q++;
+    return edit_move_forward3 (edit, p, 0, q); /* count the number of columns of indentation */
+}
+
+void edit_insert_indent (WEdit * edit, int indent)
+{
+#ifndef MIDNIGHT
+    indent /= space_width;
+#endif
+    if (!option_fill_tabs_with_spaces) {
+       while (indent >= TAB_SIZE) {
+           edit_insert (edit, '\t');
+           indent -= TAB_SIZE;
+       }
+    }
+    while (indent--)
+       edit_insert (edit, ' ');
+}
+
+static void edit_auto_indent (WEdit * edit, int always)
+{
+    long p;
+    int indent;
+    p = edit->curs1;
+    while (strchr ("\t\n\r ", edit_get_byte (edit, p - 1)) && p > 0)   /* move back/up to a line with text */
+       p--;
+    indent = edit_indent_width (edit, edit_bol (edit, p));
+    if (edit->curs_col < indent)
+       indent = edit->curs_col;
+    edit_insert_indent (edit, indent);
+}
+
+static void edit_double_newline (WEdit * edit)
+{
+    edit_insert (edit, '\n');
+    if (edit_get_byte (edit, edit->curs1) == '\n')
+       return;
+    if (edit_get_byte (edit, edit->curs1 - 2) == '\n')
+       return;
+    edit->force |= REDRAW_PAGE;
+    edit_insert (edit, '\n');
+}
+
+static void edit_tab_cmd (WEdit * edit)
+{
+    int i;
+
+    if (option_fake_half_tabs) {
+       if (is_in_indent (edit)) {
+           /*insert a half tab (usually four spaces) unless there is a
+              half tab already behind, then delete it and insert a 
+              full tab. */
+           if (right_of_four_spaces (edit)) {
+               for (i = 1; i <= HALF_TAB_SIZE; i++)
+                   edit_backspace (edit);
+               if (option_fill_tabs_with_spaces) {
+                   insert_spaces_tab (edit);
+               } else {
+                   edit_insert (edit, '\t');
+               }
+           } else {
+               for (i = 1; i <= HALF_TAB_SIZE; i++)
+                   edit_insert (edit, ' ');
+           }
+           return;
+       }
+    }
+    if (option_fill_tabs_with_spaces) {
+       insert_spaces_tab (edit);
+    } else {
+       edit_insert (edit, '\t');
+    }
+    return;
+}
+
+void format_paragraph (WEdit * edit, int force);
+
+static void check_and_wrap_line (WEdit * edit)
+{
+    int curs, c;
+    if (!option_typewriter_wrap)
+       return;
+    edit_update_curs_col (edit);
+#ifdef MIDNIGHT
+    if (edit->curs_col < option_word_wrap_line_length)
+#else
+    if (edit->curs_col < option_word_wrap_line_length * FONT_MEAN_WIDTH)
+#endif
+       return;
+    curs = edit->curs1;
+    for (;;) {
+       curs--;
+       c = edit_get_byte (edit, curs);
+       if (c == '\n' || curs <= 0) {
+           edit_insert (edit, '\n');
+           return;
+       }
+       if (c == ' ' || c == '\t') {
+           int current = edit->curs1;
+           edit_cursor_move (edit, curs - edit->curs1 + 1);
+           edit_insert (edit, '\n');
+           edit_cursor_move (edit, current - edit->curs1 + 1);
+           return;
+       }
+    }
+}
+
+void edit_execute_macro (WEdit * edit, struct macro macro[], int n);
+
+/* either command or char_for_insertion must be passed as -1 */
+int edit_execute_cmd (WEdit * edit, int command, int char_for_insertion);
+
+#ifdef MIDNIGHT
+int edit_translate_key (WEdit * edit, unsigned int x_keycode, long x_key, int x_state, int *cmd, int *ch)
+{
+    int command = -1;
+    int char_for_insertion = -1;
+
+#include "edit_key_translator.c"
+
+    *cmd = command;
+    *ch = char_for_insertion;
+
+    if((command == -1 || command == 0) && char_for_insertion == -1)  /* unchanged, key has no function here */
+       return 0;
+    return 1;
+}
+#endif
+
+void edit_push_key_press (WEdit * edit)
+{
+    edit_push_action (edit, KEY_PRESS + edit->start_display);
+    if (edit->mark2 == -1)
+       edit_push_action (edit, MARK_1 + edit->mark1);
+}
+
+/* this find the matching bracket in either direction, and sets edit->bracket */
+void edit_find_bracket (WEdit * edit)
+{
+    if (option_find_bracket) {
+       const char *b = "{}{[][()(", *p;
+       static int last_bracket = -1;
+       int i = 1, a, inc = -1, c, d, n = 0, j = 0;
+       long q;
+
+       edit->bracket = -1;
+       c = edit_get_byte (edit, edit->curs1);
+       p = strchr (b, c);
+       edit_update_curs_row (edit);
+       if (p) {
+           d = p[1];
+           if (strchr ("{[(", c))
+               inc = 1;
+           for (q = edit->curs1 + inc;; q += inc) {
+               if (q >= edit->last_byte || q < edit->start_display || j++ > 10000)
+                   break;
+               a = edit_get_byte (edit, q);
+               if (inc > 0 && a == '\n')
+                   n++;
+               if (n >= edit->num_widget_lines - edit->curs_row)       /* out of screen */
+                   break;
+               i += (a == c) - (a == d);
+               if (!i) {
+                   edit->bracket = q;
+                   break;
+               }
+           }
+       }
+       if (last_bracket != edit->bracket)
+           edit->force |= REDRAW_PAGE;
+       last_bracket = edit->bracket;
+    }
+}
+
+
+/* this executes a command as though the user initiated it through a key press. */
+/* callback with WIDGET_KEY as a message calls this after translating the key
+   press */
+/* this can be used to pass any command to the editor. Same as sendevent with
+   msg = WIDGET_COMMAND and par = command  except the screen wouldn't update */
+/* one of command or char_for_insertion must be passed as -1 */
+/* commands are executed, and char_for_insertion is inserted at the cursor */
+/* returns 0 if the command is a macro that was not found, 1 otherwise */
+int edit_execute_key_command (WEdit * edit, int command, int char_for_insertion)
+{
+    int r;
+    if (command == CK_Begin_Record_Macro) {
+       edit->macro_i = 0;
+       edit->force |= REDRAW_CHAR_ONLY | REDRAW_LINE;
+       return command;
+    }
+    if (command == CK_End_Record_Macro && edit->macro_i != -1) {
+       edit->force |= REDRAW_COMPLETELY;
+       edit_save_macro_cmd (edit, edit->macro, edit->macro_i);
+       edit->macro_i = -1;
+       return command;
+    }
+    if (edit->macro_i >= 0 && edit->macro_i < MAX_MACRO_LENGTH - 1) {
+       edit->macro[edit->macro_i].command = command;
+       edit->macro[edit->macro_i++].ch = char_for_insertion;
+    }
+/* record the beginning of a set of editing actions initiated by a key press */
+    if (command != CK_Undo)
+       edit_push_key_press (edit);
+
+    r = edit_execute_cmd (edit, command, char_for_insertion);
+
+    return r;
+}
+
+#ifdef MIDNIGHT
+static const char *shell_cmd[] = SHELL_COMMANDS_i
+#else
+static void (*user_commamd) (WEdit *, int) = 0;
+void edit_set_user_command (void (*func) (WEdit *, int))
+{
+    user_commamd = func;
+}
+
+#endif
+
+void edit_mail_dialog (WEdit * edit);
+
+/* 
+   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.
+   Returns 0 if the command is a macro that was not found, 1
+   otherwise.
+ */
+int edit_execute_cmd (WEdit * edit, int command, int char_for_insertion)
+{
+    int result = 1;
+    edit->force |= REDRAW_LINE;
+    if (edit->found_len)
+/* the next key press will unhighlight the found string, so update whole page */
+       edit->force |= REDRAW_PAGE;
+
+    if (command / 100 == 6) {  /* a highlight command like shift-arrow */
+       if (!edit->highlight || (edit->mark2 != -1 && edit->mark1 != edit->mark2)) {
+           edit_mark_cmd (edit, 1);    /* clear */
+           edit_mark_cmd (edit, 0);    /* marking on */
+       }
+       edit->highlight = 1;
+    } else {                   /* any other command */
+       if (edit->highlight)
+           edit_mark_cmd (edit, 0);    /* clear */
+       edit->highlight = 0;
+    }
+
+/* first check for undo */
+    if (command == CK_Undo) {
+       edit_do_undo (edit);
+       edit->found_len = 0;
+       edit->prev_col = edit_get_col (edit);
+       edit->search_start = edit->curs1;
+       return 1;
+    }
+/* An ordinary key press */
+    if (char_for_insertion >= 0) {
+       if (edit->overwrite) {
+           if (edit_get_byte (edit, edit->curs1) != '\n')
+               edit_delete (edit);
+       }
+       edit_insert (edit, char_for_insertion);
+       if (option_auto_para_formatting) {
+           format_paragraph (edit, 0);
+           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->curs1;
+       edit_find_bracket (edit);
+       return 1;
+    }
+    switch (command) {
+    case CK_Begin_Page:
+    case CK_End_Page:
+    case CK_Begin_Page_Highlight:
+    case CK_End_Page_Highlight:
+    case CK_Word_Left:
+    case CK_Word_Right:
+    case CK_Up:
+    case CK_Down:
+    case CK_Word_Left_Highlight:
+    case CK_Word_Right_Highlight:
+    case CK_Up_Highlight:
+    case CK_Down_Highlight:
+       if (edit->mark2 == -1)
+           break;              /*marking is following the cursor: may need to highlight a whole line */
+    case CK_Left:
+    case CK_Right:
+    case CK_Left_Highlight:
+    case CK_Right_Highlight:
+       edit->force |= REDRAW_CHAR_ONLY;
+    }
+
+/* basic cursor key commands */
+    switch (command) {
+    case CK_BackSpace:
+       if (option_backspace_through_tabs && is_in_indent (edit)) {
+           while (edit_get_byte (edit, edit->curs1 - 1) != '\n'
+                  && edit->curs1 > 0)
+               edit_backspace (edit);
+           break;
+       } else {
+           if (option_fake_half_tabs) {
+               int i;
+               if (is_in_indent (edit) && right_of_four_spaces (edit)) {
+                   for (i = 0; i < HALF_TAB_SIZE; i++)
+                       edit_backspace (edit);
+                   break;
+               }
+           }
+       }
+       edit_backspace (edit);
+       break;
+    case CK_Delete:
+       if (option_fake_half_tabs) {
+           int i;
+           if (is_in_indent (edit) && left_of_four_spaces (edit)) {
+               for (i = 1; i <= HALF_TAB_SIZE; i++)
+                   edit_delete (edit);
+               break;
+           }
+       }
+       edit_delete (edit);
+       break;
+    case CK_Delete_Word_Left:
+       edit_left_delete_word (edit);
+       break;
+    case CK_Delete_Word_Right:
+       edit_right_delete_word (edit);
+       break;
+    case CK_Delete_Line:
+       edit_delete_line (edit);
+       break;
+    case CK_Delete_To_Line_End:
+       edit_delete_to_line_end (edit);
+       break;
+    case CK_Delete_To_Line_Begin:
+       edit_delete_to_line_begin (edit);
+       break;
+    case CK_Enter:
+       if (option_auto_para_formatting) {
+           edit_double_newline (edit);
+           if (option_return_does_auto_indent)
+               edit_auto_indent (edit, 0);
+           format_paragraph (edit, 0);
+       } else if (option_return_does_auto_indent) {
+           edit_insert (edit, '\n');
+           edit_auto_indent (edit, 0);
+       } else {
+           edit_insert (edit, '\n');
+       }
+       break;
+    case CK_Return:
+       edit_insert (edit, '\n');
+       break;
+
+    case CK_Page_Up:
+    case CK_Page_Up_Highlight:
+       edit_move_up (edit, edit->num_widget_lines - 1, 1);
+       break;
+    case CK_Page_Down:
+    case CK_Page_Down_Highlight:
+       edit_move_down (edit, edit->num_widget_lines - 1, 1);
+       break;
+    case CK_Left:
+    case CK_Left_Highlight:
+       if (option_fake_half_tabs) {
+           if (is_in_indent (edit) && right_of_four_spaces (edit)) {
+               edit_cursor_move (edit, -HALF_TAB_SIZE);
+               edit->force &= (0xFFF - REDRAW_CHAR_ONLY);
+               break;
+           }
+       }
+       edit_cursor_move (edit, -1);
+       break;
+    case CK_Right:
+    case CK_Right_Highlight:
+       if (option_fake_half_tabs) {
+           if (is_in_indent (edit) && left_of_four_spaces (edit)) {
+               edit_cursor_move (edit, HALF_TAB_SIZE);
+               edit->force &= (0xFFF - REDRAW_CHAR_ONLY);
+               break;
+           }
+       }
+       edit_cursor_move (edit, 1);
+       break;
+    case CK_Begin_Page:
+    case CK_Begin_Page_Highlight:
+       edit_begin_page (edit);
+       break;
+    case CK_End_Page:
+    case CK_End_Page_Highlight:
+       edit_end_page (edit);
+       break;
+    case CK_Word_Left:
+    case CK_Word_Left_Highlight:
+       edit_left_word_move_cmd (edit);
+       break;
+    case CK_Word_Right:
+    case CK_Word_Right_Highlight:
+       edit_right_word_move_cmd (edit);
+       break;
+    case CK_Up:
+    case CK_Up_Highlight:
+       edit_move_up (edit, 1, 0);
+       break;
+    case CK_Down:
+    case CK_Down_Highlight:
+       edit_move_down (edit, 1, 0);
+       break;
+    case CK_Paragraph_Up:
+    case CK_Paragraph_Up_Highlight:
+       edit_move_up_paragraph (edit, 0);
+       break;
+    case CK_Paragraph_Down:
+    case CK_Paragraph_Down_Highlight:
+       edit_move_down_paragraph (edit, 0);
+       break;
+    case CK_Scroll_Up:
+    case CK_Scroll_Up_Highlight:
+       edit_move_up (edit, 1, 1);
+       break;
+    case CK_Scroll_Down:
+    case CK_Scroll_Down_Highlight:
+       edit_move_down (edit, 1, 1);
+       break;
+    case CK_Home:
+    case CK_Home_Highlight:
+       edit_cursor_to_bol (edit);
+       break;
+    case CK_End:
+    case CK_End_Highlight:
+       edit_cursor_to_eol (edit);
+       break;
+
+    case CK_Tab:
+       edit_tab_cmd (edit);
+       if (option_auto_para_formatting) {
+           format_paragraph (edit, 0);
+           edit->force |= REDRAW_PAGE;
+       } else
+           check_and_wrap_line (edit);
+       break;
+
+    case CK_Toggle_Insert:
+       edit->overwrite = (edit->overwrite == 0);
+#ifndef MIDNIGHT
+       CSetCursorColor (edit->overwrite ? color_palette (24) : color_palette (19));
+#endif
+       break;
+
+    case CK_Mark:
+       edit_mark_cmd (edit, 0);
+       break;
+    case CK_Unmark:
+       edit_mark_cmd (edit, 1);
+       break;
+
+    case CK_Beginning_Of_Text:
+    case CK_Beginning_Of_Text_Highlight:
+       edit_move_to_top (edit);
+       break;
+    case CK_End_Of_Text:
+    case CK_End_Of_Text_Highlight:
+       edit_move_to_bottom (edit);
+       break;
+
+    case CK_Copy:
+       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_XStore:
+       edit_copy_to_X_buf_cmd (edit);
+       break;
+    case CK_XCut:
+       edit_cut_to_X_buf_cmd (edit);
+       break;
+    case CK_XPaste:
+       edit_paste_from_X_buf_cmd (edit);
+       break;
+    case CK_Selection_History:
+       edit_paste_from_history (edit);
+       break;
+
+    case CK_Save_As:
+#ifndef MIDNIGHT
+       if (edit->widget->options & EDITOR_NO_FILE)
+           break;
+#endif
+       edit_save_as_cmd (edit);
+       break;
+    case CK_Save:
+#ifndef MIDNIGHT
+       if (edit->widget->options & EDITOR_NO_FILE)
+           break;
+#endif
+       edit_save_confirm_cmd (edit);
+       break;
+    case CK_Load:
+#ifndef MIDNIGHT
+       if (edit->widget->options & EDITOR_NO_FILE)
+           break;
+#endif
+       edit_load_cmd (edit);
+       break;
+    case CK_Save_Block:
+       edit_save_block_cmd (edit);
+       break;
+    case CK_Insert_File:
+       edit_insert_file_cmd (edit);
+       break;
+
+    case CK_Find:
+       edit_search_cmd (edit, 0);
+       break;
+    case CK_Find_Again:
+       edit_search_cmd (edit, 1);
+       break;
+    case CK_Replace:
+       edit_replace_cmd (edit, 0);
+       break;
+    case CK_Replace_Again:
+       edit_replace_cmd (edit, 1);
+       break;
+
+    case CK_Exit:
+       edit_quit_cmd (edit);
+       break;
+    case CK_New:
+       edit_new_cmd (edit);
+       break;
+
+    case CK_Help:
+       edit_help_cmd (edit);
+       break;
+
+    case CK_Refresh:
+       edit_refresh_cmd (edit);
+       break;
+
+    case CK_Date:{
+           time_t t;
+           time (&t);
+           edit_printf (edit, ctime (&t));
+           edit->force |= REDRAW_PAGE;
+           break;
+       }
+    case CK_Goto:
+       edit_goto_cmd (edit);
+       break;
+    case CK_Paragraph_Format:
+       format_paragraph (edit, 1);
+       edit->force |= REDRAW_PAGE;
+       break;
+    case CK_Delete_Macro:
+       edit_delete_macro_cmd (edit);
+       break;
+#ifdef MIDNIGHT
+    case CK_Sort:
+       edit_sort_cmd (edit);
+       break;
+    case CK_Mail:
+       edit_mail_dialog (edit);
+       break;
+#endif
+
+/* These commands are not handled and must be handled by the user application */
+#ifndef MIDNIGHT
+    case CK_Sort:
+    case CK_Mail:
+#endif
+    case CK_Complete:
+    case CK_Cancel:
+    case CK_Save_Desktop:
+    case CK_New_Window:
+    case CK_Cycle:
+    case CK_Menu:
+    case CK_Save_And_Quit:
+    case CK_Check_Save_And_Quit:
+    case CK_Run_Another:
+       result = 0;
+       break;
+    }
+
+#ifdef MIDNIGHT
+/* CK_Pipe_Block */
+    if ((command / 1000) == 1) /* a shell command */
+       edit_block_process_cmd (edit, shell_cmd[command - 1000], 1);
+#else
+    if ((command / 1000) == 1) /* a user defined command */
+       if (user_commamd)
+           (*user_commamd) (edit, command - 1000);
+#endif
+
+    if (command > CK_Macro (0) && command <= CK_Last_Macro) {  /* a macro command */
+       struct macro m[MAX_MACRO_LENGTH];
+       int nm;
+       if ((result = edit_load_macro_cmd (edit, m, &nm, command - 2000)))
+           edit_execute_macro (edit, m, nm);
+    }
+/* keys which must set the col position, and the search vars */
+    switch (command) {
+    case CK_Find:
+    case CK_Find_Again:
+    case CK_Replace:
+    case CK_Replace_Again:
+       edit->prev_col = edit_get_col (edit);
+       return 1;
+       break;
+    case CK_Up:
+    case CK_Up_Highlight:
+    case CK_Down:
+    case CK_Down_Highlight:
+    case CK_Page_Up:
+    case CK_Page_Up_Highlight:
+    case CK_Page_Down:
+    case CK_Page_Down_Highlight:
+    case CK_Beginning_Of_Text:
+    case CK_Beginning_Of_Text_Highlight:
+    case CK_End_Of_Text:
+    case CK_End_Of_Text_Highlight:
+    case CK_Paragraph_Up:
+    case CK_Paragraph_Up_Highlight:
+    case CK_Paragraph_Down:
+    case CK_Paragraph_Down_Highlight:
+    case CK_Scroll_Up:
+    case CK_Scroll_Up_Highlight:
+    case CK_Scroll_Down:
+    case CK_Scroll_Down_Highlight:
+       edit->search_start = edit->curs1;
+       edit->found_len = 0;
+       edit_find_bracket (edit);
+       return 1;
+       break;
+    default:
+       edit->found_len = 0;
+       edit->prev_col = edit_get_col (edit);
+       edit->search_start = edit->curs1;
+    }
+    edit_find_bracket (edit);
+
+    if (option_auto_para_formatting) {
+       switch (command) {
+       case CK_BackSpace:
+       case CK_Delete:
+       case CK_Delete_Word_Left:
+       case CK_Delete_Word_Right:
+       case CK_Delete_To_Line_End:
+       case CK_Delete_To_Line_Begin:
+           format_paragraph (edit, 0);
+           edit->force |= REDRAW_PAGE;
+       }
+    }
+    return result;
+}
+
+
+/* either command or char_for_insertion must be passed as -1 */
+/* returns 0 if command is a macro that was not found, 1 otherwise */
+int edit_execute_command (WEdit * edit, int command, int char_for_insertion)
+{
+    int r;
+    r = edit_execute_cmd (edit, command, char_for_insertion);
+    edit_update_screen (edit);
+    return r;
+}
+
+void edit_execute_macro (WEdit * edit, struct macro macro[], int n)
+{
+    int i = 0;
+    edit->force |= REDRAW_PAGE;
+    for (; i < n; i++) {
+       edit_execute_cmd (edit, macro[i].command, macro[i].ch);
+    }
+    edit_update_screen (edit);
+}
+
diff --git a/rosapps/mc/edit/edit.h b/rosapps/mc/edit/edit.h
new file mode 100644 (file)
index 0000000..5f965c5
--- /dev/null
@@ -0,0 +1,633 @@
+#ifndef __EDIT_H
+#define __EDIT_H
+
+#ifdef MIDNIGHT
+
+#ifdef HAVE_SLANG
+#define HAVE_SYNTAXH 1
+#endif
+
+#    include <stdio.h>
+#    include <stdarg.h>
+#    include <sys/types.h>
+#    ifdef HAVE_UNISTD_H
+#       include <unistd.h>
+#    endif
+#    include <string.h>
+#    include "../src/tty.h"
+#    include <sys/stat.h>
+#    include <errno.h>
+     
+#    ifdef HAVE_FCNTL_H
+#        include <fcntl.h>
+#    endif
+     
+#    include <stdlib.h>
+#    include <malloc.h>
+
+#else       /* ! MIDNIGHT */
+
+#    include "global.h"
+#    include <stdio.h>
+#    include <stdarg.h>
+#    include <sys/types.h>
+     
+#       ifdef HAVE_UNISTD_H
+#           include <unistd.h>
+#       endif
+     
+#    include <my_string.h>
+#    include <sys/stat.h>
+     
+#    ifdef HAVE_FCNTL_H
+#       include <fcntl.h>
+#    endif
+     
+#    include <stdlib.h>
+#    include <stdarg.h>
+
+#    if TIME_WITH_SYS_TIME
+#       include <sys/time.h>
+#       include <time.h>
+#    else
+#       if HAVE_SYS_TIME_H
+#           include <sys/time.h>
+#       else
+#           include <time.h>
+#       endif
+#    endif
+#    include "regex.h"
+
+#endif
+
+#ifndef MIDNIGHT
+
+#    include <signal.h>
+#    include <X11/Xlib.h>
+#    include <X11/Xutil.h>
+#    include <X11/Xresource.h>
+#    include "lkeysym.h"
+#    include "coolwidget.h"
+#    include "app_glob.c"
+#    include "coollocal.h"
+#    include "stringtools.h"
+
+#else
+
+#    include "../src/main.h"           /* for char *shell */
+#    include "../src/mad.h"
+#    include "../src/dlg.h"
+#    include "../src/widget.h"
+#    include "../src/color.h"
+#    include "../src/dialog.h"
+#    include "../src/mouse.h"
+#    include "../src/global.h"
+#    include "../src/help.h"
+#    include "../src/key.h"
+#    include "../src/wtools.h"         /* for QuickWidgets */
+#    include "../src/win.h"
+#    include "../vfs/vfs.h"
+#    include "../src/menu.h"
+#    include "../src/regex.h"
+#    define WANT_WIDGETS
+     
+#    define WIDGET_COMMAND (WIDGET_USER + 10)
+#    define N_menus 5
+
+#endif
+
+#define SEARCH_DIALOG_OPTION_NO_SCANF  1
+#define SEARCH_DIALOG_OPTION_NO_REGEX  2
+#define SEARCH_DIALOG_OPTION_NO_CASE   4
+#define SEARCH_DIALOG_OPTION_BACKWARDS 8
+
+#define SYNTAX_FILE "/.cedit/syntax"
+#define CLIP_FILE "/.cedit/cooledit.clip"
+#define MACRO_FILE "/.cedit/cooledit.macros"
+#define BLOCK_FILE "/.cedit/cooledit.block"
+#define ERROR_FILE "/.cedit/cooledit.error"
+#define TEMP_FILE "/.cedit/cooledit.temp"
+#define SCRIPT_FILE "/.cedit/cooledit.script"
+#define EDIT_DIR "/.cedit"
+
+#define EDIT_KEY_EMULATION_NORMAL 0
+#define EDIT_KEY_EMULATION_EMACS  1
+
+#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 MOD_ABNORMAL           (1 << 0)
+#define MOD_UNDERLINED         (1 << 1)
+#define MOD_BOLD               (1 << 2)
+#define MOD_HIGHLIGHTED                (1 << 3)
+#define MOD_MARKED             (1 << 4)
+#define MOD_ITALIC             (1 << 5)
+#define MOD_CURSOR             (1 << 6)
+#define MOD_INVERSE            (1 << 7)
+
+#ifndef MIDNIGHT
+#    define EDIT_TEXT_HORIZONTAL_OFFSET 4
+#    define EDIT_TEXT_VERTICAL_OFFSET 3
+#else
+#    define EDIT_TEXT_HORIZONTAL_OFFSET 0
+#    define EDIT_TEXT_VERTICAL_OFFSET 1
+#    define FONT_OFFSET_X 0
+#    define FONT_OFFSET_Y 0
+#endif
+
+#define EDIT_RIGHT_EXTREME option_edit_right_extreme
+#define EDIT_LEFT_EXTREME option_edit_left_extreme
+#define EDIT_TOP_EXTREME option_edit_top_extreme
+#define EDIT_BOTTOM_EXTREME option_edit_bottom_extreme
+
+#define MAX_MACRO_LENGTH 1024
+
+/*there are a maximum of ... */
+#define MAXBUFF 1024
+/*... edit buffers, each of which is ... */
+#define EDIT_BUF_SIZE 16384
+/* ...bytes in size. */
+
+/*x / EDIT_BUF_SIZE equals x >> ... */
+#define S_EDIT_BUF_SIZE 14
+
+/* x % EDIT_BUF_SIZE is equal to x && ... */
+#define M_EDIT_BUF_SIZE 16383
+
+#define SIZE_LIMIT (EDIT_BUF_SIZE * (MAXBUFF - 2))
+/* Note a 16k stack is 64k of data and enough to hold (usually) around 10
+   pages of undo info. */
+
+/* undo stack */
+#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 DELETE 603
+#define BACKSPACE 604
+#define STACK_BOTTOM 605
+#define CURS_LEFT_LOTS 606
+#define CURS_RIGHT_LOTS 607
+#define MARK_1 1000
+#define MARK_2 700000000
+#define KEY_PRESS 1400000000
+
+/*Tabs spaces: (sofar only HALF_TAB_SIZE is used: */
+#define TAB_SIZE               option_tab_spacing
+#define HALF_TAB_SIZE          ((int) option_tab_spacing / 2)
+
+struct macro {
+    short command;
+    short ch;
+};
+
+struct selection {
+   unsigned char * text;
+   int len;
+};
+
+
+#define RULE_CONTEXT           0x00FFF000UL
+#define RULE_CONTEXT_SHIFT     12
+#define RULE_WORD              0x00000FFFUL
+#define RULE_WORD_SHIFT                0
+#define RULE_ON_LEFT_BORDER    0x02000000UL
+#define RULE_ON_RIGHT_BORDER   0x01000000UL
+
+struct key_word {
+    char *keyword;
+    char first;
+    char last;
+    char *whole_word_chars_left;
+    char *whole_word_chars_right;
+#define NO_COLOR ((unsigned long) -1);
+    int line_start;
+    int bg;
+    int fg;
+};
+
+struct context_rule {
+    int rule_number;
+    char *left;
+    char first_left;
+    char last_left;
+    char line_start_left;
+    char *right;
+    char first_right;
+    char last_right;
+    char line_start_right;
+    int single_char;
+    int between_delimiters;
+    char *whole_word_chars_left;
+    char *whole_word_chars_right;
+    unsigned char *conflicts;
+    char *keyword_first_chars;
+    char *keyword_last_chars;
+/* first word is word[1] */
+    struct key_word **keyword;
+};
+
+
+
+struct editor_widget {
+#ifdef MIDNIGHT
+    Widget widget;
+#else
+    struct cool_widget *widget;
+#endif
+#define from_here num_widget_lines
+    int num_widget_lines;
+    int num_widget_columns;
+
+#ifdef MIDNIGHT
+    int have_frame;
+#else
+    int stopped;
+#endif
+
+    char *filename;            /* Name of the file */
+    char *dir;                 /* current directory */
+
+/* dynamic buffers and curser position for editor: */
+    long curs1;                        /*position of the cursor from the beginning of the file. */
+    long curs2;                        /*position from the end of the file */
+    unsigned char *buffers1[MAXBUFF + 1];      /*all data up to curs1 */
+    unsigned char *buffers2[MAXBUFF + 1];      /*all data from end of file down to curs2 */
+
+/* search variables */
+    long search_start;         /* First character to start searching from */
+    int found_len;             /* Length of found string or 0 if none was found */
+    long found_start;          /* the found word from a search - start position */
+
+/* display information */
+    long last_byte;            /* Last byte of file */
+    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 curser on the screen */
+    long curs_col;             /*column position on screen */
+    int force;                 /* how much of the screen do we redraw? */
+    unsigned char overwrite;
+    unsigned char modified;    /*has the file been changed?: 1 if char inserted or
+                                  deleted at all since last load or save */
+#ifdef MIDNIGHT
+    int delete_file;                   /* has the file been created in edit_load_file? Delete
+                                  it at end of editing when it hasn't been modified 
+                                  or saved */
+#endif                            
+    unsigned char highlight;
+    long prev_col;             /*recent column position of the curser - used when moving
+                                  up or down past lines that are shorter than the current line */
+    long curs_line;            /*line number of the cursor. */
+    long start_line;           /*line nummber of the top of the page */
+
+/* file info */
+    long total_lines;          /*total lines in the file */
+    long mark1;                        /*position of highlight start */
+    long mark2;                        /*position of highlight end */
+    int column1;                       /*position of column highlight start */
+    int column2;                       /*position of column highlight end */
+    long bracket;              /*position of a matching bracket */
+
+/* undo stack and pointers */
+    unsigned long stack_pointer;
+    long *undo_stack;
+    unsigned long stack_size;
+    unsigned long stack_size_mask;
+    unsigned long stack_bottom;
+    struct stat stat;
+
+/* syntax higlighting */
+    struct context_rule **rules;
+    long last_get_rule;
+    unsigned long rule;
+    char *syntax_type;         /* description of syntax highlighting type being used */
+    int explicit_syntax;       /* have we forced the syntax hi. type in spite of the filename? */
+
+    int to_here;               /* dummy marker */
+
+
+/* macro stuff */
+    int macro_i;               /* -1 if not recording index to macro[] otherwise */
+    struct macro macro[MAX_MACRO_LENGTH];
+};
+
+typedef struct editor_widget WEdit;
+
+#ifndef MIDNIGHT
+
+void edit_render_expose (WEdit * edit, XExposeEvent * xexpose);
+void edit_render_tidbits (struct cool_widget *w);
+int eh_editor (CWidget * w, XEvent * xevent, CEvent * cwevent);
+void edit_draw_menus (Window parent, int x, int y);
+void edit_run_make (void);
+void edit_change_directory (void);
+int edit_man_page_cmd (WEdit * edit);
+void edit_search_replace_dialog (Window parent, int x, int y, char **search_text, char **replace_text, char **arg_order, char *heading, int option);
+void edit_search_dialog (WEdit * edit, char **search_text);
+long edit_find (long search_start, unsigned char *exp, int *len, long last_byte, int (*get_byte) (void *, long), void *data);
+void edit_set_foreground_colors (unsigned long normal, unsigned long bold, unsigned long italic);
+void edit_set_background_colors (unsigned long normal, unsigned long abnormal, unsigned long marked, unsigned long marked_abnormal, unsigned long highlighted);
+void edit_set_cursor_color (unsigned long c);
+void draw_options_dialog (Window parent, int x, int y);
+void CRefreshEditor (WEdit * edit);
+void edit_set_user_command (void (*func) (WEdit *, int));
+void edit_draw_this_line_proportional (WEdit * edit, long b, int curs_row, int start_column, int end_column);
+unsigned char get_international_character (unsigned char key_press);
+void edit_set_user_key_function (int (*user_def_key_func) (unsigned int, unsigned int, KeySym keysym));
+
+#else
+
+int edit_drop_hotkey_menu (WEdit * e, int key);
+void edit_menu_cmd (WEdit * e);
+void edit_init_menu_emacs (void);
+void edit_init_menu_normal (void);
+void edit_done_menu (void);
+int edit_raw_key_query (char *heading, char *query, int cancel);
+char *strcasechr (const unsigned char *s, int c);
+int edit (const char *_file, int line);
+int edit_translate_key (WEdit * edit, unsigned int x_keycode, long x_key, int x_state, int *cmd, int *ch);
+
+#endif
+
+int edit_get_byte (WEdit * edit, long byte_index);
+char *edit_get_buffer_as_text (WEdit * edit);
+int edit_load_file (WEdit * edit, const char *filename, const char *text, unsigned long text_size);
+int edit_count_lines (WEdit * edit, long current, int upto);
+long edit_move_forward (WEdit * edit, long current, int lines, long upto);
+long edit_move_forward3 (WEdit * edit, long current, int cols, long upto);
+long edit_move_backward (WEdit * edit, long current, int lines);
+void edit_scroll_screen_over_cursor (WEdit * edit);
+void edit_render_keypress (WEdit * edit);
+void edit_scroll_upward (WEdit * edit, unsigned long i);
+void edit_scroll_downward (WEdit * edit, int i);
+void edit_scroll_right (WEdit * edit, int i);
+void edit_scroll_left (WEdit * edit, int i);
+int edit_get_col (WEdit * edit);
+long edit_bol (WEdit * edit, long current);
+long edit_eol (WEdit * edit, long current);
+void edit_update_curs_row (WEdit * edit);
+void edit_update_curs_col (WEdit * edit);
+
+void edit_block_copy_cmd (WEdit * edit);
+void edit_block_move_cmd (WEdit * edit);
+int edit_block_delete_cmd (WEdit * edit);
+
+int edit_delete (WEdit * edit);
+void edit_insert (WEdit * edit, int c);
+int edit_cursor_move (WEdit * edit, long increment);
+void edit_push_action (WEdit * edit, long c,...);
+void edit_push_key_press (WEdit * edit);
+void edit_insert_ahead (WEdit * edit, int c);
+int edit_save_file (WEdit * edit, const char *filename);
+int edit_save_cmd (WEdit * edit);
+int edit_save_confirm_cmd (WEdit * edit);
+int edit_save_as_cmd (WEdit * edit);
+WEdit *edit_init (WEdit * edit, int lines, int columns, const char *filename, const char *text, const char *dir, unsigned long text_size);
+int edit_clean (WEdit * edit);
+int edit_renew (WEdit * edit);
+int edit_new_cmd (WEdit * edit);
+int edit_reload (WEdit * edit, const char *filename, const char *text, const char *dir, unsigned long text_size);
+int edit_load_cmd (WEdit * edit);
+void edit_mark_cmd (WEdit * edit, int unmark);
+void edit_set_markers (WEdit * edit, long m1, long m2, int c1, int c2);
+void edit_push_markers (WEdit * edit);
+void edit_quit_cmd (WEdit * edit);
+void edit_replace_cmd (WEdit * edit, int again);
+void edit_search_cmd (WEdit * edit, int again);
+int edit_save_block_cmd (WEdit * edit);
+int edit_insert_file_cmd (WEdit * edit);
+int edit_insert_file (WEdit * edit, const char *filename);
+void edit_block_process_cmd (WEdit * edit, const char *shell_cmd, int block);
+char *catstrs (const char *first,...);
+void edit_refresh_cmd (WEdit * edit);
+void edit_date_cmd (WEdit * edit);
+void edit_goto_cmd (WEdit * edit);
+int eval_marks (WEdit * edit, long *start_mark, long *end_mark);
+void edit_status (WEdit * edit);
+int edit_execute_command (WEdit * edit, int command, int char_for_insertion);
+int edit_execute_key_command (WEdit * edit, int command, int char_for_insertion);
+void edit_update_screen (WEdit * edit);
+int edit_printf (WEdit * e, const char *fmt,...);
+int edit_print_string (WEdit * e, const char *s);
+void edit_move_to_line (WEdit * e, long line);
+void edit_move_display (WEdit * e, long line);
+void edit_word_wrap (WEdit * edit);
+unsigned char *edit_get_block (WEdit * edit, long start, long finish, int *l);
+int edit_sort_cmd (WEdit * edit);
+void edit_help_cmd (WEdit * edit);
+void edit_left_word_move (WEdit * edit);
+void edit_right_word_move (WEdit * edit);
+void edit_get_selection (WEdit * edit);
+
+int edit_save_macro_cmd (WEdit * edit, struct macro macro[], int n);
+int edit_load_macro_cmd (WEdit * edit, struct macro macro[], int *n, int k);
+void edit_delete_macro_cmd (WEdit * edit);
+
+int edit_copy_to_X_buf_cmd (WEdit * edit);
+int edit_cut_to_X_buf_cmd (WEdit * edit);
+void edit_paste_from_X_buf_cmd (WEdit * edit);
+
+void edit_paste_from_history (WEdit *edit);
+
+void edit_split_filename (WEdit * edit, char *name);
+
+#ifdef MIDNIGHT
+#define CWidget Widget
+#endif
+void edit_set_syntax_change_callback (void (*callback) (CWidget *));
+void edit_load_syntax (WEdit * edit, char **names, char *type);
+void edit_free_syntax_rules (WEdit * edit);
+void edit_get_syntax_color (WEdit * edit, long byte_index, int *fg, int *bg);
+
+
+#ifdef MIDNIGHT
+
+/* put OS2/NT/WIN95 defines here */
+
+#    ifdef OS2_NT
+#       define MY_O_TEXT O_TEXT
+#    else
+#       define MY_O_TEXT 0
+#    endif
+
+#    define FONT_PIX_PER_LINE 1
+#    define FONT_MEAN_WIDTH 1
+     
+#    define get_sys_error(s) (s)
+#    define open mc_open
+#    define close(f) mc_close(f)
+#    define read(f,b,c) mc_read(f,b,c)
+#    define write(f,b,c) mc_write(f,b,c)
+#    define stat(f,s) mc_stat(f,s)
+#    define mkdir(s,m) mc_mkdir(s,m)
+#    define itoa MY_itoa
+
+#    define edit_get_load_file(d,f,h) input_dialog (h, _(" Enter file name: "), f)
+#    define edit_get_save_file(d,f,h) input_dialog (h, _(" Enter file name: "), f)
+#    define CMalloc(x) malloc(x)
+     
+#    define set_error_msg(s) edit_init_error_msg = strdup(s)
+
+#    ifdef _EDIT_C
+
+#         define edit_error_dialog(h,s) set_error_msg(s)
+char *edit_init_error_msg = NULL;
+
+#    else                              /* ! _EDIT_C */
+
+#    define edit_error_dialog(h,s) query_dialog (h, s, 0, 1, _("&Dismiss"))
+#    define edit_message_dialog(h,s) query_dialog (h, s, 0, 1, _("&Ok"))
+extern char *edit_init_error_msg;
+
+#    endif                             /* ! _EDIT_C */
+
+
+#    define get_error_msg(s) edit_init_error_msg
+#    define edit_query_dialog2(h,t,a,b) query_dialog(h,t,0,2,a,b)
+#    define edit_query_dialog3(h,t,a,b,c) query_dialog(h,t,0,3,a,b,c)
+#    define edit_query_dialog4(h,t,a,b,c,d) query_dialog(h,t,0,4,a,b,c,d)
+
+#else                          /* ! MIDNIGHT */
+
+#    define MY_O_TEXT 0
+#    define WIN_MESSAGES edit->widget->mainid, 20, 20
+     
+#    define edit_get_load_file(d,f,h) CGetLoadFile(WIN_MESSAGES,d,f,h)
+#    define edit_get_save_file(d,f,h) CGetSaveFile(WIN_MESSAGES,d,f,h)
+#    define edit_error_dialog(h,t) CErrorDialog(WIN_MESSAGES,h,"%s",t)
+#    define edit_message_dialog(h,t) CMessageDialog(WIN_MESSAGES,0,h,"%s",t)
+#    define edit_query_dialog2(h,t,a,b) CQueryDialog(WIN_MESSAGES,h,t,a,b,0)
+#    define edit_query_dialog3(h,t,a,b,c) CQueryDialog(WIN_MESSAGES,h,t,a,b,c,0)
+#    define edit_query_dialog4(h,t,a,b,c,d) CQueryDialog(WIN_MESSAGES,h,t,a,b,c,d,0)
+
+#endif                         /* ! MIDNIGHT */
+
+extern char *home_dir;
+
+#define NUM_SELECTION_HISTORY 32
+
+#ifdef _EDIT_C
+
+struct selection selection =
+{0, 0};
+int current_selection = 0;
+/* Note: selection.text = selection_history[current_selection].text */
+struct selection selection_history[NUM_SELECTION_HISTORY] =
+{
+    {0, 0},
+    {0, 0},
+    {0, 0},
+    {0, 0},
+    {0, 0},
+    {0, 0},
+    {0, 0},
+    {0, 0},
+    {0, 0},
+    {0, 0},
+};
+
+#ifdef MIDNIGHT
+/*
+   what editor are we going to emulate? one of EDIT_KEY_EMULATION_NORMAL
+   or EDIT_KEY_EMULATION_EMACS
+ */
+int edit_key_emulation = EDIT_KEY_EMULATION_NORMAL;
+#endif /* ! MIDNIGHT */
+
+int option_word_wrap_line_length = 72;
+int option_typewriter_wrap = 0;
+int option_auto_para_formatting = 0;
+int option_international_characters = 0;
+int option_tab_spacing = 8;
+int option_fill_tabs_with_spaces = 0;
+int option_return_does_auto_indent = 1;
+int option_backspace_through_tabs = 0;
+int option_fake_half_tabs = 1;
+int option_save_mode = 0;
+int option_backup_ext_int = -1;
+int option_find_bracket = 1;
+int option_max_undo = 8192;
+
+int option_editor_fg_normal = 26;
+int option_editor_fg_bold = 8;
+int option_editor_fg_italic = 10;
+
+int option_edit_right_extreme = 0;
+int option_edit_left_extreme = 0;
+int option_edit_top_extreme = 0;
+int option_edit_bottom_extreme = 0;
+
+int option_editor_bg_normal = 1;
+int option_editor_bg_abnormal = 0;
+int option_editor_bg_marked = 2;
+int option_editor_bg_marked_abnormal = 9;
+int option_editor_bg_highlighted = 12;
+int option_editor_fg_cursor = 18;
+
+char *option_whole_chars_search = "0123456789abcdefghijklmnopqrstuvwxyz_";
+char *option_whole_chars_move = "0123456789abcdefghijklmnopqrstuvwxyz_; ,[](){}";
+char *option_backup_ext = "~";
+
+#else                          /* ! _EDIT_C */
+
+extern struct selection selection;
+extern struct selection selection_history[];
+extern int current_selection;
+
+#ifdef MIDNIGHT
+/*
+   what editor are we going to emulate? one of EDIT_KEY_EMULATION_NORMAL
+   or EDIT_KEY_EMULATION_EMACS
+ */
+extern int edit_key_emulation;
+#endif /* ! MIDNIGHT */
+
+extern int option_word_wrap_line_length;
+extern int option_typewriter_wrap;
+extern int option_auto_para_formatting;
+extern int option_international_characters;
+extern int option_tab_spacing;
+extern int option_fill_tabs_with_spaces;
+extern int option_return_does_auto_indent;
+extern int option_backspace_through_tabs;
+extern int option_fake_half_tabs;
+extern int option_save_mode;
+extern int option_backup_ext_int;
+extern int option_find_bracket;
+extern int option_max_undo;
+
+extern int option_editor_fg_normal;
+extern int option_editor_fg_bold;
+extern int option_editor_fg_italic;
+
+extern int option_edit_right_extreme;
+extern int option_edit_left_extreme;
+extern int option_edit_top_extreme;
+extern int option_edit_bottom_extreme;
+
+extern int option_editor_bg_normal;
+extern int option_editor_bg_abnormal;
+extern int option_editor_bg_marked;
+extern int option_editor_bg_marked_abnormal;
+extern int option_editor_bg_highlighted;
+extern int option_editor_fg_cursor;
+
+extern char *option_whole_chars_search;
+extern char *option_whole_chars_move;
+extern char *option_backup_ext;
+
+extern int edit_confirm_save;
+
+#endif                         /* ! _EDIT_C */
+#endif                                 /* __EDIT_H */
diff --git a/rosapps/mc/edit/edit_key_translator.c b/rosapps/mc/edit/edit_key_translator.c
new file mode 100644 (file)
index 0000000..068a21a
--- /dev/null
@@ -0,0 +1,294 @@
+/*
+    these #defines are probably the ones most people will be interested in.
+    You can use these two #defines to hard code the key mappings --- just
+    uncomment the one you want. But only if you have trouble with learn
+    keys (which is unlikely).
+*/
+
+    /* KEY_BACKSPACE is the key learned in the learn keys menu : */
+#define OUR_BACKSPACE_KEY KEY_BACKSPACE
+    /* ...otherwise ctrl-h : */
+/* #define OUR_BACKSPACE_KEY XCTRL ('h') */
+    /* ...otherwise 127 or DEL in ascii : */
+/* #define OUR_BACKSPACE_KEY 0177 */
+
+    /* KEY_DC is the key learned in the learn keys menu */
+#define OUR_DELETE_KEY KEY_DC
+    /* ...otherwise ctrl-d : */
+/* #define OUR_DELETE_KEY XCTRL ('d') */
+    /* ...otherwise 127 or DEL in ascii : */
+/* #define OUR_DELETE_KEY 0177 */
+
+
+/*
+   This is #include'd into the function edit_translate_key in edit.c.
+   This sequence of code takes 'x_state' and 'x_key' and translates them
+   into either 'command' or 'char_for_insertion'. 'x_key' holds one of
+   KEY_NPAGE, KEY_HOME etc., and 'x_state' holds a bitwise inclusive OR of
+   CONTROL_PRESSED, ALT_PRESSED or SHIFT_PRESSED, although none may
+   be supported.
+   'command' is one of the editor commands editcmddef.h.
+
+   Almost any C code can go into this file. The code below is an example
+   that may by appended or modified by the user.
+ */
+
+/* look in this file for the list of commands : */
+#include "editcmddef.h"
+
+#define KEY_NUMLOCK ???
+
+/* ordinary translations. (Some of this may be redundant.) Note that keys listed
+   first take priority when a key is assigned to more than one command */
+    static long *key_map;
+    static long cooledit_key_map[] =
+    {OUR_BACKSPACE_KEY, CK_BackSpace, OUR_DELETE_KEY, CK_Delete,
+     XCTRL ('d'), CK_Delete, '\n', CK_Enter,
+     KEY_PPAGE, CK_Page_Up, KEY_NPAGE, CK_Page_Down, KEY_LEFT, CK_Left,
+     KEY_RIGHT, CK_Right, KEY_UP, CK_Up, KEY_DOWN, CK_Down, ALT ('\t'), CK_Return, ALT ('\n'), CK_Return,
+     KEY_HOME, CK_Home, KEY_END, CK_End, '\t', CK_Tab, XCTRL ('u'), CK_Undo, KEY_IC, CK_Toggle_Insert,
+     XCTRL ('o'), CK_Load, KEY_F (3), CK_Mark, KEY_F (5), CK_Copy,
+     KEY_F (6), CK_Move, KEY_F (8), CK_Remove, KEY_F (12), CK_Save_As,
+     KEY_F (2), CK_Save, XCTRL ('n'), CK_New,
+     XCTRL ('l'), CK_Refresh, ESC_CHAR, CK_Exit, KEY_F (10), CK_Exit,
+     KEY_F (19), /*C formatter */ CK_Pipe_Block (0),
+     XCTRL ('p'), /*spell check */ CK_Pipe_Block (1),
+     KEY_F (15), CK_Insert_File,
+     XCTRL ('f'), CK_Save_Block, KEY_F (1), CK_Help,
+     ALT ('t'), CK_Sort, ALT ('m'), CK_Mail,
+     XCTRL ('z'), CK_Word_Left, XCTRL ('x'), CK_Word_Right,
+     KEY_F (4), CK_Replace, KEY_F (7), CK_Find, KEY_F (14), CK_Replace_Again,
+     XCTRL ('h'), CK_BackSpace, ALT ('l'), CK_Goto, ALT ('L'), CK_Goto, XCTRL ('y'), CK_Delete_Line,
+     KEY_F (17), CK_Find_Again, ALT ('p'), CK_Paragraph_Format, 0};
+
+    static long emacs_key_map[] =
+    {OUR_BACKSPACE_KEY, CK_BackSpace, OUR_DELETE_KEY, CK_Delete, '\n', CK_Enter,
+     KEY_PPAGE, CK_Page_Up, KEY_NPAGE, CK_Page_Down, KEY_LEFT, CK_Left,
+     KEY_RIGHT, CK_Right, KEY_UP, CK_Up, KEY_DOWN, CK_Down, ALT ('\t'), CK_Return, ALT ('\n'), CK_Return,
+     KEY_HOME, CK_Home, KEY_END, CK_End, '\t', CK_Tab, XCTRL ('u'), CK_Undo, KEY_IC, CK_Toggle_Insert,
+     XCTRL ('o'), CK_Load, KEY_F (3), CK_Mark, KEY_F (5), CK_Copy,
+     KEY_F (6), CK_Move, KEY_F (8), CK_Remove, KEY_F (12), CK_Save_As,
+     KEY_F (2), CK_Save, ALT ('p'), CK_Paragraph_Format,
+
+     ALT ('t'), CK_Sort,
+
+     XCTRL ('a'), CK_Home, XCTRL ('e'), CK_End,
+     XCTRL ('b'), CK_Left, XCTRL ('f'), CK_Right,
+     XCTRL ('n'), CK_Down, XCTRL ('p'), CK_Up,
+     XCTRL ('d'), CK_Delete,
+     XCTRL ('v'), CK_Page_Down, ALT ('v'), CK_Page_Up,
+     XCTRL ('@'), CK_Mark,
+     XCTRL ('k'), CK_Delete_To_Line_End,
+     XCTRL ('s'), CK_Find,
+
+     ALT ('b'), CK_Word_Left, ALT ('f'), CK_Word_Right,
+     XCTRL ('w'), CK_XCut,
+     XCTRL ('y'), CK_XPaste,
+     ALT ('w'), CK_XStore,
+
+     XCTRL ('l'), CK_Refresh, ESC_CHAR, CK_Exit, KEY_F (10), CK_Exit,
+     KEY_F (19), /*C formatter */ CK_Pipe_Block (0),
+     ALT ('$'), /*spell check */ CK_Pipe_Block (1),
+     KEY_F (15), CK_Insert_File,
+     KEY_F (1), CK_Help,
+
+     KEY_F (4), CK_Replace, KEY_F (7), CK_Find, KEY_F (14), CK_Replace_Again,
+     XCTRL ('h'), CK_BackSpace, ALT ('l'), CK_Goto, ALT ('L'), CK_Goto,
+     KEY_F (17), CK_Find_Again,
+     ALT ('<'), CK_Beginning_Of_Text,
+     ALT ('>'), CK_End_Of_Text,
+     
+     0, 0};
+
+    static long key_pad_map[10] =
+    {XCTRL ('o'), KEY_END, KEY_DOWN, KEY_NPAGE, KEY_LEFT,
+     KEY_DOWN, KEY_RIGHT, KEY_HOME, KEY_UP, KEY_PPAGE};
+
+
+#define DEFAULT_NUM_LOCK        0
+
+    static int num_lock = DEFAULT_NUM_LOCK;
+    int i = 0;
+
+    switch (edit_key_emulation) {
+    case EDIT_KEY_EMULATION_NORMAL:
+       key_map = cooledit_key_map;
+       break;
+    case EDIT_KEY_EMULATION_EMACS:
+       key_map = emacs_key_map;
+       if (x_key == XCTRL ('x')) {
+           int ext_key;
+           ext_key = edit_raw_key_query (" Ctrl-X ", _(" Emacs key: "), 0);
+           switch (ext_key) {
+           case 's':
+               command = CK_Save;
+               goto fin;
+           case 'x':
+               command = CK_Exit;
+               goto fin;
+           case 'k':
+               command = CK_New;
+               goto fin;
+           case 'e':
+               command = CK_Macro (edit_raw_key_query (_(" Execute Macro "), _(" Press macro hotkey: "), 1));
+               if (command == CK_Macro (0))
+                   command = -1;
+               goto fin;
+           }
+           goto fin;
+       }
+       break;
+    }
+
+    if (x_key == XCTRL ('q')) {
+       char_for_insertion = edit_raw_key_query (_(" Insert Literal "), _(" Press any key: "), 0);
+       goto fin;
+    }
+    if (x_key == XCTRL ('a') && edit_key_emulation != EDIT_KEY_EMULATION_EMACS) {
+       command = CK_Macro (edit_raw_key_query (" Execute Macro ", " Press macro hotkey: ", 1));
+       if (command == CK_Macro (0))
+           command = -1;
+       goto fin;
+    }
+/* edit is a pointer to the widget */
+    if (edit)
+       if (x_key == XCTRL ('r')) {
+           command = edit->macro_i < 0 ? CK_Begin_Record_Macro : CK_End_Record_Macro;
+           goto fin;
+       }
+/*    if (x_key == KEY_NUMLOCK) {
+   num_lock = 1 - num_lock;
+   return 1;
+   }
+ */
+
+/* first translate the key-pad */
+    if (num_lock) {
+       if (x_key >= '0' && x_key <= '9') {
+           x_key = key_pad_map[x_key - '0'];
+       }
+       if (x_key == '.') {
+           x_key = KEY_DC;
+       }
+    }
+    if ((x_state & SHIFT_PRESSED) && (x_state & CONTROL_PRESSED)) {
+       switch (x_key) {
+       case KEY_PPAGE:
+           command = CK_Beginning_Of_Text_Highlight;
+           goto fin;
+       case KEY_NPAGE:
+           command = CK_End_Of_Text_Highlight;
+           goto fin;
+       case KEY_LEFT:
+           command = CK_Word_Left_Highlight;
+           goto fin;
+       case KEY_RIGHT:
+           command = CK_Word_Right_Highlight;
+           goto fin;
+       }
+    }
+    if ((x_state & SHIFT_PRESSED) && !(x_state & CONTROL_PRESSED)) {
+       switch (x_key) {
+       case KEY_PPAGE:
+           command = CK_Page_Up_Highlight;
+           goto fin;
+       case KEY_NPAGE:
+           command = CK_Page_Down_Highlight;
+           goto fin;
+       case KEY_LEFT:
+           command = CK_Left_Highlight;
+           goto fin;
+       case KEY_RIGHT:
+           command = CK_Right_Highlight;
+           goto fin;
+       case KEY_UP:
+           command = CK_Up_Highlight;
+           goto fin;
+       case KEY_DOWN:
+           command = CK_Down_Highlight;
+           goto fin;
+       case KEY_HOME:
+           command = CK_Home_Highlight;
+           goto fin;
+       case KEY_END:
+           command = CK_End_Highlight;
+           goto fin;
+       case KEY_IC:
+           command = CK_XPaste;
+           goto fin;
+       case KEY_DC:
+           command = CK_XCut;
+           goto fin;
+       }
+    }
+/* things that need a control key */
+    if (x_state & CONTROL_PRESSED) {
+       switch (x_key) {
+       case KEY_F (2):
+           command = CK_Save_As;
+           goto fin;
+       case KEY_F (4):
+           command = CK_Replace_Again;
+           goto fin;
+       case KEY_F (7):
+           command = CK_Find_Again;
+           goto fin;
+       case KEY_BACKSPACE:
+           command = CK_Undo;
+           goto fin;
+       case KEY_PPAGE:
+           command = CK_Beginning_Of_Text;
+           goto fin;
+       case KEY_NPAGE:
+           command = CK_End_Of_Text;
+           goto fin;
+       case KEY_UP:
+           command = CK_Scroll_Up;
+           goto fin;
+       case KEY_DOWN:
+           command = CK_Scroll_Down;
+           goto fin;
+       case KEY_LEFT:
+           command = CK_Word_Left;
+           goto fin;
+       case KEY_RIGHT:
+           command = CK_Word_Right;
+           goto fin;
+       case KEY_IC:
+           command = CK_XStore;
+           goto fin;
+       case KEY_DC:
+           command = CK_Remove;
+           goto fin;
+       }
+    }
+/* an ordinary insertable character */
+    if (x_key < 256 && is_printable (x_key)) {
+       char_for_insertion = x_key;
+       goto fin;
+    }
+/* other commands */
+    i = 0;
+    while (key_map[i] != x_key && (key_map[i] || key_map[i + 1]))
+       i += 2;
+    command = key_map[i + 1];
+    if (command)
+       goto fin;
+
+/* Function still not found for this key, so try macro's */
+/* This allows the same macro to be 
+   enabled by either eg "ALT('f')" or "XCTRL('f')" or "XCTRL('a'), 'f'" */
+
+/* key.h: #define ALT(x) (0x200 | (x)) */
+    if (x_key & ALT (0)) {     /* is an alt key ? */
+       command = CK_Macro (x_key - ALT (0));
+       goto fin;
+    }
+/* key.h: #define XCTRL(x) ((x) & 31) */
+    if (x_key < ' ') {         /* is a ctrl key ? */
+       command = CK_Macro (x_key);
+       goto fin;
+    }
+  fin:
+
+
diff --git a/rosapps/mc/edit/editcmd.c b/rosapps/mc/edit/editcmd.c
new file mode 100644 (file)
index 0000000..7e846ad
--- /dev/null
@@ -0,0 +1,2541 @@
+/* editor high level editing commands.
+
+   Copyright (C) 1996, 1997 the Free Software Foundation
+
+   Authors: 1996, 1997 Paul Sheer
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* #define PIPE_BLOCKS_SO_READ_BYTE_BY_BYTE */
+
+#include <config.h>
+#ifdef OS2_NT
+#include <io.h>
+#include <fcntl.h>
+#endif
+#include <ctype.h>
+#include "edit.h"
+#include "editcmddef.h"
+
+#ifndef MIDNIGHT
+#include <X11/Xatom.h>
+#include "loadfile.h"
+#endif
+
+/* globals: */
+
+/* search and replace: */
+int replace_scanf = 0;
+int replace_regexp = 0;
+int replace_all = 0;
+int replace_prompt = 1;
+int replace_whole = 0;
+int replace_case = 0;
+int replace_backwards = 0;
+
+/* queries on a save */
+#ifdef MIDNIGHT
+int edit_confirm_save = 1;
+#else
+int edit_confirm_save = 0;
+#endif
+
+#define NUM_REPL_ARGS 16
+#define MAX_REPL_LEN 1024
+
+#ifdef MIDNIGHT
+
+static inline int my_lower_case (int c)
+{
+    return tolower(c);
+}
+
+char *strcasechr (const unsigned char *s, int c)
+{
+    for (; my_lower_case ((int) *s) != my_lower_case (c); ++s)
+       if (*s == '\0')
+           return 0;
+    return (char *) s;
+}
+
+
+#include "../src/mad.h"
+
+#ifndef HAVE_MEMMOVE
+/* for Christophe */
+static void *memmove (void *dest, const void *src, size_t n)
+{
+    char *t, *s;
+
+    if (dest <= src) {
+       t = (char *) dest;
+       s = (char *) src;
+       while (n--)
+           *t++ = *s++;
+    } else {
+       t = (char *) dest + n;
+       s = (char *) src + n;
+       while (n--)
+           *--t = *--s;
+    }
+    return dest;
+}
+#endif
+
+/* #define itoa MY_itoa  <---- this line is now in edit.h */
+char *itoa (int i)
+{
+    static char t[14];
+    char *s = t + 13;
+    int j = i;
+    *s-- = 0;
+    do {
+       *s-- = i % 10 + '0';
+    } while ((i = i / 10));
+    if (j < 0)
+       *s-- = '-';
+    return ++s;
+}
+
+/*
+   This joins strings end on end and allocates memory for the result.
+   The result is later automatically free'd and must not be free'd
+   by the caller.
+ */
+char *catstrs (const char *first,...)
+{
+    static char *stacked[16] =
+    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+    static int i = 0;
+    va_list ap;
+    int len;
+    char *data;
+
+    if (!first)
+       return 0;
+
+    len = strlen (first);
+    va_start (ap, first);
+
+    while ((data = va_arg (ap, char *)) != 0)
+        len += strlen (data);
+
+    len++;
+
+    i = (i + 1) % 16;
+    if (stacked[i])
+       free (stacked[i]);
+
+    stacked[i] = malloc (len);
+    va_end (ap);
+    va_start (ap, first);
+    strcpy (stacked[i], first);
+    while ((data = va_arg (ap, char *)) != 0)
+        strcat (stacked[i], data);
+    va_end (ap);
+
+    return stacked[i];
+}
+#endif
+
+#ifdef MIDNIGHT
+
+void edit_help_cmd (WEdit * edit)
+{
+    char *hlpdir = concat_dir_and_file (mc_home, "mc.hlp");
+    interactive_display (hlpdir, "[Internal File Editor]");
+    free (hlpdir);
+    edit->force |= REDRAW_COMPLETELY;
+}
+
+void edit_refresh_cmd (WEdit * edit)
+{
+#ifndef HAVE_SLANG
+    clr_scr();
+    do_refresh();
+#else
+    {
+       int fg, bg;
+       edit_get_syntax_color (edit, -1, &fg, &bg);
+    }
+    touchwin(stdscr);
+#endif
+    mc_refresh();
+    doupdate();
+}
+
+#else
+
+void edit_help_cmd (WEdit * edit)
+{
+}
+
+void edit_refresh_cmd (WEdit * edit)
+{
+}
+
+void CRefreshEditor (WEdit * edit)
+{
+    edit_refresh_cmd (edit);
+}
+
+#endif
+
+#ifndef MIDNIGHT
+
+/* three argument open */
+int my_open (const char *pathname, int flags,...)
+{
+    int file;
+    va_list ap;
+
+    file = open ((char *) pathname, O_RDONLY);
+    if (file < 0 && (flags & O_CREAT)) {       /* must it be created ? */
+       mode_t mode;
+       va_start(ap, flags);
+       mode = va_arg(ap, mode_t);
+       va_end(ap);
+       return creat ((char *) pathname, mode);
+    }
+    close (file);
+    return open ((char *) pathname, flags);
+}
+
+#define open my_open
+
+#endif
+
+/* "Oleg Yu. Repin" <repin@ssd.sscc.ru> added backup filenames
+    ...thanks -paul */
+
+/*  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 */
+int edit_save_file (WEdit * edit, const char *filename)
+{
+    long buf;
+    long filelen = 0;
+    int file;
+    char *savename = (char *) filename;
+    int this_save_mode;
+
+    if ((file = open (savename, O_WRONLY)) == -1) {
+       this_save_mode = 0;             /* the file does not exists yet, so no safe save or backup necessary */
+    } else {
+       close (file);
+       this_save_mode = option_save_mode;
+    }
+
+    if (this_save_mode > 0) {
+       char *savedir = ".", *slashpos = strrchr (filename, '/');
+       if (slashpos != 0) {
+           savedir = strdup (filename);
+           if (savedir == 0)
+               return 0;
+           savedir[slashpos - filename + 1] = '\0';
+       }
+#ifdef HAVE_MAD
+       savename = strdup (tempnam (savedir, "cooledit"));
+#else
+       savename = tempnam (savedir, "cooledit");
+#endif
+       if (slashpos)
+           free (savedir);
+       if (!savename)
+           return 0;
+    }
+    if ((file = open (savename, O_CREAT | O_WRONLY | O_TRUNC | MY_O_TEXT, edit->stat.st_mode)) == -1) {
+       if (this_save_mode > 0)
+           free (savename);
+       return 0;
+    }
+    chown (savename, edit->stat.st_uid, edit->stat.st_gid);
+    buf = 0;
+    while (buf <= (edit->curs1 >> S_EDIT_BUF_SIZE) - 1) {
+       filelen += write (file, (char *) edit->buffers1[buf], EDIT_BUF_SIZE);
+       buf++;
+    }
+    filelen += write (file, (char *) edit->buffers1[buf], edit->curs1 & M_EDIT_BUF_SIZE);
+
+    if (edit->curs2) {
+       edit->curs2--;
+       buf = (edit->curs2 >> S_EDIT_BUF_SIZE);
+       filelen += write (file, (char *) edit->buffers2[buf] + EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE) - 1, 1 + (edit->curs2 & M_EDIT_BUF_SIZE));
+       buf--;
+       while (buf >= 0) {
+           filelen += write (file, (char *) edit->buffers2[buf], EDIT_BUF_SIZE);
+           buf--;
+       }
+       edit->curs2++;
+    }
+    close (file);
+
+    if (filelen == edit->last_byte) {
+       if (this_save_mode == 2) {
+           if (rename (filename, catstrs (filename, option_backup_ext, 0)) == -1) {    /* catstrs free's automatically */
+               free (savename);
+               return 0;
+           }
+       }
+       if (this_save_mode > 0) {
+           if (rename (savename, filename) == -1) {
+               free (savename);
+               return 0;
+           }
+           free (savename);
+       }
+       return 1;
+    } else {
+       if (this_save_mode > 0)
+           free (savename);
+       return 0;
+    }
+}
+
+#ifdef MIDNIGHT
+/*
+   I changed this from Oleg's original routine so
+   that option_backup_ext works with coolwidgets as well. This
+   does mean there is a memory leak - paul.
+ */
+void menu_save_mode_cmd (void)
+{
+#define DLG_X 36
+#define DLG_Y 10
+    static char *str_result;
+    static int save_mode_new;
+    static char *str[] =
+    {
+       "Quick save ",
+       "Safe save ",
+       "Do backups -->"};
+    static QuickWidget widgets[] =
+    {
+       {quick_button, 18, DLG_X, 7, DLG_Y, "&Cancel", 0,
+        B_CANCEL, 0, 0, XV_WLAY_DONTCARE, "c"},
+       {quick_button, 6, DLG_X, 7, DLG_Y, "&Ok", 0,
+        B_ENTER, 0, 0, XV_WLAY_DONTCARE, "o"},
+       {quick_input, 23, DLG_X, 5, DLG_Y, 0, 9,
+        0, 0, &str_result, XV_WLAY_DONTCARE, "i"},
+       {quick_label, 22, DLG_X, 4, DLG_Y, "Extension:", 0,
+        0, 0, 0, XV_WLAY_DONTCARE, "savemext"},
+       {quick_radio, 4, DLG_X, 3, DLG_Y, "", 3,
+        0, &save_mode_new, str, XV_WLAY_DONTCARE, "t"},
+       {0}};
+    static QuickDialog dialog =
+/* NLS ? */
+    {DLG_X, DLG_Y, -1, -1, " Edit Save Mode ", "[Edit Save Mode]",
+     "esm", widgets};
+
+    widgets[2].text = option_backup_ext;
+    widgets[4].value = option_save_mode;
+    if (quick_dialog (&dialog) != B_ENTER)
+       return;
+    option_save_mode = save_mode_new;
+    option_backup_ext = str_result;    /* this is a memory leak */
+    option_backup_ext_int = 0;
+    str_result[min (strlen (str_result), sizeof (int))] = '\0';
+    memcpy ((char *) &option_backup_ext_int, str_result, strlen (option_backup_ext));
+}
+
+#endif
+
+#ifdef MIDNIGHT
+
+void edit_split_filename (WEdit * edit, char *f)
+{
+    if (edit->filename)
+       free (edit->filename);
+    edit->filename = strdup (f);
+    if (edit->dir)
+       free (edit->dir);
+    edit->dir = strdup ("");
+}
+
+#else
+
+void edit_split_filename (WEdit * edit, char *longname)
+{
+    char *exp, *p;
+    exp = canonicalize_pathname (longname);    /* this ensures a full path */
+    if (edit->filename)
+       free (edit->filename);
+    if (edit->dir)
+       free (edit->dir);
+    p = strrchr (exp, '/');
+    edit->filename = strdup (++p);
+    *p = 0;
+    edit->dir = strdup (exp);
+    free (exp);
+}
+
+#endif
+
+/*  here we want to warn the user of overwriting an existing file, but only if they
+   have made a change to the filename */
+/* returns 1 on success */
+int edit_save_as_cmd (WEdit * edit)
+{
+/* This heads the 'Save As' dialog box */
+    char *exp = edit_get_save_file (edit->dir, edit->filename, _(" Save As "));
+    int different_filename = 0;
+    edit_push_action (edit, KEY_PRESS + edit->start_display);
+    edit->force |= REDRAW_COMPLETELY;
+
+    if (exp) {
+       if (!*exp) {
+           free (exp);
+           return 0;
+       } else {
+           if (strcmp(catstrs (edit->dir, edit->filename, 0), exp)) {
+               int file;
+               different_filename = 1;
+               if ((file = open ((char *) exp, O_RDONLY)) != -1) {     /* the file exists */
+                   close (file);
+                   if (edit_query_dialog2 (_(" Warning "), 
+                   _(" A file already exists with this name. "), 
+/* Push buttons to over-write the current file, or cancel the operation */
+                   _("Overwrite"), _("Cancel")))
+                       return 0;
+               }
+           }
+           if (edit_save_file (edit, exp)) {
+               edit_split_filename (edit, exp);
+               free (exp);
+               edit->modified = 0;
+#ifdef MIDNIGHT
+               edit->delete_file = 0;
+#endif         
+               if (different_filename && !edit->explicit_syntax)
+                   edit_load_syntax (edit, 0, 0);
+               return 1;
+           } else {
+               free (exp);
+               edit_error_dialog (_(" Save as "), get_sys_error (_(" Error trying to save file. ")));
+               return 0;
+           }
+       }
+    } else
+       return 0;
+}
+
+/* {{{ Macro stuff starts here */
+
+#ifdef MIDNIGHT
+int raw_callback (struct Dlg_head *h, int key, int Msg)
+{
+    switch (Msg) {
+    case DLG_DRAW:
+       attrset (REVERSE_COLOR);
+       dlg_erase (h);
+       draw_box (h, 1, 1, h->lines - 2, h->cols - 2);
+
+       attrset (COLOR_HOT_NORMAL);
+       dlg_move (h, 1, 2);
+       printw (h->title);
+       break;
+
+    case DLG_KEY:
+       h->running = 0;
+       h->ret_value = key;
+       return 1;
+    }
+    return 0;
+}
+
+/* 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 */
+int edit_raw_key_query (char *heading, char *query, int cancel)
+{
+    int w = strlen (query) + 7;
+    struct Dlg_head *raw_dlg = create_dlg (0, 0, 7, w, dialog_colors,
+/* NLS ? */
+                                        raw_callback, "[Raw Key Query]",
+                                          "raw_key_input",
+                                          DLG_CENTER | DLG_TRYUP);
+    x_set_dialog_title (raw_dlg, heading);
+    raw_dlg->raw = 1;          /* to return even a tab key */
+    if (cancel)
+       add_widget (raw_dlg, button_new (4, w / 2 - 5, B_CANCEL, NORMAL_BUTTON, "Cancel", 0, 0, 0));
+    add_widget (raw_dlg, label_new (3 - cancel, 2, query, 0));
+    add_widget (raw_dlg, input_new (3 - cancel, w - 5, INPUT_COLOR, 2, "", 0));
+    run_dlg (raw_dlg);
+    w = raw_dlg->ret_value;
+    destroy_dlg (raw_dlg);
+    if (cancel)
+       if (w == XCTRL ('g') || w == XCTRL ('c') || w == ESC_CHAR || w == B_CANCEL)
+           return 0;
+/* hence ctrl-a (=B_CANCEL), ctrl-g, ctrl-c, and Esc are cannot returned */
+    return w;
+}
+
+#else
+
+int edit_raw_key_query (char *heading, char *query, int cancel)
+{
+    return CKeySymMod (CRawkeyQuery (0, 0, 0, heading, query));
+}
+
+#endif
+
+/* creates a macro file if it doesn't exist */
+static FILE *edit_open_macro_file (const char *r)
+{
+    char *filename;
+    int file;
+    filename = catstrs (home_dir, MACRO_FILE, 0);
+    if ((file = open (filename, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) == -1)
+       return 0;
+    close (file);
+    return fopen (filename, r);
+}
+
+#define MAX_MACROS 1024
+static int saved_macro[MAX_MACROS + 1] =
+{0, 0};
+static int saved_macros_loaded = 0;
+
+/*
+   This is just to stop the macro file be loaded over and over for keys
+   that aren't defined to anything. On slow systems this could be annoying.
+ */
+int macro_exists (int k)
+{
+    int i;
+    for (i = 0; i < MAX_MACROS && saved_macro[i]; i++)
+       if (saved_macro[i] == k)
+           return i;
+    return -1;
+}
+
+/* returns 1 on error */
+int edit_delete_macro (WEdit * edit, int k)
+{
+    struct macro macro[MAX_MACRO_LENGTH];
+    FILE *f, *g;
+    int s, i, n, j = 0;
+
+    if (saved_macros_loaded)
+       if ((j = macro_exists (k)) < 0)
+           return 0;
+    g = fopen (catstrs (home_dir, TEMP_FILE, 0), "w");
+    if (!g) {
+/* This heads the delete macro error dialog box */
+       edit_error_dialog (_(" Delete macro "),
+/* 'Open' = load temp file */
+                get_sys_error (_(" Error trying to open temp file ")));
+       return 1;
+    }
+    f = edit_open_macro_file ("r");
+    if (!f) {
+/* This heads the delete macro error dialog box */
+       edit_error_dialog (_(" Delete macro "),
+/* 'Open' = load temp file */
+               get_sys_error (_(" Error trying to open macro file ")));
+       fclose (g);
+       return 1;
+    }
+    for (;;) {
+       n = fscanf (f, _("key '%d 0': "), &s);
+       if (!n || n == EOF)
+           break;
+       n = 0;
+       while (fscanf (f, "%hd %hd, ", &macro[n].command, &macro[n].ch))
+           n++;
+       fscanf (f, ";\n");
+       if (s != k) {
+           fprintf (g, _("key '%d 0': "), s);
+           for (i = 0; i < n; i++)
+               fprintf (g, "%hd %hd, ", macro[i].command, macro[i].ch);
+           fprintf (g, ";\n");
+       }
+    };
+    fclose (f);
+    fclose (g);
+    if (rename (catstrs (home_dir, TEMP_FILE, 0), catstrs (home_dir, MACRO_FILE, 0)) == -1) {
+/* This heads the delete macro error dialog box */
+       edit_error_dialog (_(" Delete macro "),
+          get_sys_error (_(" Error trying to overwrite macro file ")));
+       return 1;
+    }
+    if (saved_macros_loaded)
+       memmove (saved_macro + j, saved_macro + j + 1, sizeof (int) * (MAX_MACROS - j - 1));
+    return 0;
+}
+
+/* returns 0 on error */
+int edit_save_macro_cmd (WEdit * edit, struct macro macro[], int n)
+{
+    FILE *f;
+    int s, i;
+
+    edit->force |= REDRAW_COMPLETELY;
+    edit_push_action (edit, KEY_PRESS + edit->start_display);
+/* This heads the 'Macro' dialog box */
+    s = edit_raw_key_query (_(" Macro "),
+/* Input line for a single key press follows the ':' */
+    _(" Press the macro's new hotkey: "), 1);
+    if (s) {
+       if (edit_delete_macro (edit, s))
+           return 0;
+       f = edit_open_macro_file ("a+");
+       if (f) {
+           fprintf (f, _("key '%d 0': "), s);
+           for (i = 0; i < n; i++)
+               fprintf (f, "%hd %hd, ", macro[i].command, macro[i].ch);
+           fprintf (f, ";\n");
+           fclose (f);
+           if (saved_macros_loaded) {
+               for (i = 0; i < MAX_MACROS && saved_macro[i]; i++);
+               saved_macro[i] = s;
+           }
+           return 1;
+       } else
+/* This heads the 'Save Macro' dialog box */
+           edit_error_dialog (_(" Save macro "), get_sys_error (_(" Error trying to open macro file ")));
+    }
+    return 0;
+}
+
+void edit_delete_macro_cmd (WEdit * edit)
+{
+    int command;
+
+#ifdef MIDNIGHT
+    command = CK_Macro (edit_raw_key_query (_(" Delete Macro "), _(" Press macro hotkey: "), 1));
+#else
+/* This heads the 'Delete Macro' dialog box */
+    command = CK_Macro (CKeySymMod (CRawkeyQuery (0, 0, 0, _(" Delete Macro "), 
+/* Input line for a single key press follows the ':' */
+    _(" Press macro hotkey: "))));
+#endif
+
+    if (command == CK_Macro (0))
+       return;
+
+    edit_delete_macro (edit, command - 2000);
+}
+
+/* return 0 on error */
+int edit_load_macro_cmd (WEdit * edit, struct macro macro[], int *n, int k)
+{
+    FILE *f;
+    int s, i = 0, found = 0;
+
+    if (saved_macros_loaded)
+       if (macro_exists (k) < 0)
+           return 0;
+
+    if ((f = edit_open_macro_file ("r"))) {
+       struct macro dummy;
+       do {
+           int u;
+           u = fscanf (f, _("key '%d 0': "), &s);
+           if (!u || u == EOF)
+               break;
+           if (!saved_macros_loaded)
+               saved_macro[i++] = s;
+           if (!found) {
+               *n = 0;
+               while (*n < MAX_MACRO_LENGTH && 2 == fscanf (f, "%hd %hd, ", &macro[*n].command, &macro[*n].ch))
+                   (*n)++;
+           } else {
+   &nbs