>> Beezer <<
A detailed history of Beezer...

• Version 1.00
> Updated AboutWindow, removed Authorwindow
> Enhanced path checking for worker binaries
> Added support for xz archives
> Removed obsolete ZETA code
> Migrate settings folder to B_USER_SETTINGS_DIRECTORY, to be more consistent with Haiku standards
> Statically link tar archiver into gzip, bzip2 and variants
> Added tooltips
> Bug Fix: Fixed reading and testing of 7z files for latest 7z binaries
> Bug Fix: Minor UI fixes for Haiku
> Compiled and built under Haiku natively using CMake, abandoned legacy BeIDE projects


• Version 0.09
> Made file extension stripping in Extract context menu case insensitive.
> Added extract without full path option when extracting through drag 'n drop. This works
	a bit intelligently and takes extra care to avoid clobbering when conflicts in filenames
	occur when dumping all into one destination directory.
> Started work on ArchiveRep - which represents an archive, this will not be used by
	MainWindow as MainWindow needs too intricate a connection with Archiver object, rather
	this will be used in future by Tracker add-on, tools such as Multi-Extract, Multi-Test.
> The ArchiveRep object needs to hang around till the archive is manipulated, otherwise it
	will tear down the temp. folder, archiver object etc. as it goes
> Started work on AddOnWindow
> Also got to hear about a format called LZO. The lzop binary seems good enough to be
	made into a Beezer add-on, it behaves currently like a gzip that can store many files but
	not a tar.gzip as once stored it more files cannot be added.
> Bug Fix: fixed a tiny bug where "Operation unavailable" was getting printed on the same
	line rather than a new one, yes I AM picky :)
> Tracker add-on now works, creates archives, allows users to change the name, destination
	of archive and even allows users to configure settings before creating archives all in
	one window with minimal effort
> Cancel is YET to be done !!!!
> Next the statusbar lines must update when the actual operation is going on
> Cancelling works perfectly, lots of bug fixes tested quite well all works well so far :)
> Password protection support added for Tracker add-on
> Made ARJ recurse into sub-folders, added compression level options as well
> Made hidden CRC, Method columns for arj archives
> Fixed a bug in ARJ addon by removing "-r" option during extract operation
> Implemented all the default interface settings such as folding, infobar etc. and it works
	well by not blowing away other settings stored in MainWindow settings file
> Added Help button to Preferences window
> Fixed a bug in Rar's ReadAdd() function to hack and avoid Rar binary warning when the
	binary could not get hold of a file's permission value; hmmph! that's not our fault, but
	anyhow Beezer intelligently ignores rar's hideous warnings and continues to load the
	files that have been added!!
> Added check for making sure QuickCreate is not closed when Beezer is closed as a whole,
	there is a slight issue in that we are not REALLY pausing the worker thread (we can't
	from AddOnWindow without major changes to ALL add-ons) and thus when it shows the
	Alert confirmation the zip, gzip etc keeps going. But its somewhat working, I'm not too
	satisfied with the results though.
> Fixed a minor bug where 12th was displayed as 12nd in About Box date string calculation,
	similarly fixed 11st as 11th and 13rd as 13th... :-P
> Started doing changes to Preferences window's PrefsListItem and all derived panels to
	support bitmaps like in say Mozilla's preference box. Looks very professional that way :D
> Done the cosmetic changes to Preferences window, I'm still not satisfied with its look though.
> Got rid of the extra MainWindow constructor as its not being used anymore...


• Version 0.08
> Made Gzip and Bzip2 add-on check for ".tar" extension for tarred gzip/bzip2 when opening
	as sometimes mime-type doesn't correctly change to "application/x-tar".
> Bug Fix: really embarrasing bug fixed, now the 7zip is the actual script rather than the
	stupid broken link :(



• Version 0.07
> Started work on filesplitter tool.
> Added "Debug release" and "Public release" strings to LangStrings (in AboutWindow).
> Bug Fix: in SelectDirPanel, now choosing a file from favourite will not work because what
	is expected is only folder entries, this is now checked using BFilePanel::SendMessage() in
	SelectDirPanel and only if the BEntry is an actual directory is the message sent to target.
> Added a function "UpdateMenu()" to RecentMgr, to support updation of an already existant
	menu (as in the case of recent menu's being attached to BMenuFields in which case you
	cannot delete and re-assign recent menus).
> The file splitter tool is pretty much complete, including all validations, recent files/folder
	tracking and opening output dir. The only thing remains is creation of joining binary...
> Bug Fix: fixed synchronisation issues between splitter thread, window and main app.
> Now the Splitter window also forces main app to quit when the main app has quit leaving
	the splitter running to complete it's task, in this case the main app's message loop would
	have been shutdown and thus we call be_app->Quit() forcefully. Seems to work fine.
> Bug Fix: fixed a bug in 7zip add-on's Test() function, now password is passed during test
	operations
> Re-wrote the 7zip add-on's ReadTest() function, simplified things a hell of a lot because
	the percentage display in output is now prevented by passing "-bd" flag to 7z.
> Bug found: The progress bar is not updated during the "Add" operation in 7zip. This requires
	rewriting the 7zip add-ons's ReadAdd() function.... pending.
> Also not to forget to mail the rewritten 7zip addon to Marcin :)
> Made splitter correctly output filenames with padded zeros to ensure proper alphabetic
	sort order (in FSUtils.cpp).
> Added user definable separator character between filename and numbering with necessary
	validations (such as prevention of special characters like colon, slash, digits etc.)
> OK, I've now confirmed that the BeOS command-line app "split" does not copy attributes
	to split pieces, meaning attributes while be lost upon joining. Proof: try splitting an mp3
	with attributes, the re-joined. I intend to add full attribute support during split & join
	operations in Beezer's Splitter and Joiner...
> Added ability to drag 'n drop files and folders to the FileSplitter tool. Works.
> Started work on Joiner window, we're going to make this versatile in that it can join either
	based on file number given the start file, or an entire directory.
> Changed "Beshare" in Developer Info window to a more generic "Nickname" field... update
	in ZETA version if needed.
> Bug Fix: in 7z add-on, now empty 7z archives when tested aren't reported as erraneous
	archives. (in ReadTest() function)
> Bug Fix: in FileSplitterWindow's QuitRequested() -- made handling of multiple requests to
	quit (as the case when main archive windows quit on close option). This is now fixed
	by checking for m_quitNow flag in QuitRequested() and ignoring it as needed.
> Was feeling bored. I went and made the PrefsListItem do more fancy drawing :)
> Made separator character in Splitter and Joiner as seperator strings so that
	users can enter something like ".z" (since WinZip now has a FileSplitter that does this)
	and can join by entering the same...
> Also made "01", "02", etc. as the minimum numbering, i.e. "1", "2", "3" aren't used anymore
	even if then no. of pieces is less than 10.
> Ok, I've hereby dropped the idea of joining folders as it's too cumbersome to program
	when the output file is inside the folder to be joined, plus it would only make our
	self-joining executable bigger. If the user wants to join all the files in a folder, let him
	use something like PecoRename and add in numbers and then use this app... 
> Completed file joining, self-joining executable is still pending.
> Added an option to "Close window after split" as well as "Close window after join" for
	both the splitter and joiner windows.
> Completed Self-Joining executable. Works fine.




• Version 0.06
> Bug Fix: in MainWindow's ExtractArchive() and ExtractDone(). Now extraction isn't quit half
	way when "Quit after extract" option is used when multiple files are being extracted.
	Instead what happens is, all archives simply wait till all others are done. Only problem
	cancelling one of them half way while extracting will cancel the "Quit app" option for
	all other archives as well... apparently, it's not possible to avoid this.
> Bug Fix: in StartupWindow, now window correctly resizes and fits as per the text labels
	of the buttons. Fixed by calling ResizeToPreferred() for each ImageButton.
> Added an option to save Preferences window position.
> Renamed "Prefs" in StartupWindow (welcome window) to "Preferences".
> Fixed some bugs in the documentation, namely a broken link in AddingFiles.html and
	corrected 7zipSettings.html heading from "Rar settings".
> Added an option to Register all file types with Beezer rather than confirming each type,
	as requested by Begasus. Done :)
> Discovered a bug in ARJ binary. It uses wildcard matches and apparently there is no way
	to turn it off, hence deleting ".doomrc" file from ROOT of a ARJ file also deletes ALL
	".doomrc" files inside sub-directories. Serious problem. Hmm.
> Added "-i", "-y" switches to ARJ addon during Delete operation.
> Findout why be_roster->Launch() fails in LocalUtils when the file being viewed is to be
	opened by Beezer itself.
> Bug Fix: fixed the above error of calling RefsReceived() twice, fixed in StartupWindow.cpp's
	Go() implementation, or rather removed our manually delivery of the message
> Bug Fix: fixed an error where viewing an archive from Beezer when Beezer is the preferred
	app now launches Beezer correctly. This isn't a problem with Beezer. It's just that
	be_roster->Launch() decided to screw up things by giving a B_BAD_VALUE error. The
	error was fixed in LocalUtils.cpp's OpenEntry() function.
> Add a function "SupportsDelete" so that archivers (like Rar) can report false and we can 
	check this even before the Delete function is called...
> Added "CanAddEmptyFolders()" function to Archiver. Also, added "CanDeleteFiles()" function
	-- the empty folders function is overriden by Arj add-on, while CanDeleteFiles() is
	overridden by Rar add-on, ...  Also made changes to MainWindow to check for these
	before the operation starts.
> Changed Beezer icon.
> Updated 7zip add-on for version 4.20 of p7zip released on Bebits. Thanks to Marcin Konicki.
> Fixed a typo in "binary missing" -- thanks to DaaT for pointing this out.



• Version 0.05
> Started work on ARJ archiver.
> Bug Fix: in 7zip launch script, now it doesn't always print to terminal when app tries to open
	any archive. Checked for "$2" = "".
> Completed ReadOpen() of ARJ even with OS host names that have a space.
> Completed Test() and ReadTest() functions in ARJ archiver. Still needs testing with highly
	erraneous archives.
> Bug Fix: Calling of m_startupWnd->IsHidden() in B_CANCEL of Beezer's MessageReceived() 
	is now fixed (reported while running app from Terminal).
> Completed Extract() and ReadExtract() functions in Arj Archiver. Works well...
> Added ShowReadOnlyError() and CanWriteArchive() functions. Now archives on readonly
	partitions are reported as such, neat.
> Also seperated CanAddFiles() and readonly status, as these are 2 seperate situations. The
	CanAddFiles() is a limitation of the archiver, while readonly is by the system.
> Implemented readonly errors etc. in MainWindow::MessageReceived : M_ADD:, not error is
	shown correctly even when files are dropped onto the window
> Completed ArjArchiver::Delete() and ReadDelete() function. Works fine.
> Bug Fix: removed check for ArkPathError() while adding files to archive because while
	creating an archive the archive won't exist :) err...
> Added menubar.png picture to the Docs.
> Somewhat implemented the Add option for ARJ archiver. The ARJ binary is flawed, it goes
	into an infinte loop when "-r" (recursive) option is used with files. Also, if it is NOT used
	it will not recurse into subdirectories. Hence we avoid this using option...
> Updated the docs.
> Made changes to RarArchive, now percentage display is disabled and hence results in 
	more readable output and simplified code.
> Bug fix: in ImageButton, though had no effect, we corrected a theoritical bug: See 
	ImageButton::WindowActivated()
> Bug fix: in ZipArchiver's Delete function, weird one.
> Completed ARJ's settings menu. Currently only extract-time options are available. ARJ
	seems to have some bugs, hence I'm reluctant to experiment too much... Seems reasonably
	fine for now.
> Implemented smart file extension stripping in "Extract" context menu. Changed
	MainWindow::StripArchiveName() function to get file extensions from the system as well
	as check against some hardcoded extensions like ".pkg", ".jar".
> Bug fix: Now pressing SHIFT while adding files through drag and drop correctly updates the
	Line indicator colour rather than updating in the next movement of the mouse. See
	BeezerListView::MessageRecevied() - B_MODIFIERS_CHANGED.
> ! R5 Specific ! Made superb change to make R5 and Zeta versions compile without using
	the Find & Replace method to replace all "str (V)" with _X ("V", V) -- now the macro
	substition in LangString.h makes this possible using the # operator. Wow :) As a result
	of this, we need not waste hours rewriting code to compile under zeta... only a new 
	Proj file needs to be made, the rest needn't be changed. Differences are simply handled
	using B_ZETA_VERSION OS flag.
> Bug fix: See MainWindow::FrameResized() -- now resizing at fast pace to minimum height
	and back doesn't graphically corrupt the CLV.
> Integrated Zeta and R5 versions into the R5 version. Hopefully, only a recompile is needed
	for Zeta without altering any code... let's see. We'll still retain Zeta version archives seperately
	till all issues are completely ironed out.



• Version 0.04
> Bug Fix: fixed a very important bug in Zip add-on - now files which have negative ratio
	are properly displayed - stupid zip sometimes report -0% or -1% as ratio - now this is
	fixed.
> Bug Fix: fixed bugs in Zip add-on for files and folders that start with a space. Thanks to
	Marcin Konicki for finding this.
> Bug Fix: fixed a bug that crashed some Rar files to crash (due to attribute reading). Thanks to
	AlienSoldier and Miguel Guerreiro for finding this and providing archives that crash.
> Bug Fix: in Rar add-on for files with space before them.
> Bug Fix: in Lha add-on for files with space before them.
> Bug Fix: in Tar add-on for files with space before them.
> Bug Fix: in Gzip add-on for files with space before them, Bzip2 doesn't need this as it uses
	the archive's name.
> Bug Fix: now cancelling an Open panel using non-default startup option works like it should.
> Bug Fix: now Rar, 7zip doesn't use various overwrite modes (uses always overwrite) while
	Viewing files
> Renamed "An unknown error"  into a LangString constant for ExtractDone() me
> Time to include the shiny 7zip add-on works nice.



• Version 0.03
> Made Rar add-on use password while adding files.
> Added a textcontrol in BFilePanel of create process for accepting password for those
	add-ons that support it (currently only rar).
> Now adding files with password works in rar. All seems fine.
> Bug discovered while extracting rar files with password, without supplying the password,
	the progress shows empty names.
> Changed "Password error" to "Error (password protected/corrupt file)" as its a possibility
	the extract could have failed due to a corrupt file.
> Bug Fix: while extracting password protected files that don't actually extract due to incorrect
	password, the progress bar doesn't progress.
> Bug found: the UserManual link is pointing to /boot/Projects/Beezer... instead of docs/Index.htm
	(reported by Tim de Jong/Sir Mik) - needs to be fixed.
> Half way making rar add-on use new unrar 3.x
> Used unrar 3.x for extracting files while rar 2.x is used for adding, testing files.
> Now testing also needs password and I added password supported testing.
> Made changes to ZipArchiver to make sure ONLY "file-type couldn't be set" warning is
	skipped as an error while adding/deleting files. Any other warning/error will be treated
	as an error and will not result in updating of zip.
> Made reporting of "password found in archive" message in LogView using the
	Archiver::PasswordRequired() function in the 
	MainWindow::MessageReceived : M_OPEN_FINISHED function.
> Refined RarArchiver's ReadTest() function to report names much more accurately than
	before.
> Miguel Guerreiro gave us some 3.x rar's to test, nice of him :)
> Now testing is done using unrar rather than rar as otherwise the old rar will give errors for
	the newer 3.x rar files.
> Moved add panel setting up code from MessageReceived::M_ACTIONS_ADD to a
	function "SetupAddPanel()".
> The new unrar I'm using use can be obtained from the url : 
	http://zharik.host.sk/index.php?pages=abd&page=d or 
	http://www.bebits.com/app/2023under "unrar BeOS package" section labelled
	(Version 3.10 / x86) ...
> The new unrar works fine and handles the latest 3.x rar's (both with password and without)
	fine.
> OK, all works fine now in Unrar. Made slight changes to LHA's error reporting (just added
	a new line that's all ;-P)
> Added SendMouseEventsTo() function to BeezerStringView and is used in InfoBar, now
	right-clicking anywhere on Infobar will toggle it's visibility - like it should be.
> Implemented the 2 radio buttons in PrefsViewMisc as a BMenuPopUp for saving space.
> Added the option to change action on Beezer startup. Have to implement it...
> Implemented the startup options, needed changes to StartupWindow and Beezer app.
> Started work on colour preferences, constructed color controls etc in Interface prefs panel,
	to be implemented yet.
> Implemented loading and saving of colour prefs in PrefsViewInterface - yet to implement.
> Implemented colours - one problem invalidating existing windows doesn't work like it should.
> Finally implemented colour preferences - works fine, resulted in adding UpdateListView()
	function to MainWindow.
> Bug Fix: in RuleMgr when detecting archive that has no extension but correct mimetype.




• Version 0.02
> Associated DEL key to delete operation from BeezerListView::KeyDown()
> Added a new class SelectDirPanel() that allows extracting to currently displaying folder
> Changed to MainWindow by segregating code from MessageReceived's
	M_ACTIONS_EXTRACT to a SetupExtractPanel() function.
