/////////////////////////////////////////////////////////////////////////////
=============================================================================

                    --- File As File Is (Version 0.94) ---

Leonard.Smith@clear.net.nz
Copyright 1998 - ALL RIGHTS RESERVED.

NB - Please take a moment and read the License.txt file in .\File As File Is

=============================================================================
/////////////////////////////////////////////////////////////////////////////

1 - Introduction
2 - Keyboard commands
3 - Remote connectivity
4 - Updates since first posting
5 - General comments
6 - Source code
7 - In conclusion

/////////////////////////////////////////////////////////////////////////////
=============================================================================

1 - Introduction
================

Hi..

I started writing File As File Is (FaFi) in mid '96. Initially all I wanted 
to achieve was to get real world programming experience for the Win32 
platform. Suffice to say, I've gotten a little carried away and what you see 
attached with this file is the result of that effort. 

At this point I need to make an important point. At no stage did I have any
intention of competing with or replacing the standard Windows Explorer. What 
I can say is that I came form the good ol' days of Xtree Gold and Norton 
Commander. When I first started working with the new Explorer interface it
was hate at first sight. This lead to the first requirement for FaFi, a 
screen layout that may be configured for either a tree view or a list view,
the latter to allow for displaying two folder locations side by side. 

The second requirement was for a MDI window style. This allows the user to
have multiple windows open, each configurable to one's own preference. Like 
so many things the best way to learn about these options is simply to play 
with the different layouts. 

The list-list view combination is also used when comparing folders and 
other options present on the 'File' and 'Tools' menu. These options are 
grayed out when the layout is not appropriate for the task. 

