
Midnight Commander for Windows NT
---------------------------------

0. Hello
1. Compiling
2. Changes made
3. Windows '95

0. Hello
--------
Hello, this is the Midnight Commander port to Windows NT. It is still an ALPHA
version, with a lot of work to be done. Maybe you can help as an "alpha" 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 version 1.1 was used. The provided makefile
is for the visual IDE. As this is just for developing, it's not yet important
to write an "external" makefile.

During some early stage I also tried Watcom C/C++ 10.0, but finally abandoned
it. The trouble with Watcom was that the IDE complained about the longnames
(e.g. chmod.nt.c) and debugging was not much comfortable. Anyway if anybody
is iterested in supporting Watcom, it's just writing a makefile and migrating
some code in dirent.c (as Watcom already provides opendir/readdir/closedir).
We can benefit with its optimization features. 
Anyway, I think code is quite ANSI. Please contact me if you would like support 
for another compiler brand.

1.2. General issues
--------------------
Preprocessor
	Define:
		LIBDIR
		_OS_NT		-  OS flag
		HAVE_CONFIG_H	- config.h flag
	Dependencies:
		if you use MS VC, don't let IDE generate dependencies for
	you unless you add these files in MSVCINCL.DAT (the list of includes
	to be excluded from dependencies):
		param.h		kd.h
		dir.h		ndir.h
		mman.h		mount.h
		vfs.h		filsys.h
		statfs.h		dustat.h
		statvfs.h		mnttab.h
		wait.h		fs_types.h
		fstyp.h		ioctl.h
		termios.h		select.h

	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	

1.3 Windowing Library
--------------------------------
Currently only support for S-lang windowing library is given. I know no curses
public library ported to NT, and I think it is useless to port it now.  There is,
though still some work to be done with VK-to-Key code translation.
To build please look at the port of the S-lang library. It consists of a few files
you should add to the slang distribution. Look at slnttty.c for the support of
mouse events.

2. Changes made
---------------

2.1. Changes to main code
-------------------------
They are enclosed in #ifdef _OS_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.

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.

2.4 Files not used
------------------
Naturally, key.c chmod.c cons.handler.c cons.saver.c are not used in NT builds.
Also: learn.c utilunix.c chown.c achown.c xcurses.c

3. Windows '95
--------------
It will run also on windows'95, but maybe need a pair of changes. keep waiting.