> Now the SelectDirPanel works like expected.
> Started work on the RAR archiver :-) Open already works.
> RAR now extracts file correctly - NOT tested yet with passworded rars, don't know what
	the heck will happen when the archive is protected by password.
> Implemented extract options from the settings menu. Also sorted out the options I am
	are gonna allow the user.
> Got adding of files working fine. Not yet tested with options.
> Bug Fix: empty folders are not displayed properly - also Create Dir function works.
> Creating of rar now works - not yet very heavily tested but in generally seems good.
> Added SetMimeType() to RarArchiver as rar too like LHA doesn't update mime-type when
	it modifies the archive.
> Disabled comments, add, create folder on corrupted archives.
> Completed Test() and ReadTest() functions in Rar archiver - quite britle.
> Currently I'm returning BZR_NOT_SUPPORTED for Delete() operation - Rar is the
	stupidest format i've come accross - it's shit with solid and non-solid archives are
	irritating beyond words.
> I shall now try my hands on comments for rar.
> Made changes to ZipArchiver's SetComment() function - the file used to temporarily
	write the comments is made a notch safer. Instead of just adding ".txt" to the archivename
	I've added "_bzr_.txt" reducing the chances of a collision with a file viewed from the
	archive with the same name. I can take the ultimate step and randomize the name but.. :)
> Completed loading and saving of comments from a RAR file. Works well, tested quite well.
> Made change to ArchiveEntry to handle negative ratios, because rar reports for some files
	(like queries), "packed" more than "size" - thus I handle this in ArchiveEntry which thus
	caused all add-ons to be recompiled as well as the main app.
> Made a few changes to ProgressWindow - cancelling now doesn't fill up the bar fully.
> Also made cancelling of adding files to Rar archives work - in RarArchiver.cpp
> Changed a few language strings in Prefs window.
> Replaced "Entries: 0/1" and "Bytes: xxx/xxx (xx%)" with "of" i.e. "/" with of - requested by
	BiPolar.
> Added PrefsViewInterface and an option for full length toolbars and infobars - also
	requested by BiPolar. And it works quite well.
> I added it as an option because I personally do NOT prefer full length bars, but it seems
	some people do. So... also this Interface panel allows us to add colour options in it
	in the future, so its not a bad thing i guess.
> The above resulted in sending of an UPDATE_INTERFACE message to all open windows,
	which is good - as in the future I can also update colour prefs as well. All looks well now.
> Made changes to CLVColumnLabelView's MouseDown() function to detect double-clicks
	and accordingly auto-size the column to the fit all the visible content. Wow, I can't believe
	I got this working, haha.
> Added the option in rar to recurse into folders. Now with this option turned on the command
	line binary takes a HELL of a lot of time to compress - its not our problem anyway.
> Successfully added password support into Archiver, RarArchiver and main app.
> Now when you try to extract any rar file with password, it will fail and prompt you to enter the password.
> Bug Fix: fixed a bug when zip would report a warning that it cannot set mime-type on 
	File systems without mime, when ZipArchiver would report it as an error causing the
	archive not to update. Same for delete (Thanks to Tim de Jong/Sir Mik for reporting)