The third requirement was the fun stuff - remote data transfer and file 
handling. A great excuse for digging into all things TCP/IP and RS232. With
every man and his dog (mine's a Border Collie named Jade) doing internet 
stuff acquiring a greater knowledge of socket communication is also very 
important for the CV.

All this talk of the Internet reminds me - Normally FaFi is used in a 
'point to point' mode i.e. you need to be able to ping the remote machine to
allow a FaFi to FaFi connection. If you're stuck behind a company firewall or
proxy server you'll need 'Foxy' to connect to another machine on the internet.
This is a small utility application that acts a router for the FaFi protocol.

I had considered including modem dialup for FaFi, but Windows come with dialup
networking and the RAS service. When configured appropriately it allows for 
remote dialup and inclusion into the local network. Select the option that
statically allocates the machine dialing in an IP address and then simply use 
the TCP/IP facility as before.

FaFi is shareware. Please refer to the License.txt file for information on 
its use. Do not change the contents of this file and distribute it with the 
executable at all times.

If all goes according to plan I'll have a homepage for FaFi by the time you 
read this. Have a look at http://fafi.homepage.com


2 - Keyboard commands
=====================

Function Keys
-------------
F1  = Help		
F2  = Rename
F4  = Edit
F5  = Refresh	 (See also Ctrl+F5)
F6  = Move Across (Available with a independent panes)
F7  = New Folder 
F8  = Copy Across (Available with a independent panes)
F9  = New File
F10 = Open with

Miscellaneous
-------------

Esc        = Cancel drag and drop if in progress
Tab        = Switch between panes
Backspace  = Navigate up folder tree (See also Alt and Ctrl+Backspace)
Ins        = Select focus item
Pause      = Interrupts the list view initialization. 
Enter      = List view : File item   - launch application or its association

Control Keys
------------

Ctrl+A    = Select all
Ctrl+B    = Opens bookmark dialog
Ctrl+C    = Copy current selection to the internal clipboard
Ctrl+E    = Sort by date
Ctrl+G    = Go to item
Ctrl+H    = Show history dialog
Ctrl+I    = Invert selection
Ctrl+J    = Sets left pane path to be the same as right pane path
Ctrl+K    = Sets right pane path to be the same as left pane path
Ctrl+L    = Divide the splitter window into 1/3 : 2/3 areas
Ctrl+M    = Center splitter
Ctrl+N    = Sort by name
Ctrl+P    = Show TCP/IP link dialog
Ctrl+R    = Divide the splitter window into 2/3 : 1/3 areas
Ctrl+S    = Show RS232 configuration dialog
Ctrl+T    = Show Select some dialog
Ctrl+U    = Swap panes
Ctrl+V    = Paste the internal clipboard content to the active path
Ctrl+W    = Show transfer progress dialogs (if present and hidden)
Ctrl+X    = Cut current selection to the internal clipboard
Ctrl+Y    = Sort by type
Ctrl+Z    = Sort by size

Ctrl+Ins  = Copy current selection to the internal clipboard
Ctrl+Home = Navigate to the top of list view
Ctrl+F4   = Closes the current active child window
Ctrl+Tab  = NB !! Switches between open child windows. Especially useful 
            when child windows are maximized
Ctrl+F5   = Refresh the current path

Ctrl+Backspace = To next path in history list
Ctrl+Number(n) = Open tree branches n levels deep

Shift Keys
----------

Shift+Delete = Cut current selection to the internal clipboard
Shift+Ins    = Paste the internal clipboard content to the active path

Shift+Number(n) = Close tree branches so that only n levels are visible

Alt keys 
--------

Alt+F1 = Select left pane path location
Alt+F1 = Select right pane path location

Alt+Backspace = To previous path in history list
Alt+Number    = Navigate to bookmark location (if configured)

Alt+R = Open a command prompt window in the current path (if supported)

Drag and Drop
-------------

Left mouse drag  = Move
Right mouse drag = Copy

Note : For left handed mouse configuration the reverse applies


3 - Remote connectivity
=======================

The ability to connect to a remote computer is the major differentiation 
between FaFi and most other file managers. To help use this feature I've 
put together a few pointers.

3.1 Serial link
---------------
a. Get hold of NULL modem cable and connect the two computers via a free
serial port. 

b. Ensure that you have a running instance of FaFi on both computers. 

c. Select "Serial link" from Tools => Remote connection on computer 1.

d. Match the Com port entry with the port where you've plugged the cable
into. Also note the highest baud rate supported by the serial port.

e. Repeat c and d for the second computer and set the serial baud rate 
to the highest rate supported by both. Follow the instructions on the 
dialog for the rest of the settings.

f. Press OK on computer 1 and then 2. You should see a message appear on
the status bar that the remote computer has been found.

g. Once the connection is established the remote computer will be visible
under the "Remote connection" entry in the tree control.

Note - There is no requirement to configure both computers at the same
time. You may chose to first set up computer 1 and then do the second 
a little while later.

3.2 Socket link
---------------
a. Ensure that the 2 computers are connected on the same TCP/IP network 
such as your company LAN or the internet.

b. Ensure that you have a running instance of FaFi on both computers. 

c. Select "Socket link" from Tools => Remote connection on computer 1.

d. Enter the remote computer's IP address and the server port number. 
If you do not know what I'm talking about you'll have to ask a friend 
who "knows" computers.

e. If the "Connect" button changes text to "Disconnect" you have 
established a connection. That's it. No action is required on the second
computer other than starting FaFi.

f. Once the connection is established the remote computer will be visible
under the "Remote connection" entry in the tree control.

Note - You may test this option by connecting back to yourself. The IP
address for this option is 127.0.0.1

I had some trouble with this option under the first release of Windows 
'95. Microsoft fixed something with the first service pack which made 
everything OK. I've got no idea what they did !


4 - Updates since first posting
===============================

Version 0.87d is the first one that I placed on www.codeguru.com, so it might
as well serve as the first stake in the ground. Below is a list of the bugs 
I've fixed and additions I've made since then. 

4.1 - Version 0.87e
-------------------
a. Clicking somewhere within the Bookmark dialog BUT NOT on a item returns -1
as the selection. No prizes for guessing what happens when I try and find an
index of -1 within the bookmark array.

b. When the Goto option is used in a tree view and it result in a selchange 
the path is not updated. - Thanks to Peter Pearson

4.2 - Version 0.87f
-------------------
a - Added the code to format a floppy disk - Thanks to Dennis Peek

b - I've changed the "Toggle Display" (See view menu) option. I hope this 
helps to make it a bit more clear.

4.3 - Version 0.87g
-------------------
a - Changed the view menu slightly and added a Location menu. The latter
concentrates all items relating to the path in one place. Changing the 
pane look should be a little easier to follow with the new wording.

b - Added a sticky button to the info pane. This button represents the 
path location. A right button press will "stick" the button. It short, 
it means "Remember this path". A left click on another pane will 
automatically go to this path. It's really no more than a temporary 
bookmark. Only one sticky button at a time is allowed.

Remember that for a left handed mouse the reverse apply.

c - Remove the "Dependant panes" option. This option proved quite
confusing to some and was used very infrequently. The principle I'll 
follow from now on is that dissimilar panes (i.e. a tree view <=> list view
combination) will follow each other in the event of a path change.

4.4 - Version 0.87h
-------------------
a - Added display filters - Thanks to Navi Singh for this suggestion.
This feature applies only to files and not to folders. I have left a 
backdoor open to apply this to both, but I'll wait for user feedback 
before making any changes.

The Touch and Folder synchronization options does not take the current 
user filter into account. This is by design.

4.5 - Version 0.90
------------------
a - Cleaned up the serial manager and serial port classes a little. 
No change in FaFi functionality.

b - Due to the number of application I have that share communications 
code I was forced to change the source tree somewhat. This allows me to  
keep common code in one place. Again no change in FaFi functionality.

c - Found the code below in PathHistory.cpp - Notice the semicolon !!
if (m_Selection != eNotInitialized); As it turn out this was 'defensive'
programming at work, it would have worked regardless.

d - Getting ready for VC++ 6.0 - Fixed a clash in identifier naming with VC -
ID_VIEW_DETAILS. 

e - I'm building a thin transfer client for FaFi. To achieve this I had to
create a second DerivedPackets.h and .cpp which does not use any MFC. To 
avoid confusion I've renamed one MorePackets.h and .cpp. In time I'll fold 
these back into one.

4.6 - Version 0.91
------------------
a - Took the plunge to VC++ 6.0 Sp3. The exe is 25k smaller. I hope this is
a good thing...

b - I Added a feature which was sorely lacking in FaFi. Password access for 
remote connectivity over TCP/IP. To also protect the user at initial startup 
I generate a random password. This applies until it is changed by the user. 
Look for the 'Password' button on the TCP/IP configuration dialog.

4.7 - Version 0.92
------------------
a - Previous stops on the Location menu displayed the oldest items first.

b - Added last accessed for files to the display. Points to note are
    1. A change in last access time does not automatically cause a refresh
    2. Last access for folders is now (Because you're looking at it !) 
    3. On FAT file systems it looks like the date only is stored. 


4.8 - Version 0.93
------------------
a - The User Filters are now displayed in the tooltips.

b - I changed the warning level for the debug build to level 4. It spat 
the dummy in a few places. No major changes.

4.9 - Version 0.94
------------------
a - Changed F4 to first search for Editor.bat and not Editor.exe. Further
comments below.


5 - General comments
====================

a - Speed concerns ? Remember that list views are a lot faster than tree views.

b - Configure child windows with any combination of tree views and list views
to your taste. My favourite is to have 3 maximized child windows - one 
list view only, on list view - tree View combination and one tree view only. 
Remember to use Ctrl+Tab to switch between windows.

c - All settings (paths, windows sizes, bookmarks etc) are stored in the 
registry at HKEY_CURRENT_USER\Software\SorryWare\File As File Is. Should 
something go wrong with the startup process delete this entry. Alternatively
to avoid losing preconfigured bookmarks delete all but the bookmark entry. 
This has the same effect.

d - The default server socket port number may be changed with a commandline
argument of -Number (ex. swFileM -4343)

e - If Notepad is not your favourite editor (just kidding) : FaFi will attempt
to launch "Editor.bat" with the selected file as commandline argument. The bat 
file must be located within the system folder ex. C:\WinNT. If no bat is found 
FaFi will default to "Notepad".

f - Tired of selecting Yes, yes... when deleting or copying files. When 
dropping files onto the delete cross (main toolbar) or the drive icons 
(drive toolbar) NO confirmation dialogs are displayed.

g - A number of the menu items require that the user configure the panes
as a list <=> list view combination. I've changed the menus slightly (in 
V0.87g) to make this process a little simpler to understand.


6 - Source code
===============

I've made the source code freely available to allow other to see what I've
done and make their own changes and/or recommendations for improvement. I 
would appreciate if everyone will endeavor to uphold the spirit in 
which I have done so. Take credit for my work and be assured that I'll be 
somewhere between unhappy and raving mad :-). Once you have paid the
registration fee you may use any FaFi source code in your own application
provided that it does not compete in any way with functionality provided by
FaFi. Under this agreement you may make changes to FaFi for your own 
personal use, but you may not publicly distribute your clone. The source 
code may be found at http:/fafi.homepage.com.


7 - In conclusion
=================

Thanks to all of you that send me mail and for your comments and suggestions.

Have fun. 
Leonard

Ps. Please, no hate mail if you find a bug. A stern word will suffice...

=============================================================================
/////////////////////////////////////////////////////////////////////////////


