NOTES:		- This code is FREE for private use. 
			- You may NOT use it in a commercial product without my written permission.
			- This is a preliminary version and will change. Use it at your own risk.
			- I'll try to keep the public and protected interfaces stable.
			- There are a couple of optional favors I'd like in return for this code - see below. 
			- If you distribute this code please pass on the whole archive unmodified.

0) Change log

8/18/92		V1.0 

			Initial release

9/10/92		V1.1 

			Fixed enormous stacksize problem - default stacksize is OK now.

			Fixed bug that sometimes caused black on black text.

			Implemented Undo. NOTE: If you paste or type over selected text it takes TWO
			Undos to get back to where you started - one for the paste/overwrite part and one 
			for the delete part. If this is a problem, let me know and I will change it. 

			Radically speeded up painting and cursor movement.

			Added the Future Enhancements section to this document.

9/18/92		v1.2 - This version was not generally distributed. 

			Fixed Bug that caused a loop when releasing the mouse
			above the top of the dataset.

			Added Viewer Class.

			Added MakeFont() & SetFont() methods.

			Added ability to pass a file name to the constructor.

4/30/93		V1.3

			Completely redesigned buffer structure. Almost everything is much faster -
			except inserting a carriage return which is much slower! I'm working on that.

			Added SetStats() logic

			General code clean-up. It now compiles with no warnings at all and is completely
			"silent" in Windows debug mode.

5/2/93		V1.3 (again)

			I had some wrong files in the archive. Sorry for any inconvenience and thanks to
			Bill Zink (of the illustreous TeamB) for spotting the problem.
			
1) What it is.

This is a BIG file editor. It looks a lot like a TFileWindow and should be capable of being used
as a direct replacement for it in most cases. The major difference is that a TBFileWindow (the
B is for Big) is not limited to 64K of text. In fact, it is limited to 2 Gigabytes of text - if you have 
that much memory! Future versions may page to disk if there is enough demand. The biggest 
text file on my system is 200K so I haven't felt the need. I have tested it with a file over 2 MB.

It is also a BIG file viewer. The base class (TBViewWindow) can be used as a stand-alone 
class that has all the capabilities of a TBFileWindow that don't alter the contents of the file.

2) What's in the package.

The archive you just extracted contains the following files:

VIEWTEST.CPP		- A simple test program to create a TBViewWindow.
EDITTEST.CPP		- A simple test program to create a TBFileWindow.
EDITTEST.RC

README.TXT		- This file.

BIGVIEW.CPP	- The base viewer class. Plus some helper classes. 
BIGEDIT.CPP		- The TBFileWindow class. 
BIGEDIT.H

To compile it create a project containing EDITTEST.CPP, BIGEDIT.CPP, BIGVIEW.CPP & 
EDITTEST.RC and make it. All the code is WIN31 & STRICT compliant. You should use the 
large memory model. Browsing the files will make more sense if you set your tabsize to 4
or view it in edittest.exe.

To create a Viewer use VIEWTEST.CPP & VIEWTEST.RC and omit BIGEDIT.CPP.

3) Differences from TFileWindow.

Most of the TFileWindow public & protected interfaces are implemented. 

The biggest difference is that there is no Windows edit control in this editor so there is no 
Editor data member. Any code that begins with MyFileWindow.Editor-> will not work. Any 
suggestions to get around this problem would be appreciated. NOTE: This code does trap and
process all the WM & CM messages that the TEdit normally would - it's just the explicit calls
that aren't implemented. A lot of them don't make much sense if there is more than 64K in the 
editor.

All of the streamable stuff is not implemented - I don't use it and I don't know anybody that 
does. If you need it let me know.

Tabs are set to 4 average character widths instead of 8.

4) Bugs & Feechurs

There are no known bugs in the code. 

Inserting a line near the start of a large file is slow - it recalculates all the vertical stats before
repainting. Some of this recalculating needs to go into IdleAction(), a WM_TIMER method or
somewhere else.

Find and Replace are Sloooooooow - especially on big files with low hit rates. This is next
on my list.

The behaviour on trying to clear a modified file is very basic - it just asks if you want to do it.
A future version will bring up the Save (As) dialog automatically.

This document was created and maintained with EDITTEST.EXE so it works.

5) Design philosophy.

TBFileWindow is derived all the way from TWindow. The TEdit, TEditWindow & TFileWindow
classes all contain that ^&%^% 64K edit control and are fundamentally limited by it. Also, some 
of their interfaces assume only 64K of text which is why there is no TBEdit or TBEditWindow 
classes.

6) Disclaimer

BIGEDIT is not a finished product - it is a basic framework to help with the creation of more
specialized editors/viewers. It can be used "as is" (I am doing so right now) but it still has a few 
rough edges. It is also a business card of sorts - I write software for a living.

7) Future Enhancements

This is starting to turn into a co-operative project (which is fine by me). Future releases will
contain classes derived from TBFileWindow that have more capabilities than a TFileWindow
does. If there is a any particular feature you would like, please feel free to ask for it and/or
suggest how it might be implemented.

So far the following enhancements have been suggested/requested:

A) A file viewer without edit capabilities - It seems to me that this should be a parent class of 
TBFileWindow. Another approach would be to have some kind of protect flag that the user can 
set to turn it into a viewer.

This has been implemented. TBViewWindow is now a parent of TBFileWindow.

B) Selectable fonts. I would like to use the 3.1 common dialogs for this. Is there anybody out
there that doesn't have 3.1 but needs this feature?

This has been partially implemented - you can change the font by modifying or
overloading TBViewWindow::MakeFont(). User selectable fonts will follow.

C) Settable tab stops. Do people need just a changeable tab size or the ability to set tabs at
any point (i.e. variable tab sizes)?

8) The favors.

There are a couple of favors I would appreciate in return for this code. THESE ARE OPTIONAL,
you can still keep the code if you don't do them.

I would appreciate any comments on the code (positive or negative) especially any bug reports.

If you feel this code is of some value please locate somebody that needs it and give that amount 
to them.

9) Note

BIGEDIT has taken over my life. There are now several commercial versions and it has fetched
in so much other work that I have now quit regular employment and work on it and its derivatives 
full time. The down-side of this is that I don't know when the next release will be. I am fairly sure 
that I am going to wait and see what OWL II has to offer before I invest any more time in it. Unless
somebody talks me into it...

Terry Richards
58A Phelps Ave.
New Brunswick NJ 08901
USA

908-545-6533
CIS ID 72240,1026