• Version 0.01
> And so it begins...
> Created FantaZip and MainWindow class.
> Added Toolbar, ImageButton and other classes.
> Added Language customizations through LangStrings class.
> Changed ImageButton class to use MouseWatcher, some UI changes also.
> Wrote FantaListView derived from ColumnListView for keyboard enhancements.
> Multi-threaded loading done. Up and running ArchiveWorker class.
> Made FantaZip (BApp) class do the file opening thing.
> ArchiveWorker's Parser for zip files 100% successful.
> ArchiveWorker synchronised properly.
> Created ArchiveEntry class as our memory representation of each archive entry.
> Dynamically created ArchiveEntrys are now added to a BList.
> BList.SortItems() failed for dynamic objects pointer by BList.
> Wrote FantaSorter class with bubble sort to sort BList by the path of entries in archive..
> FantaSorter sorts pointers of the pointers of the BList's List. Thus the QuickSort is sucessful.
> Implemented QuickSort in FantaSorter. 100% success.
> Implemented QuickSort algorithm for ColumnListView, other changes are minor.
> Freed-up items in the ColumnListView from the MainWindow (Mem. Leak Fixed)
> Changed ArchiveWorker to free-up ColumnListView rather than MainWindow (Bug fix)
> Made FantaZip class open the first archive in the first window, than opening a new one.
> Added SplitPane to the code base.
> Implemented SplitPane in the MainWindow class. Works fine.
> Got zipfile comments from zip file, done by the ArchiveWorker as 'posted' to main window.
> Bug Fix: Toolbar resize bug to work for the newly implemented SplitPane.
> Bug Fix: While opening multiple files when 1st window was dummy (asynchronous bug).
> Added cursor changing to SplitPane class.
> Bug Fix: When opening files from Tracker. Removed ReadyToRun() in FantaZip class.
> Made "friend"ship between MainWindow and ArchiveWorker
> Moved zip handling code from MainWindow to ArchiveWorker.
> Changed the app's icon.
> Changed the project name from FantaZip to Beezer. No hassles, compiled with new name.
> For information sake Beezer means large and impressive ;-P
> Changed toolbar icon pictures from 16x16 to 32x32 .. Toolbar much better now.
> Added BubbleHelp to the code base, made toolbar show BubbleHelp instead of text.
> Looks like a total revamp of the ArchiveWorker is needed.
> Looks like I need an ArchiveWorker for EACH type of archive. (As in FilpSideAE).
> Started work on ArchiveHandler class.
> Started work on ZipHandler class, a derived class of ArchiveHandler.
> ArchiveWorker class joins deprecated code. ArchiveHandler is now in.
> ArchiveHandler successfully interfaces between ZipHandler and MainWindow.
> Changed icons from 32x32 into 20x20 icons since it looked way too big.
> Added "Create Folder" and "Rename" options.
> Bug Fix: Fixed cursor unchanging bug in SplitPane, I was the cause for this bug, but fixed now.
> Began re-route function. Namely CommandIO () function in ZipHandler class.
> Had problems with fgets as it kept waiting indefinitely.
> Bug Fix: Closing the file descriptor from the input line. Now it works very well.
> Segregated stderr and stdout nicely and determined error well and posted to mainwindow.
> The error posting goes through the ArchiveHandler interface now.
> Began work on ErrorWindow class to show the error in a nice text view.
> Finished ErrorWindow class, works fine now. stderr reading and handling is done.
> Deleted all traces of FantaZip (backup in otherwords :)
> Handled special case for empty zipfiles. Now it is not shown as an error.
> Changed DrawShinyEdge() of ImageButton to draw a bit efficiently by using AddLine()'s.
> Added ExtractorReader() and ExtractArchiveTo() hooks to ZipHandler class.
> Started work on ProgressWindow class. UI setup. Made it block caller window.
> Finished ProgressWindow, halting works except unzip's deskbar entry isn't removed.
> Finished stopping archiver half-way ie. the cancel operation while extracting.
> The speed is very good. The extraction is about 5 seconds faster than Squeezer.
> Memory usage is almost half of that of Squeezer now that many things are done.
> Bug Fix: In ProgressWindow that didn't reset progressCount each time (removed static).
> Wrote ResBitmap function in a new class - BeezerUtils class.
> Utility functions (generally used by many classes) will be in static functions of BeezerUtils.
> Moved the SplitPane rectangle by -1 to left and +1 to right to avoid a dark border on sides.
> Perfected (hopefully) log and toolbar hiding/showing stuff.
> Bug Fix: In log hiding/showing. Now the splitter bar is locked when hidden.
> Changed the extract zip icon from 32 bits to CMAP 8 (8 bits to save 4 K of memory, no loss).
> ExtractorReader function completely changed. fgets instead of fgetc and other changes.
> Handled unzip's output when it went around creating links.
> Made ProgressWindow resizable one. Works fine.
> Made BeezerSorter use m_dirStr to sort instead of m_pathStr. This is correct NOT m_pathStr.
> Changed ExtractorReader: Replaced char* for BString for improved speed.
> Did not handle "linking" of files by unzip specially. The linked file's name is parsed correctly.
> Updated ZipHandler's ExtractorReader so that the message fields aren't added in the loop.
> Updated K_VERSION constant in AppConstants.h to be compiled as per platform (x86/ppc)
> Changed ItemAt()s in Toolbar to ItemAtFast(), maybe boundary checks aren't done.
> Moved progressbar, label above progress bar of ProgressWindow a bit to the left.
> Implemented toggling of the various columns from the menu.
> Added RemoveDirectory() to BeezerUtils (to remove the temp directory)
> Implemented RemoveDirectory() from ~MainWindow(), .. works fine.
> Further randomness added to the temporary directory name for each archive (using rand())
> Implemented Window menu updating, quite a bit of tricky work, but works very well (so far)
> In the above process, hd to pass an extra parameter to MainWindow ie (BList *m_windowList)
> Handled opening of links pointing to files already open, now NOT opened in a new window.
> Removed "this" pointer from the window list (of BApp) in QuitRequested of MainWindow.
> Placed Removing of "this" pointer inside Lock, Unlock as I felt it isn't thread safe. Now it may be.
> Commented hash table use from ArchiveHandler and ZipHandler since I don't use it yet.
> Hash table (before commenting) caused a problem in the destructor. Don't yet know why.
> Added TestArchive() and TestOutputReader() in ZipHandler.
> Added HandleTestOutput() in ArchiveHandler & message reception in MainWindow.
> Added a check in BeezerListView to make sure dbl click works only when mouse over the item.
> Changed look and feel of ErrorWindow, now it has a title bar and is APP modal.
> Added borders parameter to ImageButton, if false the borders of the button are not drawn.
> Added a new item to the Actions menu - "Deep Search". I will get this done using zipgrep.
> Made UpdateUI of ArchiveHandler empty the CLV before adding items (for when I add files).
> Coded AboutWindow class and appropriately added things to LangStrings.
> AboutWindow now has a little animation. Not much though.
> Posted B_QUIT_REQUESTED msg to ArchiveHandler when window dies (so handler dies too).
> Changed bitmap resources of AboutWindow, now looks better.
> Bug Fix: AboutWindow not getting slayed (new AboutWindow() is wrong, fixed it now).
> Minor changes to Toolbar class, its UI. Also minor changes to AboutWindow UI.
> Remove B_QUIT_REQUESTED msg from Window QuitRequested() as it caused problems.
> This means that worker threads don't get slayed when window closes, only during app quit.
> Must find a way to fix this... LockLooper() causes some kind of lockout/hangs.
> Bug Fix: The sorting was done when the window wasn't locked - long term bug finally fixed.
> The UpdateUI() function in ArchiveHandler now puts the BeezerSorter call inside the lock.
> Changed a lot of things. ArchiveHandler fills a new list called m_listItems (ListEntry pointers)
> MainWindow gets a message then adds items in m_listItems (in chunks if needed)
> Now GUI is fairly responsive, and locking problems are all solved...
> Bug discovered in BeezerSorter, try BeBook.zip (notice how some files in the end are unsorted)
> Bug Fix: Forgot to place an Unlock() after opening archive.
> Changed all LockLooper()s in code to Lock() version -- Jeremy Friesner's suggestion.
> Finally BeIDE.zip works fine... good progress.
> Complete rewrite of TestOutputReader... now uses fgetline so I can use the progress window.
> Secondly, the ArchiveReader of ZipHandler increments "m_directoryCount" of ArchiveHandler.
> The m_directoryCount will come in use when I need a count of both dirs and files in archive.
> Added TestFinished function to ArchiveHandler, now testing is done similar to extracting.
> Made progress window and extraction/testing synchronous. Found and fixed this bug.
> Since synchronous, our extraction/testing operation will not be "ahead" while status is updating.
> Now cancel operation works very well in ProgressWindow.. very responsive.
> Now stat: Extraction of BeBook.zip(~640 files): Squeezer took 49 sec. Our's it took 43.
> Bug Fix: In HashTable's MakeEmpty() function. Now deallocation works...
> Checked hash table contents, is fine - stores list of unique directory paths.
> Changed name of ErrorWindow to LogWindow (all occurences including LangStrings')
> Changed place where hash table is allocated, now it is done after knowing no. of dirs
> Now stat: BeBookmarks.zip(~6000 files): Squeezer used 14424 OS allocated 21448 KB
> stat cont'd: Beezer used 11688 KB OS allocated 15544.
> Now stat: BeBookmarks.zip(~6000 files): Squeezer took 1:00 sec to load. Beezer took 36 sec.
> Completed structured list in Beezer.
> Structure list is implemented using hash tables -- for full details read StructureList-Notes.txt
> Changed Extension() function - it doesn't return a "new" string with extension just a pointer.
> Now stat: BeBookmarks.zip(~6000 files): Squeezer took 1:01 sec to load. Beezer took 41 sec.
> Great stat... Beezer even after the structured list is speedy and memory efficient too..
> Changed M_SELECTION_CHANGED of MainWindow MessageReceived.
> Now if ONLY directories are selected ActionLaunchers are disabled ie View, Delete.
> Because I can't view a directory (as of yet atleast). This may change...
> Added gripper drawing code to SplitPane.. SplitPane now has edges to "grip"
> Bug Fix: That caused app to crash when listview was double clicked using right button.
> Rewrote draw code of Toolbar.. much nicer now, colors are chosen well..
> Minor change to OutputText of MainWindow() removed strlen("\n") and substituted it with ++
> Changed file panel title for Extraction process to something like "Select path to extract archive"
> Bug found: Since I changed Extension to not return "new" string it is case sensitive
> Bug fix: Now empty directories (ie folders without any files) inside archive is listed
> Now stat: BeBookmarks.zip: Squeezer took 1:00 sec to load. Beezer took 40 sec. Good !
> Added "Preparing for..." string to the progress window while it waits before anything starts.
> Bug fix: Double-clicking on empty areas in list doesn't crash app anymore.
> Bug fix: Fixed packed column for large files, eg: WA.img in Worms Armageddon.zip.
> Changed column-N ? 1 : 2 to just + 1 -- I don't try and skip 2 spaces assuming it will be a space.
> Now the ZipHandler is more tolerant and possibly error free ...
> Bug fix: A space was found before all the pathnames, now this is fixed (ArchiveReader())
> Now stat: BeBookmarks.zip: Latest Squeezer-29 sec to load. Beezer took 39 sec. VERY BAD!
> Changed to -qq (very quiet) mode for unzip while opening files, I don't get column headings.
> Bug Fix: Fixed a few bugs in selection (collapse using LEFT arrow) in BeezerListView.
> Added GetByteSizeString() to ArchiveHandler, now size, packed use that function.
> Bug Fix: ListEntry where truncate was specified as false in 1 constructor should be true.
> Many draw changes (border draws) to Toolbar.
> Tweaked ColumnListView to draw like the Toolbar (colours tweaked, more 3d look to CLV now)
> Changed the expand and collapse bitmap colours -- to red and blue, looks nice now.
> Bug Fix: MainWindow CompareFunc, now sort works fine & sort folders first.
> Bug Fix: Approximation bug in BeezerUtils::BytesFromString, now uses strtod (double)
> Sorting of Size, Packed columns is now perfect.
> Bug Fix: Found in BeIDE.zip (last file was not getting listed). Removed -1
> MainWindow's MessageReceived now has check for < totalItems instead of < totalItems - 1
> Wrote a new Extension function (preserved old one too) that returns extension in lowercase
> Added Expand/Collapse items to Edit menu (not yet implemented)
> Reorder Options menu, brought sub-menus to top
> Changed draw code of BevelView, nothing much changed StrokeLines to AddLines (efficient)
> Made some functions in HashTable as 'const', more efficient this way
> Changed dbl-click action for folders, if a folder is expanded dbl-clicking it will select all files in it.
> Bug Fix: In Extension (that returns in lowercase).
> Reduced IMAGE_BUTTON_WIDTH by 2.
> Reduced m_ptToDraw (3,3) to m_ptToDraw (3, 1) in Toolbar class, now height has reduced.
> Bug Fix: Fixed yet another bug involving indices of string in Extension function.
> Added a confirmation when user tries to View/OpenWith more than 10 files at a time
> Added "Extract Selection..." to Actions menu
> Made ENTER key work for multiple selections
> Removed LEFT arrow behaviour (collapsing) when there is a multiple selection
> Solved a synchronisation bug (ie copying of Lists by ArchiveHandler is not done)
> Instead of handler locking window its now a rule only the window locks and controls the handler.
> This solves many threading problems including the deadlock problem while quitting.
> Removed Hide() from QuitRequested() of Window as it makes it look as though app is crashed.
> This happens in large archives like BeBookmarks.zip, so Hide() has been removed.
> ExtractEntryToTemp no longer uses Command but used CommandIO.
> Thus if Beezer is launched from Terminal, output of unzip won't be shown there.
> Several clean-ups in error handling of ZipHandler.
> Now ZipHandler will decide the path of unzip, zip etc, MainWindow will not pass this anymore.
> MainWindow doesn't need to pass listView to ArchiveHandler/ZipHandler any more.
> Lots of minor clean-ups like changing static error constants in ArchiveHandler to #defines etc.
> Changed constructor of ZipHandler to check for errors of unzip/zip not being present.
> Added InitCheck() to ArchiveHandler for error handling if unzip/zip is absent from MainWindow.
> Planned to make ZipHandler an add-on, problem is how do I make addons according to mime.
> More cleanups: Removed HandleBadArchive, HandleGoodArchive functions.
> Added OpenFinished function now follows suite w/ other functions TestStarted, TestFinished etc.
> Now opening and file reading functions all return error codes, they don't do UpdateUI() etc.
> Removed HandleTestOuput() and everything is now done in TestFinished() function
> OpenFinished function now handles communicating with the window aftering opening files etc
> Bug Fix: in TestOutputReader, remember: use always BString's Length instead of CountChars()
> Now test output contain accented characters will not crash the app due to bad length.
> Changed OutputText of ArchiveHandler to send a message rather than locking MainWindow.
> Removed Locking/Unlock of MainWindow from ZipHandler's ArchiveReader function.
> Now if window quits at ArchiveReader function, Lock() in MainWindow will wait for it to finish.
> Possibly solved all sync problems I had so far.
> Removed some unimplemented (forgotten) functions from ArchiveHandler's header.
> Functions like CanLockWindow, UpdateMasterIfNeeded etc are no longer needed or present.
> Added UpdateFolderSelectNeeders() function in MainWindow.
> Implemented the enabling/disabling of FolderSelectNeeders thru MessageReceived.
> Made SplitPane do SetViewResizeOne (true, true) meaning views will resize accordingly.
> This isn't perfect though, maybe needs a bit of tweaking but a good solution for now.
> This not so perfect behaviour is also seen in BeShare, so I can take time to fix it (very minor).
> Bug Fix: selection bug in BeezerListView (caused due to SHIFT handling).
> Beezer will adhere to BeOS standard of multiselection (using ALT/CTRL rather than SHIFT).
> Shift is used for continuous selection while ALT/CTRL for irregular selection like other BeOS apps.
> Bug Fix: when just 1 item was there in the zip (selection bug in BeezerListView)
> Completed the "Extracted Selected..." option .. lot of work.
> Added AddFolderToMessage() function to MainWindow that adds all files' paths to a message.
> Made functions and other changes to ZipHandler to support extracting of selected entries.
> Also, ZipHandler's ExtractorReader() code is reused -- works fine for selected entries as well.
> Now when a folder is not expanded only THAT folder entry is extracted (not subitems)
> Maybe this might change in the future, ie extracting of subitems of an expanded entry.
> Changed already, expanded/collapsed folders are now fully extracted -- seems more practical.
> Implemented disabling/enabling of Extract Selected menuitem, added UpdateSelectNeeders()
> Changed name of UpdateActionLaunchers() to UpdateFileNeeders()
> Added AddUnderFast() to BeezerListView -- made some private's of CLV to protected.
> Not too much speed difference yet, only about a second in BeBookmarks.zip
> Removed AddUnderFast() function as it has a big bug which if fixed will get back to old speed.
> Bug was when adding items if selection changes the new item is added under selection.
> Created StartupWindow class, works just like in Squeezer.
> Minor adjustments to colour of BevelView's draw (btOutset draw)
> Changed menu Options to View, moved Archive Info to View menu.
> Added File Info item to View menu, updated UpdateSelectNeeders() with File Info.
> Removed Locking of be_app at MainWindow's QuitRequested() -- seems safe without it.
> Implemented startup window as the first window.
> Implemented ReadyToRun() to not show startup window when opening files from Tracker.
> Erraneous zip files are still loaded now -- after shoing error alert (ArchiveHandler's OpenFinished)
> Bug Fix: In sorting of columns, when neither ascending/descending was selected.
> Disabled bubblehelps on window QuitRequested() for Main, StartupWindow.
> Now bubblehelps don't show in odd places after window is gone (happened for StartupWindow)
> Disabling of bubblehelp for MainWindow is removed now, as new windows didn't have it.
> Bug Fix: resize draw bug in ColumnLabelView, gray line while increasing size is no longer there.
> Changed enabling of menus even to corrupted archives (MainWindow->M_OPEN_FINISHED)
> Now, corrupted archives, or non-archives (with archive mimetype) are treated as valid archives.
> Added a check to BubbleHelp (pair->view != NULL) which fixed out-of-place help bugs.
> ArchiveHandler is no more a friend class of MainWindow - first step in making add-ons.
> Now, ArchiveHandler class can probably me made a library and ZipHandler an add-on...
> Removed ShowOpenWithDialog, OpenFolder from ArchiveHandler and put it in BeezerUtils.
> Made the two functions accept pointers rather to save multiple copies of entries.
> Bubblehelps again showed tips at the wrong view (BeezerListView had "Open archives" tip)
> The problem was found with ImageButton's MouseMoved() which locked the window.
> Now the Locking is removed from ImageButton and hence window gets freed, BubbleHelp works.
> BubbleHelp is back to original self (a check I added in BubbleHelp is now removed as un-needed)
> "delete entry" added to AddToListView -- now memory usage improved a lot !
> I'm are on-par or even better than Squeezer in memory usage...
> Changed the icon of Beezer once again, maybe this will last for sometime :)
> Seperated MainWindow, ArchiveHandler completely in terms of includes and friends
> ArchiveHandler must be made a library, but it uses many classes like HashTable etc... so ...
> HashTable class and other classes are also used by MainWindow, what next?
> Added AllocBitmaps to Beezer class, now bitmaps are ALL global -- others will just use pointers.
> Added _bzr() to BeezerUtils for convience.
> Removed deleting of bitmaps from ImageButton and ArchiveHandler.
> Made StartupWindow, MainWindow, ArchiveHandler all use global bitmap pointers
	without copies.
> Removed many unwanted forward class declarations from several headers.
> Added m_processMessages flag to MainWindow, now after quit, close this flag is OFF.
> I suspect a safer close, quit because of this flag since PostMessage() is asynchronous I used this.
> This flag thing was suggested by Jeremy (of BeShare)...
> Removed this flag as its no longer needed, since Quit() is safe to call from message-loop.
> Removed deleting of file panels (both Open of Beezer, Extract of MainWindow)
> Now delete takes place only on close, just show() is called each time it is invoked (cancel hides it)
> Removed accessing of m_appWndList from MainWindow Quit()
> Added a quit bool to BroadcastStatus, so Beezer will handle removing from the list.
> Removed SetTitle() from MainWindow constructor as it invokes BroadcastStatus()
> This may lead to some problems while opening several files (quick flow of messages in Beezer)
> Yes finally fixed the problem in Bone, Dano system.. it was due to the undeleted file panels.
> Changed the entire project! Compiled libbeezer.so (many code changes)
> Really big change -- now lets see if I can get the add-on architecture done.
> libbeezer - includes clv, apputils, archiveentry, archiver, hashtable, listentry
> Changed BeezerSorter to ListSorter class which accepts a compare_func ptr. Still to be tested!
> BeezerUtils has been renamed to AppUtils.
> Added StrDuplicate function to AppUtils.
> Changed Archiver to suit the add-on architecture. Lots of stuff has been left-out.
> Archiver class now accepts a BList (of BBitmaps) and stores them in form of named-pointers.
> Archiver is not inherited from BLooper anymore - its been made into a shared object.
> Also Archiver includes a status_t variable to hold erraneous info when needed.
> Removed a lot of cruft from BeezerSorter (now called ListSorter).
> Removed SelectionSort routine from ListSorter as I found it doesnt make much of a diff in speed
> Project changed -- not yet added anything like MainWindow, etc.
> Projects will now on be named with an underscore in front, so they are on top of Tracker's list.
> Successfully compiled libbeezer.a - static library... Next step is the Zip Handler.
> Successfully compiled (bare bones, stripped down compile) Zip Handler -- ark_zip add-on.
> ark_zip now uses statically libbeezer.a and dynamically libbe.so.
> Added ArchiverMgr to manage loading of add-ons and also export _bzr()
> Changed all BeezerUtils and AppUtils
> Successfully compiled the main Beezer app.. tons and tons of changes.
> Bug Fix: HashTable - if(strcmp(some,some)) to if(strcmp(some,some)==0) in Find function.
> Succesfully loaded BeBook.zip - Flickers a bit due to UpdateIfNeeded() function.
> Load time seems to be a bit slower... not thinking about this right now.
> Bug FIx: handling of zip load errors once more, got away with mime error detection in the addon.
> Mime errors are not checked from the add-on as they are done so BEFORE calling an add-on.
> Added foreground colors (functions + draw modified) to selected items in ColumnListView.
> Implemented foreground color from Beezer after recompiling Archiver, ZipHandler.
> Made viewing of files work -- now code is cleaner as all OutputText are controlled from Window.
> From now on, no need for add-ons to think about Outputting any text to the log.
> Made extraction work. Added _extractor thread to do this, communication via BMessages.
> The _extractor thread posts message back to MainWindow after extraction.
> Made ark_zip check if the message to update the progress bar is actually B_OK, otherwise quits.
> Now the "Cancel" operation in extraction works very well.
> Bug Fix: a bug in Invert selection, now works perfectly.
> Now stat: BeBook.zip: Squeezer: 36 sec to extract, Beezer took 36 sec. Exactly on par.
> Now stat: BeIDE.zip: Squeezer: 2 sec to load, Beezer took 4 sec. Same as before...
> Bug Fix: in Window listing process, now removeWnd is checked before posting message.
> The above line pertains to Beezer class' Broadcast operation.
> Made ProgressWindow Hide() rather than Quit() when "Cancel" is clicked - a nice bool.
> Made the CancelOperation() function fool-proof, now works very well - checks with IsHidden()
> Removed the verification for sending the UPDATE status bar message.
> Made Testing work, no bugs detected so far works well.
> Binary size is now bloated to 415 KB, must see how to reduce this.
> Bug Fix: Changed ColumnListView to delete all CLVListItem it owns -- memory leak fixed.
> Removed HashEntry's deleting of clvItem it holds a pointer to.
> Bug Fix: in quitting, opening several files at once by using WindowMgr class.
> WindowMgr class now manages the list of running windows to keep track of Windows menu.
> WindowMgr is a thread-safe class that implements BLocker.
> Made UpdateFrom() function also threadsafe, maybe this solves the rare opening hang-up bug.
> Removed locking of UpdateFrom() function as it lead to a deadlock sometimes.
> Made AppUtils' global functions as extern, -- maybe because LangString.h does it (from beshare)
> Successfully added volatile bool support for cancellation of extraction, testing.
> Now I need not Hide() the progress window or anything clumsy like that to detect a cancel.
> Made M_OPEN_REQUESTED from MainWindow as a synchronous message.
> Merged the 2 Extract() (with,without BMessage*) in ark_zip (changed also Archiver base class)
> The merging reduced the size of the add-on binary, and improved the interface to the addon.
> Merged again Extract()'s.. This time temp file extractor, the above extract has been merged.
> Merger didn't reduce binary size much, but makes the interface more consistent.
> Changed toolbar draw code a bit to match the look of the ColumnListView's headers.
> Made "Binaries" dir support, now archivers must use binaries from this folder.
> The path to the Binaries folder is passed to the load_archiver() function now,
> Updated InitPaths() of Beezer to walk the path to the Binaries dir from the Beezer binary.
> Custom Binaries works, next step is checking what if that binary is missing...
> Wrote code for Expand/Collapse All -- Used function pointers, works fine. No optimization tried.
> The Expand/Collapse All seems to be on-par with Squeezer's. Not planning on optimizing here...
> Added m_contextMenu to MainMenu as BPopUpMenu object.
> Added context menu items View, Open With etc. -- not yet implemented these though.
> Added SetContextMenu () function to BeezerListView - gives it pointer to context menu.
> Added right-click popping of context menu from BeezerListView, works - Next is implementation.
> Right-click now selects an item if it isn't selected, but doesn't extend an existing selection.
> Created ArkInfoWindow class, added icon view and title view (file name ie. leaf)
> Made changes to ListEntry to store ratio, packed and length for each item.
> Completed ArkInfoWindow class, works fine except for Compression Ratio.
> There is a minor diff between Squeezer, unzip and Beezer in Compression Ratio figure.
> Bug Fix: Toolbar to draw fully when hidden - GUI bug fix.
> Made ArkInfoWindow a subset modal window of the calling window - ie caller only is blocked.
> Coded File->Delete Archive: Move To Trash and Permanent Delete both are done.
> Custom bug-workaround in SplitPane: Right-clicking hidden log changes orientation properly.
> Must code LogView (OutputTextView derivation) for implementing right-click context menu.
> Maybe in this LogView I can get a neater way for OutputText insertion function...
> After a lot of hunting - finally fixed compression ratio perfectly: (original - compressed) / original
> Must I calculate ratio while parsing the archive - because binaries like gzip may not print ratio?
> Calculated ratio at run-time - now stored as a float. Made changes to ListEntry, ArchiveEntry.
> Changed float to int8 since I don't use ratio for calcs. Besides displaying without decimal is nice.
> Renamed BevelView's member functions to suit Beezer project's convention. ie. "m_" prefixed.
> Added BarberPole class into codebase. Compiles okay - yet to actually test it in the GUI.
> Created GZipHandler archiver. Initially code for opening pure .gz files is done. Very basic.
> Writing ReadOpenTar() to handle tar.gzips/.tgz. Seems I need to copy the archive to tmp.
> Sucessfully opened tar.gz file -- works fine.
> Bug Fix: ArkInfoWindow to report correctly even if individual compress entries aren't present.
> Bug Fix: AppUtils::RemoveDirectory(); now the passed BDirectory is Rewind() before delete.
> Wrote Extract() and ReadExtract() functions to GZipHandler.
> Added m_tarEntry variable to protected list of the GZipHandler class to hold the tar's entry.
> Added kTarPath, kCpPath as constant paths to Archiver.h - so tar.this and tar.that can use it.
> Bug Fix: in ReadTarOpen () in Archiver -- now permissionStr is also checked for dir path.
> Added AvailableColumns() in Archiver -- not yet working fully - must implement thru Beezer.
> Removed "Rename" from context menu, instead added Clipboard Copy.
> I decided that the context menu will apply the options it presents for ALL selected items.
> Added m_columnsSubMenu pointer and m_sortBySubMenu pointers to MainMenu.
> Implemented hiding of columns from Beezer, works fine. Modified ToggleColumn().
> Fixed bug in m_directoryCount handling - This variable isn't fiddled by derived arks any more.
> m_directoryCount = uniqueDirCount is the done in Archiver.
> The above bug was discovered when Pe.tgz didn't have '/' as last char or permission for folders.
> In which case the directory count was zero - this is now fixed for all archives.
> Wrote LogTextView class - implemented context menu popping - yet to program items inside.
> Removed OutputText() from MainWindow and replaced it with m_logTextView->AddText().
> LogTextView works well, everything seems normal.
> Coded "Clear Log" option in the log view's context menu.
> Implemented View, Open With and Extract options in the list view's context menu
> Added icon recognition extension ".tgz".
> Added SelectAll() InvertSelection() to BeezerListView.
> Also added ToggleAllSuperItems() and ToggleSelectedSuperItems() to BeezerListView.
> Changed AppUtils::CreateTempDirectory() a bit to suit MainWindow's needs - uses that now.
> Made changes to open pure .tar files - For now Gzip handler does this...
> I _may_ have a problem when tar.bzip2 also tries to suppor pure .tar files.
> Fixed bug in ArkInfoWindow for displaying -ve ratio for pure .tar files.
> Started work on SearchWindow.
> Sucessfully modified and compiled TrackerString as RegExString (accompanied by RegEx.cpp,.h)
> SearchWindow should now have proper RegExp support.. at last!
> Planned BeezerListView will do finding, SearchWindow will simply post message to MainWindow.
> .. and mainWindow will call BeezerListView's finding/selecting function.
> Added Search() function to BeezerListView, tested it with hardcoded message - works!
> Now all I have to do is implement the search interface in SearchWindow.
> Added CopyToClipboard function to BeezerListView.
> Made CopyToClipboard order-sensitive and visiblity sensitive.
> Now copying to clipboard will produce the exact order/visibility as in the list view.
> Added UpdateWindow() convienience function to BeezerListView.
> Added "Copy" to Edit menu. Now available both in context menu and edit menu.
> Added "Copy" to Log context menu, implemented it - Added Copy() to LogTextView.
> Made Edit->Copy work for both ListView, LogTextView according to focus.
> In the processes inherited MakeFocus() functions of ListView and LogTextView.
> Added UpdateFocusNeeders() function.
> Added Missing archive error detection in ArkInfoWindow -- plans to do it everywhere needed.
> Fixed bug in ZipHandler, GZipHandler -- *outputStr = '\0' replaced by outputStr = NULL.
> Added BZR_CANNOT_TEST flag to Archiver - implemented for pure .tar files in GZipHandler.
> Unlike Squeezer testing a .tar file will not force gzip to test it, but will flag a cannot test error.
> Support for passworded zip is being examined...
> While opening - no problem I needn't specify the password - only while extraction its needed.
> I get a "incorrect password" line in the err stream (if I supply -P wrongpwd).
> If I don't specify any password unzip simply halts forever asking for the password.
> Added "Img:Busy" and "Img:Ready" icons :) InfoBar (aka status bar) is coming up!
> Added kSearchSelection option to the Search of BeezerListView -- tested, works fine.
> Finished basic GUI of the Search Window - implemented disabling of Search button as needed.
> Fixed a minor bug in the test process of ZipHandler - check with Summon-New.zip.
> The bug fix involved adding an "errFlag" to ReadTest() function of ZipHandler.
> Also the error checking while loading the archive may need to be fixed.. ?? Look into this...
> For the above line - check with Summon-New.zip  - Squeezer shows an error differently.
> Implemented Searching -- preliminery test shows it works.
> Fixed bug in searching all entries with add to selection turned on.
> Added "Persistent" option to keep the Search Window on screen after a search.
> Fixed bug in selection search: kAddToSelection was used in a place instead of addToSelection.
> Search operation now works fine -- next is remembering search options... (temporarily).
> Fixed bug in ZipHandler; empty zip filesTest process (empty zip file warning is now ignored).
> Added bubblehelps to Search Window and new bubble help text for MainWindow toolbar.
> Set the bubblehelp timer (globally since only 1 object for whole app) - In Beezer.
> Moved the removing of StartupWnd from RefsReceived() to CreateWindow() in Beezer.
> The above was done because when create archive is used RefsReceived won't be called.
> Moved the removal of list items (in destructor) from ColumnListView to the BeezerListView.
> Moved ColumnCompareFunc from MainWindow to BeezerListView (renamed as SortFunction).
> Yet to implement proper sorting of hierarchical items in Size, Packed columns...
> Made static functions of AppUtils thread-safe by using BLocker locking object (just to be sure).
> Added InfoBar class (basic drawing of empty view with 3d edge done)
> Made hiding, showing of InfoBar - done just like Toolbar.
> Cleaned up several things in ToolBar - renamed DrawShinyEdge() to RenderEdge(),
> Added IsHiding() functions to ToolBar and InfoBar, made m_isHidden as protected member.
> Added menu item for hiding/showing Infobar - coded implementation, works fine.
> Made the busy/ready holding BView as an ImageButton
> Added Clickable(), BorderPadding() functions to ImageButton.
> Fine tuned ImageButton a lot - lot of cruft removed, changed border style (works fine now)
> Fixed problem with bordered ImageButton and BubbleHelper (had to do with Draw)
> To fix: InfoBar's m_stateView's height - seems to be bigger than the InfoBar size.
> Note: Don't increase the InfoBar's width - instead mess around with either ImageButton/ResizeTo
> Fixed: the m_stateView is now proper height and has been centered vertically in the InfoBar.
> Fixed: bug when InfoBar hides (when action log is also hidden the log goes out of window).
> Added Settings menu with options. Would be easier to write 3 windows than combining prefs.
> Fixed very minor draw bug in ToolBar class.
> Made caching of search text by MainWindow, so next time it is passed to SearchWindow.
> Fixed minor bug in ImageButton - one still left - try using keyboard to change enabling when
	the mouse is held down. Then the next hover over the ImageButton draws wrongly..
> Must find a way to lockaway the keyboard while the mouse is held down.
> Discarded the BarberPole class that was downloaded, instead I made my own.
> The new BarberPole (added to the main code base) is quite good in drawing, efficiency.
> The new BarberPole draws using an image, not how the old one used to draw (using patterns).
> Implemented SetValue() in BarberPole to show while animating and hide when not animating.
> Added .DOC extension (with text file icon) in Archiver.
> Fixed minor draw bugs in BarberPole - synched with main app - works fine (while loading).
> Removed the traffic signal state view from the project - including images.
> Made Show() and Hide() from MainWindow rather than from SearchWindow.
> Fix: As a result the error message BAlert works (both in Persistent window ON and OFF).
> The next step is to remember the other search window options like column name, options etc...
> Bug Fix: Made locking of keyboard when mouse is held down in ImageButton.
> Bug Fix: If archive is deleted after opening in Beezer, and extract/test is called - error is shown.
> The above fix involved changes in ZipHandler, GZipHandler and MainWindow, LangString.
> Bug Fix: Pure .gzip files that don't end with .gz extension is also opened by Beezer now...
> The above bug fix was made to GZipHandler's Open() function...
> Fixed bug in SearchWindow - now SearchWindow::Quit() posts a message to MainWindow.
> Made ALL settings reload in SearchWindow each time it is called - uses BMessage to store/load.
> Added window position loading in SearchWindow (BMessage::AddRect()).
> Bug Fix: In ReadGZipOpen() when erroraneous tar.gz file is opened - like f1.tar.gz.
> Implemented Select of context menu - selects all folder items of all selected items.
> The above required changes to BeezerListView. Added: SelectSubItemsOfSelection().
> Also added Deselect functions for the same.
> Bug Fix: in Select/Deselect of context menu (added NULL checking).
> Added "Files" display to the InfoBar.
> Implemented changing of file count as selection changes.
> Made changes to BeezerListView - SelectionChanged(), added SendSelectionMessage().
> The above change was made to NOT send many selection message for Select All operation etc.
> The above hack prevents window lock up for several seconds, yet updates controls as per
	the selection - both toolbar, infobar etc update.
> Implemented bytes display string in the InfoBar.
> Moved the hack in MainWindow to BeezerListView - that is selection changed message is send
	only after all the selection takes place in the operation like SelectAll - finally its sent.
> Next must implement buffered drawing for the InfoBar and probably update on pulse...
> Discovered bug in Squeezer but not in Beezer!!
> The above bug was found in Repository.zip - just try zipping CivCTP folder + another folder
	in the games folder, then open the zip thru Squeezer, Beezer. Squeezer shows an extra dir.
> Discovered bug in Beezer, Squeezer & Expander - yes.. unzip -o still asked for a confirmation
	in Repository.zip (as it had some symlinks to some zipped folders not yet unziped).
> The above bug has not yet been adressed...
> Implemented double buffered drawing in custom string view. Used for Files:, Bytes: display.
> Not much flickering now... but the Bytes: display flickers a bit.. really strange.
> The result of buffered drawing is that I cannot dynamically resize the string views.
> This is because BBitmap has no resizing functions :)
> Error discovered: Try opening the .gz file's content in Expression-Parser.gz. Wrong parsing.
> The above bug pertains to GZipHandler's parse routine.. Must workaround.
> Changed Quit()ing of StartupWnd to Hide() as Show() will restore the position if it was moved.
> Bug Fix: Bytes display flicker - it was occuring because of overlapping of the 2 info views.
> Now the displays are truly flicker free :)
> Made updating of InfoBar on every pulse message - received in DispatchMessage().
> This works very well, but its not very nice to use DispatchMessage().
> Changed the descriptions of the tooltips in Search window - fixed a few gramatically errors.
> Turned off pulse request when the window isn't active -- this frees up CPU when app not active.
> Also the pulse rate is set to a granularity of .8 second -- its fine now.
> Bug Fix: In closing of window - sometimes StartupWindow doesn't show up - fixed now.
> The above bug was because Hide() was being called each time a new window opens.. but
	Show() was called only once ie when the last window is closed. This is now fixed as Hide()
	is called only when the StartupWnd isn't already in Hide() mode.
> Bug Fix: In Hide() of SearchWindow without locking window - now its locked b4 calling Hide()
	from the MainWindow interface.
> Changed ArchiverForMime(): This function now retrieves Binaries, Archivers dir paths rather
	than getting them from the Window. This is probably more thread-safe as the function
	is encapsulated within BLocker.
> Implemented BAutolock - now locks a global BLocker - before this was a local BLocker to the
	ArchiverForMime() function. Now it should be truly thread safe.
> Error discovered: Still sometimes (when Beezer is run for the first time) when opening multiple
	files, one window among them gets stuck. Some threading problem - must fix.
> Bug Fix: The above bug is now fixed - Shifted replying of Message in M_OPEN_REQUESTED
	to be posted AFTER OpenArchive() is complete. Or else I get some thread problems
	involving a semaphore titled "piperd". Whatever it may be, its now fixed.
> MainWindow doesn't talk with WindowMgr class except when it quits.
> Interchanged names of ReadTarOpen and ReadOpen() in GZipHandler.
> Cleaned up some code in GZipHandler - now it adheres to the ZipHandler format (in code).
> Crossed the 10,000 line mark in the code... yay!! ;-P
> Bug Fix: Now all windows get the full window list - this wasn't being shown before properly.
> The above fix violates the rule that window won't talk with WindowMgr - this rule is gone now.
> Put BLocker on heap and implemented BAutolock class for WindowMgr.
> ZipHandler now parses the path names out in ReadTest().
> ReadTest() now parses out just the filename from the path name - similar to ReadExtract().
> Removed HashTable::Find (char*) as it wasn't being used. Retained the const char* version.
> Implemented global BLocker for AppUtils also. Now CreateTempDir, RemoveDir etc. all wrap
	around this BLocker object using BAutolocks.
> Added application/tar type to the Beezer resource file, can open .tar's now from Tracker.
> Made BarberPole not change the window pulse rate unless needed.
> Shifted archiver specific tasks in OpenArchive() to InitArchiver()
> Added AdjustColumns() function - the reason why I do this is I'm preparing for
	the Creating an archive function.
> Added virtual SupportComments() functions to Archiver, ZipHandler, GZipHandler...
> Yet to implement SupportsComment() correctly - ie "Actions->Comments" disabling/enabling.
> Bug Fix: SupportsComment() is now done - UpdateValidArchiveNeeders() were conflicting
	with this implementation - now fixed UpdateValidArchiveNeeders() as well.
> Added full support for missing binaries, missing optional binaries in both Archiver and addons,
	as well as in the main Beezer project.
> ZipHandler now treates zipnote binary as optional. It will work without it too...
> Wrote CommentWindow class - basic loading of zip file comments are now done.
> Saving of comments to zip file will need a bit of work. zipnote is needed to save...
> Sometimes Open With... will show the generic apps - this is because Tracker doesn't
	Identify the file - to solve this (temporarily) I first use Open, then use Open With, this
	way the file is identified by Tracker just before Open With dialog opens up.... This isn't a bug
	with our program as I don't know how to Identify files. It would be very nice though if
	I found a way to Identify file thru Tracker.
> Error opening some .gz files - the output sometimes includes a random "-" sign between
	uncompr. and ratio fields. Seems solvable... but needs a bit of work. The error came up
	when i opened "Root.gz" WITHIN Expression-Parser.tar.gz. This bug isn't there in Squeezer.
> Bug Fix: The file identification bug is now fixed, now AppUtils (TrackerOpenWith () function)
	fixes the problem of un-identified entries - there is a be api function itself to do this :)
> View, Open With options in context menu are disabled when directories (alone) are right-clicked.
> Bug Fix: Fixed the "-" bug in gzip output... Now a new bug has cropped up.
> The new bug is that I am not able to view/open with the contents of a pure .gz file.
> Bug Fix: Fixed all known issues with tar.gz, gz and .tar files. Now viewing/open-with operations
	work on pure .gz files - what I do is make a copy of the content file to the requested
	temp. dir. Though this requires more space its a safe operation. One thing I can do still.
	I can try and LINK the temp. dir to the temp dir made by gzip. This way I will save
	space & still NOT open the file as a link but as a file itself as I am only linking the dest dir.
> The above linking was done - lots of code workarounds as a result happened.
> Code workarounds for the link problem was done in MainWindow destructor and in ViewFile()
> Added ResolveTempDirLink() function to MainWindow.
> ~MainWindow() and ViewFile() both call ResolveTempDirLink() function.
> All issues regarding viewing/open with files in gzip, tar.gz resolved. Only thing remaining is
	sometimes some files are mistaken marked as executable - so just View won't work, this isn't	
	a problem with Beezer its a fault with the producers of the archive.
> Bug Fix: Testing zip files with comments no longer causes "an error found" message.
> The above bug incorporates fixes to ZipHandler::ReadTest() function.
> Wrote WriteCompileTimeToRes () function - now compilation time & date is stored in resource.
> Passed on the compile time string to AboutWindow() constructor for displaying in About box.
> AboutWindow now displays compile date and also build type - either debug or release.
> Prevented re-writing of compile time to resource if the compile-time already exists in the res.
> The above is done so that each time Beezer runs the exe doesn't end up modified.
> Added K_WINDOW_PULSERATE constant to AppConstant.h - just to standardise things...
> Added SetComment() virtual function to Archiver()
> Finished writing of comments to zip file. ZipHandler() neatly implements SetComments() function.
> Now saving, loading of comments to zip file works...
> Removed CompileTime from writing to resource as it is un-needed...
> Found a bug in this aproach of getting compile time. I get compile time strings only in
	Beezer.cpp thus only if Beezer.cpp is recompiled will our compile time string update otherwise
	compiling anyother file won't affect the compile time. Must find a way to update compile time
	even when a single file is compiled.
> Added "Img:Comment" bitmap to resource, changed the Comment window to show this...
> Comment window looks much better now :)
> Now: when opening zipfiles with comments the comment window automatically opens up.
> Bug Fix: GZipHandler no longer uses the linking of output directory. This is because in normal
	extracting of .gz files the output dir will be replaced by link to the temp dir which is chaotic.
	I've lost the "queries" folder in /boot/home in testing :-(
> Bug Fix: Now GZipHandler makes a copy - no matter if more diskspace is used. It's safer.
> Bug Fix: Fixed all issues with .gz files in GZipHandler. Now the problem of view/extract is solved
	by copying the ORIGINAL .gz file (in case of .gz only) to the destination dir (whether temp
	or not) and then running gzip on that file...
> Update Beezer main app - removed ResolveTempDirLinks() etc. and restored things to normal.
> Beezer.cpp is now timestamped 30 years in the future ;) So that it recompiles each time...
> The above was implemented using Timestamp.sh that is added to the BeIDE project and made
	to run in the Precompile stage. Now the app's compile time is recorded each time as
	each time Beezer.cpp (where date, time is calculated) is recompiled.
> Added TimeRestore.shr (shr is just another extension to make BeIDE compile it in PostLink
	stage - since sh is compiled in Precompile stage). This will restore Beezer.cpp to the normal
	modification time after compile/link has finished.
> Renamed scripts as future_timestamp.sh and restore_timestamp.shr & put them in Scripts dir.
> Plans to rewrite entire GZipHandler... I just discovered I can use -z option in tar itself to also
	handles tar.gz files rather than copying, running gzip on the tar.gz to produce .tar then use
	tar on it. What I can now do is handle tar.anything without making copies - this includes
	reading as well as extract/view. No copies needed.
> The next thing is I must figure out how to handle pure .gz files. (This tar can't handle it seems).
> Implemented BitmapMenuItem - now a system menu with Beezer's icon is drawn which has
	items like About Beezer, About the Author, Quit.
> Bug Fix: in ImageButton::WindowActivated() now - dehighlight button when not active window.
> The next optimization to do is to share the system menu icon - (thru Beezer.cpp somehow).
> I try to do the optimization as, as new windows loads each will be holding copy of the bitmap.
> Hmm, maybe I can write a BitmapPool class and remove including Beezer.h (from MainMenu).
> By holding BitmapPool class I can free-up Beezer from handling bitmaps.
> If Beezer holds bitmaps, it becomes messy as many classes include Beezer.h which isn't a good
	practice as Beezer.h is the master. I want to avoid including Beezer.h as far as possible.
> Successfully compiled URLView class. Also made modifications to URLView to suit Beezer code.
> Added URLView and William Kakes to the About box list of credits...
> Completed AuthorWindow class. Now that I've done that, time to seriously think about
	rewriting add-ons completely. Things I need to change: make add-on handle temp 
	directories rather than the main app, make a simple and data-redundant-free structure,
	i.e. don't hold BPath as well as entry_ref object etc. Make the interface completely simple,
	fool-proof...
> Cleaned up Extract() code in ZipArchiver - ZipHandler deprecated- not to be used anymore.
> ZipArchiver now handles temp directories, main app doesn't. Note GZipHandler will be broken
	at this point of time. Don't try opening gzips.
> Removed strdup while allocating argv[] array in ZipArchiver - advise from Jeremy (BeShare).
> Added m_tmpDirectoryStr to Archiver base class, MakeTempDirectory() function.
> Removed strdup in Open() function of ZipArchiver - code seems neater already...
> SetComment() does not need tempDirectoryPath anymore. Caller is freed of temp dir again.
> SetComment() works in ZipArchiver just as before - except caller is freed of knowing temp.
> Removed strdup from Testing as well - now ZipArchiver is free of strdup calls. Good.
> The above thing is good as I don't unnecessarily complicate things.
> Bug Fix: Context menu now doesn't disable View, Open With when multi-selection with directory
	being right-clicked. Now if the selection contains even 1 file, View, OpenWith are enabled.
> New Beezer logo in AboutBox made from Photoshop 7 :)
> Major Change! Finally, found why our archiver binaries were bloated up when compared to
	Squeezer's addons. I've compiled ColumnListView into a seperate shared libary libCLV.so.
	Now the binary sizes of the archiver have drastically reduced, and also the sizes of the
	static library libbeezer.a and the main app binary itself by several 100 kbs.
> Removed StrDuplicate() from all places in the code - Beezer, Archiver and ZipArchiver classes.
	Not yet removed from GZip addon - when I lay my hands on fixing it I shall remove it.
	This is because there is no practical use in using new, strcpy as strdup() does that. Since we
	use C functions such as strlen(), I might as well use strdup() as well - I wanted to go the
	C++ way using delete[], not free, but it seems impractical as I use strlen()s anyway...
> Removed StrDuplicate() from AppUtils class as well.
> How about compining HashTable, ListSorter, ListEntry as a seperate shared object .. will it be
	feasible, will it reduce size of libbeezer.a significantly ?
> Stored names of ark, bin, doc directories in AppConstants.h.
> Made finding of /boot/beos/bin (in case local bin dir not found) using find_directory() rather than
	hardcoding the path.
> Added age, nationality information to the About the Author window... :P
> Removed extern keyword from ArchiverMgr.h's FUNCTION prototype.. its there for variables.
> Protected BitmapPool with a run-time counter to avoid multiple declarations - just in case :)
> Rearranged a few menu items, added Help Topics item to System Menu.
> Removed TrackerOpenFolder, TrackerOpenWith, OpenEntry functions from AppUtils and
	put it in LocalUtils -- a local utility header for Beezer app.
> Removed CommaFormatStr from ArkInfoWindow and put it in LocalUtils
> Added dragging operation and drawing translucent dragged icon (to extract)
> Completed drag and drop support for extracting files from the archive
> Fixed major bug in expanding only selected entries -- i.e. fixed bug in selecting entries
	the bug was in not selecting, expanded+selected folders in "ExtractArchive()" function
> Now ZipArchiver() includes directories while unzipping - this is because I will have a problem
	when the user wants to unzip JUST folders, (in which case our count will be 0), now since
	folders are also counted, and included in unzipping progress no problem.
> Added CountSelectionSmart(), CountSelectionDumb() and CountSubItemsOf() functions
	to BeezerListView -- these are used while drag 'n drop operations are initiated.
> Made dragging show both files and folder counts - accurately too.
> Made modifications to AuthorWindow, moved Beshare url label above other URLs.
> Made minor modifications to AboutWindow.
> Fixed a bug in the counting of files and folders in both MainWindow & BeezerListView.
> Changed some colour constants in UIConstants.h - - namely URL colour, deep orange.
> Fixed bug in CountSubItemsOf() -- recursion bug is fixed, counting is now proper and perfect.
> Fixed bug in MainWindow::AddFolderToMessage() -- counts folders, files correctly now - also
	adds folder entries to be shown while extracting. (I can change this later i.e. excluding
	showing of folders' progress while extracting in gzip does not output creation of folders while
	extracting).
> Fixed bug in MainWindow::Extract() -- counting is now fixed and works perfectly i.e. extracting
	selected files/folders now works like how drag and drop does.
> Totally new about box, polished picture created with Photoshop & PaintShop Pro. Works fine.
> Added SplitPane author to the About box, forgotten before :)
> Also made changes to the progress bar height (made it a constant in UIConstants.h)
> Made changes to progress bar colour, now a nice deep red.
> Completed deleting of files from archive -- major work done here.
> The above deletion process involved changes even to m_archiver object, i.e. Archiver class
	the changes include adding SetLists() function, adding SetFolderCount() function.
> Speed fix!! Added folder entires as '/*' instead of passing each sub-file entry within the
	folder to zip, this made deleting LARGE folders from a zip file work - before it was not
	working (just kept waiting in progress window) when deleting large folders - now works!
> Maybe I should try "/*" to extracting selected files as well...
> Fixed wildcard related bug. In BeIDE.zip inside develop/documentation/Be[doc] - the square
	braces caused a wildcard to be activated by bin_zip, now it is escaped by using \\[ sequence.
	The bug has also been fixed in the Extraction (viewing) of files as well as in the delete
	process.
> The above bug fix included adding Archiver::SupressWildcardSet () function and changes to
	ZipArchiver. - no changes to main app
> I intend to keep wildcard handling to the archiver as some binaries (say tar etc.) might
	not handle wildcards in which case I must not escape wildcard sequences as I do
	with binaries that handle wildcards.
> Now stat:  Changed some 32 bit RGBA icons to CMAP_8 bits, binary size reduced from 586 kb
	to 574 kb -- good.
> New delete icon in the toolbar  - looks great.
> Added barberpole display to ProgressWindow, maybe I need to find a better place for it.
> Extended barber pole picture in the resource file.
> Added Select All Folders, Files submenu and made Select All submenu clickable.
> Merged Open and Open Recent items into one submenu, which can be clicked.
> Added "Search" button to the toolbar. Works fine.
> Fixed bug in ReadTest() and ReadExtract(), now testing/extracting of directory names
	is parsed correctly, before first character was being missed.
> Now stat: Binary size is back to 585 kb -- bad.
> Bug Fix: while deleting files at the root of the hierarchy (RemoveFilesFromList() function)
> Sorting STILL is not working. I just cannot seem to get it. Maybe there is a bug in the
	quicksort I wrote in CLV ? But name column in isolation sorting (just name alone) works
	perfectly, thus I assume other sorting must work as well.
> Bug Fix: BubbleHelper() from showing tips when its target view is hidden. Changed BubbleHelper.
> Bug Fix: fixed an error in RegExString::EndsWith() function -- must report it to the OpenTracker
	developers so that they fix the bug in OpenTracker too.
> Renamed all Remove*() operations in Archiver, ZipArchiver & Beezer to Delete*()
> Made some colour changes. Removed repeated type definitions in UIConstants.h
> Bug Fix: while right-clicking logview context menu appears, after which selection used to happen.
	Now that has been fixed by NOT calling BTextView::MouseDown() in overloaded function.
> Bug Fix: fixed some locking issues in WindowMgr.
> Removed snooze() and BAlert::Go(NULL) in handling erraneous archives in InitArchiver() of
	MainWindow() - Now the BAlert will block (other loading archives) till it is released by user.
> Bug Fix: Removed showing of comments when opening archives - this causes the age-old
	locking problem when opening several archives together... To be fixed.
> Bug Fix: Fixed the above bug, by calling a newly added function EditComment. I then
	post a synchronous message to the MainWindow from Beezer (in CreateWindow() of
	Beezer). This seems to work.... Now comments show on loading of archive if needed.
> Did some minor optimizations such as correcting some int32s to uint32s, changed prototype
	of UpdateCountDisplay() and UpdateBytesDisplay() of InfoBar() to include an extra bool
	parameter - instead of passing -1 (since uint32 was changed I can't pass -1 for a uint32)
> Moved SupressWildcardSet from Archiver to AppUtils.
> Removed abstract Read* functions from Archiver. Gives more freedom to add-ons.
> Increased hashtable size from 797 to 1597 - may improve speed marginally for large archives.
> Added AddUnderFast() function to ColumnListView base. This removes window-lock checks
	before adding each item, it also removes some other un-necessary checks.
> Now stat:  BeBookmarks.zip takes 13 seconds to load in Beezer, it takes 5 seconds in Squeezer.
	If I add all items at once without adding "split" items at a time, Beezer takes 10 seconds.
> Commented out all AssertWindowLocked( ) in ColumnListView - for performance.
> Changed ArkInfoWindow alignment completely - now its like Tracker's GetInfo.
> The ArkInfoWindow also has been coded to AutoSize itself dynamically as per the widths.
> Added "Total entries" to the ArkInfoWindow, changes to LangStrings also.
> Bug Fix: Fixed delete item in menu not being disabled when no item is selected when archive
	is initially opened. Removed it from UpdateValidArchiveSelectNeeders().
> Now stat: Binary size of Beezer is now 589.54 KB -- inflated by 4 KB from last update in
	ArkInfoWindow.
> Added rename item of Action menu to UpdateSelectNeeders() function in MainWindow.
> Now stat:  BeBookmarks.zip takes 11 seconds to load in Beezer, 5 seconds in Squeezer.
> Bug Fix: Fixed almost infinite pause while deleting from BeBookmarks.zip -- now the
	DeleteUpdate() function has been super-optimized as it searches through the HashTable
	for deleting folder entries instead of doing a nested loop. Speedened-up.
> Bug Discovered: Try Select All in BeBookmarks.zip -- lots of files + Pulse messages accumulates
	in the MainWindow. I must find a way to NOT accumulate pulse messages.
> Bug Fix: Fixed the above problem by NOT updating the InfoBar on every pulse. Infact we
	removed the Pulse request (DispatchMessage() and WindowActivated() removed) as
	I cannot turn OFF pulse messages if I check for it as I get accumulated pulse messages
	AFTER a long SelectAll operation. Now I update infobar on every selection change &
	I control when not to call Selection change message through the BeezerListView
> Bug Fix: FINALLY fixed deleting all files from very large archives - now HashTable search
	is fast, plus SelectAll problem fixed. Deleting files from Bebookmarks.zip now works fine!
> Removed m_updateInfoBar bool parameter from MainWindow as its not used anymore
> I still have a problem -- while adding over ~1200 files to selection the process gets slow
	because for each selection change (in this case addition) I recount the bytes,files in
	the selection - in UpdateInfoBar() -- now how can I avoid this. How can I get only
	the CHANGED (or added) item's info and add it to the infobar's display - this is the only
	logical approach as recounting each time would be too slow.
> Got an idea of how to implement Archiver settings. The Archiver will build and manage
	a BMenu (like in Flipside A.E) and will check that menu for its settings. Neat!
> Completed loading and saving of settings to ZipArchiver - made it generic for any add-on
	archiver to save its settings in a menu.
> The above changes include additions to Archiver, ZipArchiver as well as the main Beezer app.
	Settings directory has been chosen as a sub-directory and Beezer.cpp, MainWindow.cpp
	handles the addition of settings menu.
> Bug Fix: Made automatic creation of "settings" folder work properly now. The problem was
	BPath's Append() always normalizes path (even if false is passed to normalize arg) thus
	I would get a NULL path, in which case create_directory() in Archiver's SaveSettingsMenu()
	would fail. Fixed this by using a BString instead of BPath in Beezer app.
> Implmented the "Junk attributes" i.e. extract attributes setting in ZipArchiver - works fine!
> All the other zip settings are TO BE implemented only in zip not in unzip binary
> Made only FILE entries update while extracting - this is because when I do gzip etc, the
	command-line binaries will not report directory creations seperately in which case I will
	have a problem - so only file extractions are updated in the progressbar. Changes include
	changes to MainWindow::ExtractArchive(), DeleteFromArchive() and AddFolderToMsg()
> The deletion process still records directories. If need be I will change this as well.
> Integrated View menu with Settings menu, added Save as Defaults, Save to Archive items
	to Settings menu.
> Completed Save Settings as Defaults item in Settings menu - loading to be done.
> Loading for listview, splitpane done - also for some menu items - loading still pending
> Thinking about removing Sort Order and Sort By sub-menus as its needless pain
> Completed saving and loading of all default options except General options - works fine :)
> Bug Fix: Splitterbar now correctly reloads bar position even if window size is different as it should
> Finally!! Finally! got the sorting to work for name, size, packed, ratio, path, method, crc columns
	the Date column doesnt sort correctly because I must find a way to parse the string
	form of date to a time value - maybe some system header does this? I saw Time.h it doesnt
	have any functions that take char* arguments and gives a time value... must search for this
> Implemented full_row_select = false in CLVEasyItem. Changes to ListEntry, CLVEasyItem,
	Now works fine :) Now if I make ListEntry pass "false" to full_line_select paramenter
	in CLVEasyItem constructor I can get only selection of filenames column! Quite a lot of
	changes required but made sure the OLD full row highlighting works still. Tested - works.
> Speeded up selection of extremely large number of items - expanding selection now using
	the keyboard is as fast as ever I use m_cachedCount in BeezerListView and implemented
	B_DOWN_ARROW and UP arrow in KeyDown of BeezerListView for this. Changes to
	MainWindow and UpdateInfoBar() of MainWindow - In DeleteFileFromArchive() (as a result
	of the change) I need to call UpdateInfoBar() but I can't as I need parameters. Fix
	this later
> Bug Fix: the above problem in Deleting items from archives and infobar is now resolved. It
	was resolved by calling SendSelectionMessage (false) in DeleteUpdate() and by
	manually updating the infobar (by counting) thru DeleteFilesFromArchive() function. Works.
> Bug Fix: removed updating of infobar as recounting of selected items was needed after
	selecting items for deletion - I avoid this for the time being - It updates correctly AFTER
	deletion though
> Bug Fix: now choosing select all immediately after using SHIFT to expand selection updates
	the InfoBar correctly - Now everything seems okay from the new cached selection
> Now stat: Binary size of Beezer has now crossed the 600 KB mark - its at 605 KB.
> Now stat: Beezer takes 12, Squeezer takes 7 seconds to do a Select All in BeBookmarks.zip
> Made GUI update even while doing large Select All, Deselect All operations etc by calling
	UpdateWindow() from the respective BeezerListView functions
> Added separator lines to InfoBar - now looks much better and matches toolbar, CLV
> Added code to SplitPane class to store and restore bar position and alignment correctly
	now toggling will restore the correct bar position AT the correct alignment flawlessly :)
> Optimized sorting code a bit - not in terms of speed but removed some exclusive repetitions
> More optimization in Select All functionality-for larger archives there is a speed improvement
> Now stat: Beezer takes 7, Squeezer takes 7 seconds to do a Select All in BeBookmarks.zip
	The above optimization put us on par ! Finally!
> Got rid of extra columns related menus - Sort By sub-menu & Sort Order sub-menu
> Bug Fix: Small draw bug fixed in About Box - reduced window width by 1 pixel.
> Started work again after a whole month... Doing the Add files to zip files function...
> Coded PipeMgr class to handle argc/argv constructions using stream-like (<<) operation.
> PipeMgr will help reduced clutter in add-ons since it has very frequently used code, namely,
	the construction of argument vectors and Piping procedures.
> Added more "zip" settings - like Replacement options, Extraction options - works nice.
> Made use of pipe manager in ZipArchiver. Works properly, code size reduced nicely.
> Removed "unistd.h" and related functions GetPipesForCommand() from Archiver.
> Made m_directoryCount increment (so that it will be right when folders are added).
> It seems adding files are more complicated than I thought. I must update the internal
	in-memory structure...
> Adding files inside a specific sub-dir in an archive seems very tedious at the moment. So first,
	I shall attempt adding files the simple way - i.e. to the root of the archive like KArchiver.
> Also the doubt that I had of not wanting an in-memory structure like KArchiver is now
	cleared, I am not having any - m_fileList, m_folderList are just a list of CLVItems i.e.
	ListEntry - which inhertis from CLVEasyItem. ArchiveEntry are all deleted once they have
	been added to the list view. So I am on the right track....
> Todo:: Make the output of test operation viewable in LogWindow after a BAlert confirmation
	even if the test was successful - like how WinZip does it.
> Made the width of Comment window larger (to accomodate 80 characters atleast - test
	with unzip542.zip's comment which is 80 characters long per line)
> Made the output of test operation available even if no errors were found during the test.
> Increased m_hashTable size to 3023 buckets.
> Changed "Files:" infobar slot to "Entries:" as its more techincally correct, since it indicated	
	both the number of files and folders and not just files.
> Moved "General" menu item from Settings menu to Edit menu under the name Preferences.
> Added FinalPathComponent() to AppUtils, used by ZipArchiver - fixed bug in testing and
	deletion reading functions as directory names were getting printed in ProgressWindow
	as "" (empty), now FinalPathComponent() gets directory names or file names from path.
> FinalPathComponent() returns directory names with a trailing slash, this isn't a bug.
> Introduced a 0.08 second delay in M_CLOSE of ProgressWindow::MessageReceived () so
	that the ending 100% of progress can be seen, without this when the progress is very
	close to the end it finishes, now a minor delay shows the user more precisely its done 100%.
> Implemented saving of interface, folding settings with the archive as an attribute.
> Now the settings are loaded by Beezer app's CreateWindow() function.
> Next I must make a Remove settings from Archive option in the Settings menu, should be
	very easy.
> Made the inactive select colour same as the active select colour (blue-ish) as when I 
	select a lot of files (6000+) and I de-focus the window CLV goes and re-colours the
	selected items thus locking up the window for a few seconds. I don't have lock-ups
	in this case anymore, as CLV won't go re-colouring if the inactive select colour is the same.
> Made the About box's border as MODAL_WINDOW_LOOK from NO_BORDER_LOOK.
> Standardized some casts, by removing multiple casts from char* and const char*. Now
	HashTable and Archiver, AppUtils use const char*; avoiding several re-casts.
> Bug Fix: In FinalPathComponent() - now directory names don't skip first character of name.
> Implemented the "Folding" options, .. works in both Defaults as well as from archive's settings.
> Bug Fix: Startup crash due to BResource writing fixed, I write to a text file inside settings
	folder instead of re-writing to the executable while startup. Now compile time is written
	and read (worked around a bug) fine.
> Made most windows as subset to the caller window meaning it won't block other archive
	windows, like Alerts while deleting, test result log window etc are all now subsets.
> Wrote libFSU.so - containing the various file system utili functions like CopyFile, CopyFolder,
	CreateTempDirectory, RemoveDirectory etc.
> The next step is to rid the Archiver and derived the add-on classes from the burden of
	creating, maintaining and deleting the temporary directory. Our main Beezer app is going
	to take care of this (through libFSU.so) and the process involves changes to 
	ZipArchiver, Archiver and Beezer.
> What I intend to do is make each MainWindow hold a temporary directory info (like
	a BDirectory or its path or whatever,) and pass it to ZipArchiver/Archiver whenever
	needed instead of passing NULL and making ZipArchiver/Archiver do the temp directory
	creation.
> Done the above thing! Wow, nice clean-up job. AppUtils is kept AS LIGHT as possible because
	if I add things to AppUtils that I do NOT use in Archiver/add-ons then it will simple
	be bloating up the size of archiver/beezer AND add-on.
> Moved BytesToString() to LocalUtils from AppUtils as Archiver/add-ons don't use that.
> The above changes - temp. directory handling by main app reduced the size of Archiver 
	and add-on. In fact the Zip add-on went from 101 KB to 93 KB... nice!
> Now I have started doing things for super-optimization sake...  
> Regarding adding files/folders to archive, what I plan to do is this. If the user is adding at the
	root of the archive (no selected directories when add is clicked) then I simply add without
	copying files. If a dir is selected, I copy the files to be added to temp and then add so
	that the files are added within the selected dir in archive.
> Added Shared.h and shared constant was put in them so that libFSU as well as Archiver,
	add-ons and Beezer can recognize and use constants like BZR_CANCEL etc.
> Made libFSU.so use the standard "C" declspec declaration and unmangled C symbol names.
> Tested FSUtils - works wonderfully well. Next what I must do is code the Add functionality
	into ZipArchiver, then integrate it into Beezer along with FSUtils.
> I'm wondering whether to make a separate Add window - it will involve lot of work and will
	further increase binary size -- it might allow users to add many files from different locations
	into the add folder then at one shot add all of them to the archive...
> Added log text view description while searching for text.
> Removed add-folder options from ZipArchiver as it was conflicting with add sub-folder option
	and add-folder option is obsolete today, as no such programs offer that option of junking
	folder names and even if they do its rarely used.
> Maybe I must make ViewFile function as a thread function so that it does not lock up the
	interface while viewing a huge file.
> Done the above, now ViewFile is made into a thread "_viewer". Which resulted in 
	m_logTextView member of MainWindow being declared in the public section. Yes I know its
	ugly, but ... it fits the purpose and it's not the first time I have broken the rules for
	purpose and performance.
> Bug Fix: in CopyDirectory where an existing sub-directory fails to initialize. Now if a sub
	directory exists it correctly uses it and copies into it.
> Made many icons' colorspace from B_RGBA32 to B_CMAP8 thereby saving abuot 3 KB for each.
> Completed preparing to add part - with status and all with cancelling possible... Also now
	added a _copier thread that does copying of files before adding.
> Made it such that if a file is selected, the files should be copied inside the folder of the 
	selected file, or if a folder is selected the files should be copied into the selected folder and
	not it's parent.
> Changed GetDirectoryInfo's prototype from int64 valued counters to int32 counter arguments.
> Looks like I am finally read for the monstrous add operation - hopefully I should get it
	done without getting too many gray hairs.
> Now stat: The memory occupied by Beezer in opening the entire BeIDE & add-ons folder
	(around 5 zip files simultaneously) is about 9096 KB .. Squeezer takes about 12088 KB. We
	have lead of about 3 MB memory efficiency. But in BeBookmarks.zip I take about
	17684 KB while Squeezer takes about 17242 KB which I lose about 400 KB. Hmm...
> I found a big bug -- when progress is taking in _copier thread alone & app is quit from
	Deskbar the thread doesn't quit. Consider doing thread sync. like how FlipSide.A.E does.
> Got synchronisation working -- now for threads that spin around ProgressWindow I make
	a pointer to the progress window when I create it from MainWindow , and in MainWindow
	Quit() I set its cancel value to true and call ProgressWindow->Quit().
> For threads that do NOT spin around ProgressWindow like "_viewer" thread - it spins around
	the volatile m_publicThreadCancel flag of MainWindow.
> The assumtion here is that every window at a time will have only ONE progress window 
	controlled thread and/or possible one publicThread running.
> Made more icons/bitmaps in Beezer's resource as B_CMAP8 from B_RGBA32 colorspace -
	now the binary size is reduced by about 3 KB - currently its at ~601 KB.
> Next I must make ReadDelete operation cancellable - then tell the user that the
	archive has gone out of synchronisation and that it needs to be reloaded -- even Squeezer
	can't handle cancelled delete operations.
> Made GetDirectoryInfo () use a callerWindow parameter and call UpdateIfNeeded() function
	to keep our window from looking ugly when large folders are being added -- this was
	done because on slower system (on my K6-2 450) it took time to run thru the files and thus
	at this time our interface was not drawing (as it is done on the window thread).
> The UpdateIfNeeded() call should keep the window looking very consistent. But the best option
	would be to put this calculation too in an interruptable progress window - but the problem is
	on faster machine like this Athlon 2600+ it takes just about a second even for the entire
	beos or home folder. Think along this or get someone's opinion if needed...
> Added #pragma declaritives in MainWindow and organised this huge C++ file to be easily
	readable, more consistent in order and now functions are clubed into categories using
	the pragma so using the function pop-up displays it nicely.
> Added the TO DO file in this folder , some serious todos left.
> The above pragma marks work ONLY if the Sort Function Pop-up in Edit->Preferences
	is turned OFF -- otherwise it looks messy.
> Bug Fix: Comments menu item is now properly disabled while loading archive.
> Added Toolbar::SetEnabled() and IsEnabled() functions as I might need them later on.
> Added _counter thread to do counting operation before adding - this is now synchronised
	as an m_publicThreadCancel thread so that when counting is going on in the thread
	the window can be closed and it will work.
> The above involved adding volatile bool arguments to GetDirectoryInfo() in FSUtils.
> Also added UpdateArchiveModifiers() to block user from re-doing operations such
	as Add, View, Delete etc. when add operation is going on. Also made the blocking
	while viewing files which is our other public worker thread.
> Now the 2 public worker threads are _counter and _copier.
> Added UpdateArchiveModifiers() function which blocks most of the menu system.
> The above resulted in adding disabled icons for New and Open toolbar buttons to the
	resource file.
> Started work on StatusWindow class - aimed at making it for operations which I don't
	know the progress of the operation and need to block the main window as well as keep
	the operation cancellable - currently there are 2 such operations: _viewer and _counter.
> Also once I do this I can avoid disabling of toolbar, menus and the other ugly stuff I
	came up with such as UpdateArchiveModifiers() etc. This will be so much cleaner.
> Completed the StatusWindow and interfaced it well with MainWindow during the Add
	operation.
> Bug Fix: Fixed a memory leak in both ProgressWindow and StatusWindow -- the messenger
	created was never destroyed, now it is.
> Made _viewer thread also work with StatusWindow (posting it quit messages when done)
> Also made _viewer check for cancel one more time so that when finished extracting, say,
	a large file, and if the user has cancelled before, it will not open the extracted entry but
	will cancel and quit the thread.
> Removed much of the nonsense such as disabling menus, etc. UpdateArchiveModifiers()
	has been removed and also changes to BitmapPool for holding disabled icons for
	New and Open icons have been reverted. Also changes to AddToolBar() have been 
	revered.
> The code is now very, good and neat. Also the app is rock solid so far.
> Bug Fix: the m_publicThreadCancel was not getting reinitialised to false once a StatusWindow
	operation was cancelled, fixed this by setting *cancel = true in StatusWindow.
> Made Entries and Bytes slots in InfoBar fixed in size, this involved changes to Toolbar class'
	AddSeparatorItem() which returns the x co-ordinate, also changes to InfoBar to
	accept the co-ordinates in a BList. Also changes to MainWindow which stores the co-ords.
> Made ProgressWindow look similar to the StatusWindow - nice and neat.
> Also removed the title strings of ProgressWindow that were in LangStrings.
> Changed progress bar colour once again :)
> Changed colour of progress and status window title string BStringViews...
> Completed adding files inside any directory of an archive (zip), also adding at root is now
	done without copying.
> The above involved changes to FSUtils, I needed to know the BPath of the newly copied
	file/folder.
> Next I must make our app show the newly added files - right now it doesn't although it
	has been added to the zip file.
> Bug Fix: directories were not getting added as their parent was being return by 
	the FSUtils's CopyDirectory(). Now I got rid of the copiedPath argument itself as
	we don't need them in the first place, as they are available in the _copier thread itself.
> Separated MsgConstants.h and put shared constants in Shared.h ... nice.
> Made DeleteFilesFromArchive() - the one that gathers the selected items and forms a message
	to pass to the archive , use StatusWindow and is in a cancellable loop using
	m_publicThreadCancel.
> Got rid of the BMessenger *& argument in StatusWindow as I'm NOT using a 
	progress bar in StatusWindow, I was using it to give the controlling thread a closing
	message. Now I give this message using normal BWindow* pointer to the StatusWindow.
> The above made StatusWindow cleaner as it has lesser arguments, and no destructor needed.
> Bug Fix: now ZipArchiver will not junk directories (ignores the don't extract dirs option) 
	when View/OpenWith is the operation - i.e. when no progress is given.
> Changed CommentWindow's text limit from 4096 to 32768.
> Completed adding of files to archive - but still the display infobar etc. need to be updated
	properly
> Bug Fix: a very important bug was fixed in DeleteDone() now the HashTable entry was
	also deleted, found out this bug when adding didn't work after a delete.
> Bug Fix: I reset m_lastFoundEntry or m_lastAddedEntry to NULL when we
	delete them HashTable's Delete function.
> Bug Fix: I forgot to reset the m_addedFileList and m_addedDirList ... now adding many
	times works as expected.
> Todo: may be I can get rid of all those volatile bool *cancels, and use just one
	m_publicThreadCancel - just think about this because I am only doing one operation
	at a time blocking others using the ProgressWindow or StatusWindow.
> Another problem realised, I need to have HashEntry's for file items too. Right now we
	have unique hash entries holding m_clvItem for folders, for files I need it too if I am
	to avoid re-adding existing files to the archive.
> For this I must make m_fileList contain HashEntry* instead of ListEntry* which is what
	it is currently holding, and for this I will need to make changes in many, many places.
> The m_fileList will then contain a list of m_clvItems with unique FULL paths...
> Made ZipArchiver report only filenames and not directories while adding stuff to zip files.
> Perfected sorting for Size, Packed, Ratio columns - now it does not disturb how it is sorted
	in the Name column. This involved changes to ColumnListView which passes us now
	the ColumnList pointers which I use to see how name column is sorted and sort
	accordingly.
> The above resulted in writing an extra static function called SortAsPerName().
> Now multi column sorting is also working!!! Wow wow wow!!
> Adjust the size of size and packed columns slightly to allow xxxx bytes to fit fully...
> Added ToolBar::mk_Border constant as it was needed. Computed toolbar height correctly,
	fixed a 1 pixel bug ;-P
> Wrote ParenPath() function in AppUtils, got rid of using BString based parent folder
	string synthesis, also - got rid of an unused Extension() function ...
> Made HashTable size dynamically as per the number of files in the archive. It makes a table
	around 3.5 times larger than the number of files in the archive - so that when files are
	added I have fewer collisions..
> Now stat: I am almost on par with Squeezer now in terms of memory usage! Finally!
> Bug Fix: Fixed a modifier shift bug in KeyDown of BeezerListView's KeyDown() ... I am
	using modifiers() && B_SHIFT_KEY instead I must use modifiers() & B_SHIFT_KEY,...
> Bug Fix: in SplitPane made it apply SetState() even when it is not attached to the window, 
	this wasn't a bug in SplitPane but it's just that I call SetState() before it is attached,
	i.e. when loading settings from archive (Beezer will call it rather than MainWindow in this
	case)
> Made Archiver do caching of full paths, because HashTable's caching won't work as we
	are adding for example: be/book/deskbar ... it will cache and check only deskbar whereas
	for the next file in be/book/deskbar I will be passing be/book/deskbar and thus the
	caching will fail...
> Bug Fix: Wrote an inline ResetCache() function in Archiver that free's the cache so that
	after deleting, adding of same cached-item works.
> I must now try and use a bool m_isDir flag in ListEntry or in HashEntry.
> Re-orded BitmapForExtension function, maybe a slight speed boost who knows.
> Removed FolderCount() and SetFolderCount() functions in Archiver as they are not needed
	anymore as I am keeping the dirList and fileList perfectly synchronised with the archive.
> Made ListEntry::Update() and appropriate changes in Archiver, now files that exist in the
	archive, if they are re-added they are updated rather than a crash or rather than a duplicate
	entry. This is perfect now. But I still have to resort the problem of replacing a folder
	with a file and vice versa, maybe handle this in the Beezer app level itself...
> Bug Fix: fixed the one pixel bug while hiding InfoBar.
> Made lots of optimizations to ZipArchiver, made it use sscanf instead of strtok() thereby
	simplified the ReadAdd() function a lot, also made proper parsing of date and time.
> Also added a bool parameter to ParentPath() function used by ZipArchiver now.
> Added FormatDate() and MakeTime() functions in Archiver so that ZipArchiver is as
	small and simple as possible.
> Changed "Add sub-folders" into "Recurse into folders" option in ZipArchiver, it is more
	correct technically.
> Bug Fix: now folders are also added using their parent's CLV item as I found an error
	while opening a particular archive with numbers in their name.
> The above resulted in the elimination of ListSorter - I no longer need to sort the lists,
	so it has been thrown into the Deprecated folder.
> Also made ArchiveEntry handle getting of filename, dir name, ratio etc. given just the path
	name - this has simplied ZipArchiver a lot.
> Now its working 100% for zip files, though i suspect a slight decline in the speed as the
	folders are added according to their parent. I must see how I can speed things up.
> Resolved wildcard problems. Now Archivers use proper wildcard matching (for zip atleast).
> Bug Fix: in AddFoldersToList and AddItemsToList functions - a major typo bug is now fixed.
> Now in add operation I only add newly added entries. Yes I know this is how it was supposed
	to be, but before I had some problems and were re-adding actually ALL the dirs. Now
	since hashtable is perfectly implemented, no need for this. This has been quite well tested.
> Found a new icon from RL's Icon Collection suggested by RepairmanJack of BeShare.
> Made new icons for Open, Recent, Close and Extract. Now orangish arrows are used.
> Called m_listView->SortItems() after opening or archive, this didn't work at first, then I
	realised while applying the setting itself sorting was taking place, thus I changed
	ColumnListView's SortItems() function or something to accept a bool argument as to
	when to sort. Now sorting works correctly...
> Note the SetSorting() function puts "false" as the argument to sort, thus after using
	SetSorting() (for future reference) unless I call SortItems() the list won't get sorted till
	that. This is good as I can call SetSorting() many times and finally pass true to sort
	based on all the keys.
> Added some more credits to the About box such as Icons, ...
> Wrote the Create() function in ZipArchiver and sufficient changes to Archiver.
> The above resulted in storing a BPath in Archiver and instead of using local pathOfArchive in
	each of the ZipArchiver's functions (to check if archive still exists) I use the
	member function in Archiver called m_archivePath.
> Not yet implemented creating from Beezer app, wrote a InstalledArks() functions to give
	a BList of strdup'ed strings to the names of the installed add-ons. This will be used in
	in Create FilePanel (to allow user to choose which archive type to create) and also after
	he chooses, I will need to create an ark object by passing the mime-type of that chosen
	archiver to the ArchiverForMime() function.
> Made slight alterations to the small 16x16 icon.
> Added the m_createFilePanel showing functions in Beezer...
> Made disabling of Create button in Create panel.
> Finished creating of archives, now works fine, overwriting of existing files during create is
	also done.
> Now delete operations are cancellable, and cancelling a delete or add operation is also now
	handled. When such an operation is cancelled, an error will be shown and the archive
	will be closed.
> Made BubbleHelper have bold text.
> Implemented sorting by date, now m_timeValue (a long) is stored along with ArchiveEntry
	and with ListEntry, now BeezerListView's SortFunction() typecasts as ListEntry instead
	of CLVEasyItem.
> Now sorting by date works ;-P Yay! I don't try and sort anything else anymore, not
	interested in sorting by CRC, Method or Path.
> Implemented AddImmediatelyUnder so that folders when added are added to the top of
	the folder to which they are added.
> Got rid of AddImmediatelyUnder as it didn't make sense when sorting was reversed,
	therefore what I do is like Squeezer, call SortItems() after an add operation is over,
	also this can be toggled from prefs in the future.
> Added ConfirmAddOperation() function, wow, this app's really shaping up... Now I
	make sure file's don't get replaced by folders and folders don't get replaced by files. This
	is wonderful :-D  hehe
> Bugfix: In Archiver's MakeTime() function, I had to subtract month by 1 always, and
	add 100 to year if short year (2 digit year) is less than 70.
> Made ConfirmAddOperation() pointer fill 2 int32s, - count and skipped so when the user
	skips adding of files it will be incremented in skipped and in the caller side if skipped and
	count are the same I can just not do anything (cancel the operation before add).
> Now I have the power to do add file when file being added has newer modification date! ;-P
> Creating of folders is now finished, also checking for uniqueness is also done. Neat... now
	I have rename left which is a very complex operation, I might even exclude it for
	the first few releases...
> Made creating folder option blocked by a superb StatusWindow, this StatusWindow is a
	non-cancellable tiny window.
> The above involved changes to StatusWindow - the change is that if the volatile bool *cancel
	argument is passed as NULL to the StatusWindow constructor it will simply not show
	the cancel button. Neat no? :-D
> Implemented context menu triangle drawing, showing, clicking and also showing of popup 
	menu in the ImageButton class. Nice, now I can do like FilZip..
> Got the dropping down of the context menu so perfectly, also now the good thing is that
	I prevent user from clicking the button which has its menu being shown by using the
	BRect argument of BPopUpMenu's Go() function.
> Bug fix: Made m_listView->SelectionChanged() to be called after deleting items as after
	deletion no items will be selected (as selected items are deleted) which made our toolbar,
	menuitems to be out of state with the selection (or rather no selection), this
	SelectionChanged() will take care of that.
> Bug Fix: Added HashTable's FindUnder function and fixed a bug when filenames with just '*' as 
	its name exists while deleting a folder.
> Bug Fix: Now deletion with files named * works perfectly :-)
> Bug Fix: While adding file items to the delete list I escape * character as it will muck up 
	our stuff, as I ourselves use * for deleting inside folders with no files named *.
> Bug fix: now made ziparchiver not use -qq option as I found this as a bug while opening
	a file called "*.zip", now thats fixed as it uses the older method of scanning "------"...
> Bug Fix: implemented proper context menu handling in ImageButton when first click is made
	on an inactive window where the button resides...
> Started work on Tar Archiver - its so wonderful within a matter of seconds I got the opening
	of tar archives working fine .. It even handles links correctly unlike Squeezer which has
	a bug opening tars with links in them. For example, try opening FreeCraft.tar.gz (open the
	tar from the temp folder), then do a select all in Squeezer and you will see it has actually
	displayed more than what actually exists, i.e. it displays the destination of links as new files.
	Ours handles this perfectly :-P
> Bug Fix: fixed date parsing properly for long date by Tar archiver, also fixed a bug when the
	date string was 4 characters long instead of 5. Now date is parsed perfectly...
> Bug Fix: made testing process only make progress for files and not folder, involved changes
	in ZipArchiver, Beezer - no changes to Archiver.
> Made the SupportsFolderEntity() method in Archiver and overridden in Zip and Tar archiver.
> This SupportFolderEntity () will make proper deleting of directories as per the add-on.
> Made TarArchiver override the HiddenColumns method and return the columns it needs
	to hide.
> Bug Fix: made Beezer app hide the exact columns by comparing pointers rather than by
	index as comparing by index was just downright wrong and buggy. Because the interface
	setting can be saved and could have already have hidden columns. Now it works.
> Bug Fix: made CancelDelete() update info bar when a delete is cancelled.
> Bug Fix: in DeleteFilesFromArchive() now I escape * character here regardless of 
	whether the filename contains a *, after escaping I add the *  character for add-ons
	that don't support deleting folder contents given the folder path..
> Bug Fix: for BeOS R5, ReplaceLast in BString doesn't work when the length of the string
	is same as the length of the replacement string. I used a #if B_BEOS_VERSION flag
	to correct the bug on non-BONE (i.e. R5) systems.
> Made restoring of insertion point when name in the filename of Create Archive filepanel
	is changed when the type of archive is changed.
> Completed extracting functions of TarArchiver..
> Bug Fix: in Select All Files and Select All Folders, I now DeselectAll() before selecting
	all files/folders as without deselecting the InfoBar goes out of sync with the selection.
> Made Save Comment wrap around a non-cancellable StatusWindow now.
> Completed the Tar add-on, now when multiple files of the same name are added tar
	what it does is it stores both under the same name. Squeezer shows this , i.e. multiple
	copies of the same file while I show only the LAST added copy of the file. This is not
	particularly an error, but still it doesn't reflect the exact contents of the archive. But
	our HashTable absolutely prevents us from having multiple copies of files with the same
	name and path.... Maybe I can fiddle with the LookUp function of the HashTable
	and try and insert even multiple copies. Lets see...
> The TarArchiver does not present any options to the user like zip does... Tar is really a stupid
	program and has dumb options. And tar is the most stupidest utility on the planet...
> Made update_mime_info() to be called on newly created archives. This is good as sometimes
	some workers like tar don't set the mime-type when it creates archives.
> Also removed the now-unwanted ReadTarOpen() from Archiver.
> Right now I'm very confused as to how to handle tar.gz and pure gz files. I'm planning of
	doing it like KArchiver in Linux, seperate add-ons for tar.gz and gzip. But this will mean
	determining the type of file before opening - and that's a pain. 
> Major changes -- now HashTable is not totally unique anymore thanks to "tar"'s stupid 
	concept of keeping several files with the same name possible and my stubborn policy
	that Beezer must always reflect the exact state of the archive at any point of time.
> This include changes to HashTable, added ForceInsert() function.
> Bug Fix: in FindUnder() function - filename is not added to message anymore as it can
	now have duplicate names and in this case duplicate names sometimes causes tar
	to stop indefinitely. 
> Also changes to MainWindow's function which also confirms the user before replacing
	directories and as per the CanReplaceFiles() method (also new) of Archiver asks
	whether to Replace or Append files to the archive.
> Change in TarArchiver()'s Open() function to always list the entire file. Subsets (i.e.
	particular files) are not to be listed. And they are commented out.
> For add-on's that have CanReplaceFiles() as false, what I do is reload the entire archive
	when files are added. Also while deleting files form the archive duplicate files
	are automatically removed. I don't reload after a delete operation.
> Also changes to Archiver - said before, added a CanReplaceFiles() option - zip and
	other good workers like lha (i hope) will have this to true meaning it will not support
	files with the same name, while stupid old tar will keep it false. I handle both cases
	appropriately
> This involved adding EmptyListViewIfNeeded() function to MainWindow.
> No changes to ZipArchiver, changes to TarArchiver is done though.
> Changes to HashTable's FillList() function which delete's the file and folder list if
	CanReplaceFiles() is false, (as a full reload occurs).
> Bug Fix: fixed a very very hard to find error in HashTable's Delete() function, i debugged
	that all the way from Beezer app... major fix though.
> Bug Fix: in SplitPane(), or rather called SetState() of SplitPane twice to fix it. Yes I know its
	weird, but i think because of our MainWindow's Resize code something gets messed
	up after the first SetState(), so I set the state of SplitPane once again.
> Made ImageButton and BeezerStringView flicker-free while resizing. Made the Startup
	window's label as BeezerStringView instead of BStringView for flicker-free resizes.
> Called update_mime_info () before opening files, as it will take care of updating mimetype
	of files properly - say if mime is missing etc.
> Disabled user from typing '/' while creating folder - this is because I can't check if he
	types an invalid path like '//abcd' etc. and in this case things could go very wrong.
> Bug Fix: in appending extension, skipped appending extension if the filename is just '.zip' or
	'.tar' - just the extension. - was done in MainWindow's M_CREATE_REQUESTED case.
> Increased the time before BubbleHelps are shown as keeping just 0.5 sec is quite irritating 
	at times, the best would be to allow the user to customize this as its quite easy.
> Added Preferences class to the code base. Added InitPrefs() function in Beezer.cpp added
	Init() to Preferences class. Now the only problem is, I must keep the preferences
	thread safe. Think about it.
> Added PrefsView class to the code base. Added Render(), Save() and Load() functions.  I
	will implement PrefsView as base class, and override Save, Load, Render. It is much
	better, cleaner and safer (no memory leaks) than using function pointers like in FilWip's
	Preferences. I will have to derive from PrefsView for each view in PrefsWindow.
> Added IsChecked() and CheckBoxValue() functions to PrefsView.
> Added PrefsListItem class, added PrefsWindow class.
> Made PrefsListItem center its text label vertically.
> Changed name of window_settings prefs file to main_window_settings as I will have
	a prefs panel called "windows" which will be saving its settings file as window_settings,
	thus to avoid conflict I changed the name. Also while saving positions of various other
	windows like Search I will be saving them like search_window_settings, etc.
> Wrote PrefsViewExtract class more progress with the overall Preferences architecture.
> The PrefsWindow is now looking classy :)
> Added AddDefaultButton () code to PrefsView. Made PrefsView not btInset - looks better.
> Added PrefsViewState class, more progress as usual.
> Added SetActivePanel () function to PrefsWindow, used in 2 places from constructor
	and from MessageReceived().
> Not yet implemented saving, but that should be really easy.
> Added drop support for Startup Window, it will pass it as a B_REFS_RECEIVED message
	to our Beezer class which will handle it accordingly.. :) Cool
> Pushed setting of viewcolor to transparent to AttachedToWindow() hook from the
	constructor - in ImageButton and BeezerStringView. Now while the window shows up
	the first time flicker won't occur.
> Changes to PrefsViewState - now I have 2 section BStringView's instead of a BevelView
	seperator - looks nicer and makes it easier to understand for users.
> The above involved changes to PrefsView - to make things consistent a m_sectionFont
	BFont object is stored in PrefsView and will be used by derived classes to use in such
	section BStringViews.
> Bug Fix: fixed tab order navigation in PrefsViewState.
> The above doesn't make it flickerfree while starting for the first time after a reboot (i.e.
	when the binary is not in beos' internal cache) . But this isn't a big deal ..
> Moved SetViewColor() to the Draw, RenderView functions in ImageButton, BeezerStringView
	respectively - i think the first time transparent-flicker bug is fixed now.
> Made Save and Load for Preferences, PrefsViewExtract - save and load done...
> Bug Fix: In Preferences, don't do InitCheck() while Reading and writing prefs.
> Made GZipArchiver class .. started it actually,
> Derived GZipArchiver from TarArchiver - but this required TarArchiver to be a static
	library. So I made a new TarArchiverLib.proj file (without any libbe.so etc since it is static)
	and build libarktar.so -- the process needed load_archiver() function to be #if'ed OUT when
	the static building was taking place. So TarArchiverLib.proj has a STATIC flag to keep
	that function out.
> Wrote OutputFileName () function in GZipArchiver. Now GZips are dumped to temp just
	like in Squeezer.
> Now successfully opening tar, gzip and tar.gzip like it should.. .Only minor problem is that
	it shows compression ratio of GZipped archives in ArchiveInfo window as 0. I can
	correct this easily.
> Bug Fix: the above compression ratio bug has been fixed. It now reports by directly
	using the file size and the total uncompressed of files in the archive rather than
	using the compressed size and uncompressed size of files in the archive.
> Renamed Defaults button in PrefsView as Revert - as this is what actually I am doing.
	If the user wants to restore the default option all he has to do is delete the settings file
	for the panel.
> Implemented Revert - just call current panel's Load()
> Implemented HiddenColumns() in GZipArchiver... 
> Made LogWindow slightly smaller, and made it auto-center on screen.. later I shall 
	position it as per preferences.
> Bug Fix: finally the first-time flicker bug in ImageButton and BeezerStringView have been
	addressed and fixed -- see AttachedToWindow() for the fix.
> Made ImageButton's context menu pop-up when in MouseDown itself as it saves a lot
	of hassles if I am to do it in MouseUp - its functionality is pretty much the same and
	makes it bug free now.
> Implemented Testing and Extracting functions in GZipArchiver - both work well.. still not
	tested with highly corrupted gzips but so far it works.
> Implemented Add operation and fixed a bug in Extract as well. The bug was when we
	open a tar.gz - the TarArchiver's Open() function would make m_archivePath to point
	to the tar file. But while adding (re-compressing rather) I would have lost the ACTUAL
	path fo the gzip file, now this is handled by using a m_tarFilePath and m_gzipFilePath 
	parameter in GZipArchiver.
> Renamed m_gzipFilePath to a more generic m_arkFilePath so I save myself find and
	replace when I do bzip2 archiver.
> Made progress window's statur bar fill fully when receiving a M_CLOSE message. Don't know
	if that is needed.
> Completed delete option in GZipArchiver..
> Completed create, extract option (in temp or any dir) in GZipArchiver - succesfully
	completed the add-on. No issues found so far...
> I found a bug when I try to pass the compression ratio to gzip while re-compressing.
	Don't know why the hell this bug appears.. anyway it's to be fixed.
> Bug Fix: fixed the above bug, it was because char level[3] was getting written with a much
	longer string , " -%ld " <-- more chars, now its fixed :) yay!
> Completed Save archiver settings to archive. Involved changes to Archiver. Had to add
	the SetSettingsMenu() function - and ofcourse, changes to Beezer.
> Beezer now has SaveArchiverToArchive() -- already long name though it should be
	something like SaveArchiverSettingsToArchive() :-) But I can understand ...
> Changed saving attributes to "bzr:ui" and "bzr:ark" now.
> Seems I have successfully completed gzip add-on now... Looks good and neat.
> I now compute compression ratio in floating point - more accurate - in ArkInfoWindow.
> Made Backup as Preferences instead - because I don't have any plans of doing a Backup
	tool like in Squeezer - not now not any time as I don't think its needed and I personally
	feel its not worth the effort.
> Now preferences can be edited from the startup window.
> New preferences icon in resource file ...
> Made extension of GZipArchiver to ".tar.gz" from just ".gz" - as GZipArchiver can create
	only tarred gzips not pure .gz (one file gzip).
> Made PrefsFields.h a global header file containing the field-names in the preferences file.
> The PrefsFields.h is needed as it is neater to include one file with global field-names rather
	than including each pref-panel's header file in MainWindow and other places where
	prefs are to be referred.
> Implemented the "open destination folder" after extract pref. Works now.
> Implemented close and quit after extraction as well.
> Moved close and quit prefs only if extraction is completed and successful. If the user
	cancelled the extract operation or an error occurs these 2 options are not in effect.
> Changed prefs icon in startup window.
> Corrected version info in AppConstants.h from 0.1 to 0.01.
> Bug Fix: in GzipArchiver while opening empty ".tgz" files , updating mime type of the
	extracted empty tar file (with ".tgz" extension) shows it as a gzip file - it doesn't when
	the same is not empty. Anyway, whenever I open a ".tgz" file I add a ".tar" to its
	filename. Now the problem seems to be fixed.
> Major change in the way archives are opened. Now the opening is spun on a thread. The
	opening code has been split into 2 parts. A m_criticalSection volatile bool has been
	added to MainWindow and checked in Beezer. Till m_criticalSection is false Beezer thread
	will block, also MainWindow's new QuitRequested() will block till m_criticalSection is over.
> Now in the above change after about 3 seconds if the critical opening section is still going on
	(possible for large tar.gz archives which extracts before opening) a status window is
	popped up so that the window's drawing doesn't take a bash. This also informs the user
	that the app is not stuck & its still working on opening the archive. At this time the user
	cannot quit which is how it should be.
> I don't make Beezer block anymore on a synchronous message or in a loop until
	m_criticalSection is false. This is because I have protected WindowManager on a
	benaphore so I need not worry about several main window's competing and corrupting
	and crashing as its all protected by a benaphore.
> The above involved a change in StatusWindow's constructor - where I added a 
	default bool show argument which determines if the constructor must call Show() and
	start StatusWindow's message loop or not.
> Decreased thread alive probing time, and decreased maxWaitTime to 2 seconds thereby
	improving the overall latency.
> Started work on Bzip2 add-on. Now it is functional enough to Open, Extract.
> Bug Fix: fixed create folder freezing in pure GZip and BZip2 archives as I now added a 
	function CanAddFiles() and I check it.
> Bug Fix: initialized m_tarArk to true in both GZip and BZip2 so that while creating files,
	Beezer app checks for CanAddFiles() and CanAddFiles() get called before create, 
	therefore I need to set m_tarArk to true before, so I do it in the constructor.
> Removed cannot test special constant BZR_CANNOT_TEST and replaced it with the
	generic BZR_NOT_SUPPORTED constant, changed in MainWindow too to spit out a
	generic B_OP_FAILED message in the logtextview and call ShowOpNotSupported()
	from TestDone() function.
> Bug Fix: fixed a crash as Beezer now posts a message to MainWindow which calls EditComment
	function. Now the EditComment function checks to see if an m_archiver was actually
	initialized (not NULL) and then proceeds accordingly. Crash fixed.
> Bug Fix: removed an extra item from LangStrings.h which is not there in LangStrings.cpp
	- took some time to find, be very careful while handling LangStrings as finding errors
	in that is very difficult.
> Reduced maxWaitTime in OpenArchvie to 1.5 seconds, should be long enough i guess.
> Implemented a more accurate HiddenColumns() function for BZipArchiver - now it hides
	the columns of info it cannot retreive like it should.
> Generally increased the static char[] allocation sizes of all add-ons to make sure under no
	circumstance I get an out-of-bounds error. This is for general safety.
> Disabled tooltips throughout the app, (just called m_bubbleHelp->SetEnabled (false)) in
	Beezer.cpp 
> Implemented the four option - Save, Load interface state and Save, Load archiver state
	from archive.
> It doesn't make much sense to have Store and Restore seperately - maybe I shall club
	both the options into one. This is todo.
> Clubbed both into one now. It seems non-programmers like it this way :)
> Uh..oh, it does make sense to keep save and restore as two seperate options. Here's why
	suppose the user wants for a few archives to have interface/archiver settings stored
	he will use the menu's Save to archive item keeping Restore options always on. This way
	for some archives that the user has saved, restoring will take place - for others it won't.
	But now since I have combined both it cannot.
> Restored the 2 settings as seperate ones. Makes sense if u think about it a bit. And it doesn't
	hurt to keep them seperate and users who want store and restore just have to tick both
	instead of just one thats all.
> Made Restore of state (both UI and archiver settings) true by default.
> Created PrefsViewWindow - not yet implemented its options.
> Bug Fix: when the user cancel's creation of an archive in the confirmation of > 80 MB or so
	we had to close the window, now I do just that.
> Initialized m_criticalSection to false in the MainWindow constructor -- this is just to be on 
	the safe side and see that QuitRequested() quits properly while creating archives,
	when OpenArchive() would not be called.
> Added saving of Archive Info window to "Windows" preferences panel.
> Made logging of the loading process more detailed like it should be. As this is the purpose
	of the log, no use in just saying "Loading done". The user can figure that out for himself,
	what now happens is it shows stage-by-stage what Beezer is doing. First detecting the
	archive type, then verifying if the archiver has errors and so on. Nice.
> Made Delete() functions in all add-ons check for Error Stream data. They just call
	Archiver::ReadErrStream(), later I can check this in Beezer and handle accordingly. Mostly
	we will ask the user to re-load the archive as a critical operation has returned an error.
	This is a good thing to do.
> Did the same for Add() as well .. It is very important at this stage I make add-ons report
	if they found error stream or not, so that in the future it would be easier for add-on
	coders to follow the correct guidelines. Right now when an error in add comes, we
	don't continue adding anything. I must later make this to show an error and ask
	the user to re-load the archive.
>  Wrote StaticBitmapView class, used it in Comment window, search window, progress window
	and status window. Now all bitmaps are totally translucent, thus they will work even
	when the background colors change - in Zeta for e.g.
> Started work on RecentMgr class... Its a thread-safe recent-path managing class, that 
	has functions to dynamically create valid (still existing) recent paths.
> Completed RecentMgr class
> Completed integrating RecentMgr with MainWindow, StartupWindow, and Beezer app.
> Completed reading and writing of recent paths to disk. I write
	RecentMgr::m_maxInternalCount number of paths to disk, but I display only
	what Beezer passes to us as a constructor argument. Now recent paths fully work.
> Bug Fix: made adding of newly created archives to the recent docs as well.
> Added UpdateNewWindow() function to MainWindow, it is called from OpenArchivePartTwo
	as well as from MessageReceived's() section where archive is fully created and loaded.
> Changed the colour of AuthoWindow's content view...
> Wonderful, the apps now quite stable - when archives are nice :-)
> Also next what I need to do is the recent extract paths thing. It should be quite easy
	seeing as I have already got the recently opened archives thing done.
> Implemented recently extracted paths (or rather dynamically generated paths). Clicking
	on them doesn't work yet but I got the menu crud cleared out.
> Now clicking on a dynamically generated path or a recent extract path works.
> Finally after a horrible day of errors and fixes, by far the worst programming day of my
	life dealing with Be's stupid menuing system that is inconsitent and stupid I finally
	have managed to make the recent extract paths working nicely. Should have no 
	problems when favourite paths are added to dynamic paths.
> Implemented saving and restoring of search window and its settings. But I am not
	able to restore the column list as it changes as per the format of the archive. Right
	now it stores and restores everything but the column in which the search takes place.
	May be in the future I can do some sort of hacky thing and save and restore it.
> Completed preference panel "Windows" and implementing its preferences.
> Removed some unwanted constants from Shared.h, also replace STATUS_OK with BZR_DONE.
> Started work on the Paths prefs view.
> Bug Fix: fixed after a lot of toiling the final-pixel draw bug. It was because I am
	using 2.5 * m_margin as the left parameter, it was taking it as a float and doing somekind
	of sub-pixel nonsense. Fixed it by making it 3 * m_margin :-)
> Completed GUI rendering and handling of PrefsViewPaths.
> Added some GetPreferredSize() changes to ImageButton and also added SetTarget() function
	to ImageButton to post message to specific handlers.
> The apps taken a good shape now. Once prefs are done I think I can finally do the first release.
> Tested Beezer under different resolutions. Works wonderfully well. No major flaws found.
> Completed saving and loading of PrefsViewPaths panel.
> Started work on LHA archiver. Seems difficult.
> Added a CanPartiallyOpen() method to Archiver and made TarArchiver return false. This
	is because lha can replace files but I predict problems in partially listing because it's
	add operation is not very good in listing what files its added (space problems). This is how
	it must be because the CanReplaceFiles() doesn't have anything to do with
	CanPartiallyOpen(), but I am using it as all add-ons that cannot replace files re-loads
	the entire archive. But lha CAN replace files but I will still prefer to re-load the archive.
> Also think about writing a function in Archiver to convert  "Jan", "Feb" etc. to 1, 2 etc.
> I can embed the above function in LHA but in the future if other add-ons use this same	
	method to list time-stamp of files, I will be repeating the code. Think about where to
	put it - in Archiver thereby increasing codesize of all add-ons or in just the add-ons that
	needs them. The second options seems better...
> Removed correction of filename after user has chosen the filename. Maybe the user wants
	it that way.
> Bug Fix: made FillLists() use CanPartiallyOpen() instead of CanReplaceFiles() to see if 
	hashtable is to be emptied.
> Made HashTable's DeleteTable() function do delete[] m_table and avoided calling the
	destructor from FillLists() in Archiver. Neater now.
> Lha archives are now successfully opening. The dates are also perfect. Squeezer seems to
	have an ugly bug when opening the LHA archive I made using 2 files from 2003 (namely
	the 2 audio files Bajan.aiff. Beezer handles this perfectly :)
> Completed extraction and testing functions in LHA. I had to use fgetc () to make ReadTest()
	work.
> Made BAlert reporting of error when destination folder of extraction (chosen from Recent
	paths in context menu) fails to exist.
> Optimized ReadTest() and ReadExtract() functions in LhaArchiver by eliminating a few
	truncation calls in intermediate BString.
> Bug Fix: in LhaArchiver's Test() I now handle cancelling correctly and do NOT read
	error stream if cancel happens.
> Completed add and read-add operations in LHA. I am able to get the path perfectly
	so I removed CanPartiallyOpen() from LhaArchiver. If I am NOT able to do so with
	delete I shall turn this back on.
> Bug Fix: now correctly last "n" paths are shown, I had use an "addedCount" instead of
	"i" in the FillMenu() function in RecentMgr.
> Bug Fix: made LHA CanPartiallyOpen to false because lha (the command-line bin) does 
	NOT report to use directory contents when both files & folders are being added. Hence
	it is now a reloading add-on.
> Found a bug. SettingsMenu() of add-on when it has SetRadioMode (false) BMenu items
	they don't get checked in the Create File Panel... check how to do this.. serious bug.
> Bug Fix: fixed the above bug - because BMenu's SetTargetForItems() I wrote our own
	function to make all items (even under submenus) target a given BHandler.
> Made LHA add-on open generic (compatible mode) archive. See LHA add-on's Open() function.
> Adding/Deleting files from LHA archives resets its mime-type to "application/octet-stream"
	we need to manually reset this (through the LHA add-on code).
> Done the above mime-type fix.
> Added "Append archive name & generate more paths" option to PrefsViewPaths panel.
> Completed saving & loading of PrefsViewPaths panel.
> Hid the Deep search option in Actions menu and removed it from UpdateValidArchiveNeeders()
	in MainWindow.
> Fixed memory leak in PrefsViewPaths destructor - I now delete m_removeBmp like we
	should.
> Implemented the default open-path -- see Beezer::MessageReceived (M_FILE_OPEN)
	to see how its done - it seems BFilePanel::SetPanelDirectory() does not like NULL 
	strings.
> Implemented the default add path - MainWindow::MessageReceived (M_ACTIONS_ADD).
> Completed favourite path generation. See MainWindow::AddFavouriteExtractPaths()
> Completed extract. Finally!! After such a long time (because of prefs) I have finally
	finished implementing the extract. (not to be confused with extract to).
> Made "Root" as ":Root:" in Create Folder function.
> Started work on Recent prefs panel.
> Completed load and save of Recent prefs.. now to implement them.
> Implemented recent prefs. Works very well as far as i"ve tested.
> Implemented applying of prefs to MainWindow after changing them from Preferences 
	window. See Beezer::MessageReceived (M_CLOSE_PREFS)
> Changed first mime-type of LhaArchiver to application/x-lzh rather than application/x-lharc.
> Started work on PrefsViewAdd.
> Now settings folder is created if needed. Bug fixed, in Preferences class. See Init() as well
	as WritePrefs() function.
> Implemented saving and loading of PrefsViewAdd. Works now. Next I must implement
	them.
> Added FindInt8Def and FindInt16Def functions to Preferences class. Used them in 
	PrefsViewAdd class.
> Bug Fix: in all add-ons that have Add() function. I now do NOT read the stderr stream
	when the add operation has been cancelled. This is an important fix.
> Bug Fix: in all add-ons that have Delete() function. I now do NOT read the stderr stream
	when the delete operation has been cancelled. This is an important fix.
> Implemented all options in PrefsViewAdd. But there is a minor problem in "Never replace"
	option which shows some progress/status window for a second or two when nothing
	should be shown.
> Ah found the bug, its not a window that appears after ConfirmAdd, its the window
	that counts the bytes that appears and disappears so fast. So it's not a bug.
> Must implement drag and drop addition of entries. For this I must indicate where they
	will be added in BeezerListView.
> Bug Fix: I now check mouse-queue in ImageButton::MouseMoved()'s GetMouse() function.
> Started implemented dropping of files from Tracker to BeezerListView. Drawing of code
	from MouseMoved. Must check for flickering when dragging from Tracker and also
	handle the 1 pixel issue (+/- 1) between the bottom of one item and the top of the
	next item.
> Bug Fix: fixed the 1 pixel bug, I now draw at the bottom. But when vertical scrollbar is
	ENABLED and a file is dragged beneath the LAST item the indicator is not drawn, but
	this is same as Squeezer.
> Flickering is still an issue.
> Made drawing two pixels thick, now the LAST item problem is fixed too, well partially, 
	because one pixel is shown now atleast. Somethings better than nothing in this case.
> Dropping files onto window now adds correctly. Yay! :) mmu_man helped a lot in this.
> Bug Fix: dropping from tracker (several files) works.
> Bug Fix: also fixed the draw bug once files have been dropped. Using EraseIndicator() in
	BeezerListView, there still exists a minor issue when selected items are erased.
> Refined drag and drop more.
> Also added an option in PrefsViewAdd "confirm before adding files thru drag 'n drop". Not
	yet implemented it.
> Found a bug: when I "Save settings to archive" through the menu and then do an operation
	like add/delete (that rewrites the archive on disk) the attributes I saved are blown away.
	What I must do fix this is keep 2 BMessage-pointer member m_cachedUIState, and
	m_cachedArkState. When user saves the settings, copy GetState() to the appropriate
	message, then the window closes rewrite cached states. Also, when app is loaded if
	any state/arksetting is detected copy it to cached state and rewrite when closed. 
	Sneak attack.. but it should just work.
> Implemented confirm before drag and drop additions.
> Now to begin work on that cached settings stuff. Quite ugly but I am too late to 
	change the basic things now. So workarounds :-)
> Bug Fix: !!! YES !! the sneak attack cached workaround works ;-P Still some testing to be 
	done though ;-P
> Bug found: there is a bug when restoring split pane size when toolbar, infobars are hidden.
> Bug Fix: the above bug was fixed by using a PostMessage, asynchronous method of
	restoring the splitpane rather than calling SetState(). But this too needs to be called twice.
	Weird, but it works.
> The app is looking very impressive now. Though i say so myself ;-P Quite satisfied with
	its overall stability. Quite solid and stable. Moderately fast, though like squeezer tar.gz,
	tar.bzip all take a while to load. Can't seem to avoid this.
> Started work on PrefsViewMisc.
> Completed saving and loading of optionsi n PrefsViewMisc, next I must implement them.
> Several bug fixes to M_OPEN_REQUESTED, it is now made as a synchronous reply
	to Beezer app as I had found a bug because of the recently coded UpdateExtractMenu()
	thingy. Lots of bugs fixed, hopefully when opening many files together it should work.
> Implemented show comments on archive open.
> Implemented show welcome window/quit app when all archives are closed options.
> Completed registering of file types, from prefs and all. Now Beezer associates itself
	with supported archive types from its resource file (i.e. from the binary).
> A neat hack to fix incorrect mime types. What I do is set the type to 
	"application/octet-stream" which is like nothing then update_mime_info () and it just
	works.
> Hmm, instead of correcting mime type everytime a file is opened, why not do a quick 
	comparison among the types, see if it doesn't match any of its extensions, then 
	correct it if needed. I mean, its the better way to go about it rather than recorrecting
	the mime type everytime.
> Started work on RuleMgr, completed ReadRules() function. or rather tested it by printing
	to terminal.
> Wrote the ValidateFile() function. to be tested ...
> The hack works, its quite nice actually, now incorrect mime types are all fixed without
	going through the hassles of fixing the type each time. But incase the rules file is 
	missing (due to any reason) the mime type would be corrected each time an archive is
	opened which is fine.
> The binary size is now 820 KB.
> Made one more important fix. I now guess the mime type from the extension if possible.
	See RuleMgr::ValidateFileType function for this. If the extension matches one in the
	rules (and there is no mime type because the archive maybe on a CD or something), then
	we return a char* mime type which is there in the rules. Made suitable changes to
	MainWindow too.
> There are still some bugs in registering file types, - with file extensions for example. Also
	I must check for mime.IsInstalled() and do accordingly.
> Bug Fix: fixed the issues in registering file types, now it respects the IsInstalled() method
	and correctly installs the mime type if its not there already. Also I don't bother about
	file extensions - it seems I don't need to. Squeezer doesn't either. So I assume its okay.
> Added Default archiver option in PrefsViewMisc, also implemented it in Beezer while
	creating archives. The reason why I did this is, is so that when I make Tracker add-on
	(if I make) I will need a default archiver for quickly creating archives.
> Bug Fix: a minor draw bug was fixed in ImageButton's drawing of pushed triangle. I now
	move the triangle DOWN as well. Before I was just pushing it to the right by 1 pixel,
	now I added a pixel to the bottom co-ordinate as well :)
> Removed creation of BubbleHelper class as I don't use them anymore. Now the
	BubbleHelper threads aren't created unnecessarily.
> Bug Fix: now always whether the add-on supports folder or not, extracting a
	selected+expanded folder always extracts its full contents by selecting it first. Found
	this bug and fixed it while I was writing docs for drag 'n drop extraction.
> Optimized the selection of sub-items - speed based optimization works very well.
> Bug Fix: fixed a bug when user tries to create a new archive when he does not have 
	the archiver (worker binary) installed. I now check in Beezer app's
	M_CREATE_REQUESTED for the InitCheck() of the archiver.
> Bug Fix: fixed some UI bugs in PrefsPathPanel and AuthorWindow with VERY LARGE fonts.
> Changed a LangString item in PrefsViewAdd.
> Changed BeezerListView's MouseDown() such that when a collapsed folder is double-clicked
	it expands.
> Bug Fix: in ImageButton - several bugs fixed, first I don't use MouseWatcher anymore
	as I found out how to use the mouse input masks correctly. Secondly, the draw bug
	when B_EXITED_VIEW messages were dropped are now fixed by using "false" in
	MouseMoved()'s GetMouse() function which means don't check the message queue.
> Implemented System menu->Help Topics function. Also reports missing of help files correctly.
> Changed the icon once again.. grr.
> Made few more improvements in ImageButton, and some minor fixes as well.
> Bug Fix: fixed an important bug in ImageButton where clicking several times in the context
	area would cause the context menu to be shown again and again even after I click
	OUTSIDE the ImageButton. See MouseDown() for fix
> Released!!
