***********************************
README Information about the changes 
made to the micq source for the 
ncurses library.

Information since the change to zICQ

Changes by Omar Harriott
  (ted23@technologist.com)
***********************************

Contents
--------
  Introduction
  Thank
  Updates
  Ncurses
  The Interface
  Bugs
  Notes

Introduction
------------

I was extremely pleased when I first download the source to mICQ.  I was
finally able to communicate with my friends and family who are all prefer
to use simple Windows point and click applications.  But since I love
Linux, I used to not be able to talk to them without finding a Windows
machine to use.  mICQ was the answer!

For all it's wonderfullness, it was lacking a good UI.  Incoming messages
would interrupt what you were typing, a contact list was rarely onscreen
to be seen... Basically, it was a bit messy.  So I decided that it was
about time for me to learn ncurses, and what better way than to rewrite
the interface for mICQ?  Hence, zICQ began.

The main things I wanted to focus on were:
 - Clean display
 - Usefull onscreen information
 - At-a-glance status

I think these goals have been resonably accomplished.

Thanks
------
Thanks to Matt Smith, Adam, Bastet, Kenta, Tomasz

Updates
-------
.2.9 	- BUG FIX Galore, add more user commands

As of v.2-.8, the display has been working fairly well...  I lost my old revision list, so it's starting again in here.

.2.7	  - Fixed backspace bug in input
	  - Multithreading (hopefully no more "authentication" messages.  WOOHOO!)
	  - Much cleaner output.
.2.6	  - Changed input function.
		-Command history! Up / Down
		-Move back and forth on the same line without deleteing! left/right
	  - Shrunk input window
	  - New man page
	  - New commands/doc - Both thanks to Karoscene!!
	  - Fixed help function
	  - Fixed bug in "url" that causes core dumps.
	  - Nick List starts at thetop of the screen now.
.2.5	  - Added line wrapping to everything! Added Beep and Sound of file / url
		-.zicqrc now accepts:
			- No_Beep
			- Sound_Player <text>
		        - Sound_File <text>
		-New commands
			- beep: Toggle the beep
			- sound: toggle the sound
.2.4	  - Added line wrapping because it was asked for.  Hope it works ;)
.2.3 	  - Added plenty of comments to make the code more readable. Hopefully this will help those of you who want to change things.  Also placed zICQ under GPL and made a homepage for it (http://www.owlnet.rice.edu/~zallison/zicq or hookah.ml.org/zicq)
.2.2-v.9b - Cleaned display up, fixed URL output.
	  - Changed everything to new name of zICQ, since the mICQ people were ignoring me.
	  - started looking at set / get away messages
	  - Thought about adding plug in support:
		- Calling external programs, passing message type, uin (if applicable) and content. Read response.
		- Usefull for: Away message pager (forward to email?)
		- ICQ interface for an Eliza. (This would be neat!)
.2.2-v.9  - URL send support.  Cleaner code.
.2a-v.9   - Color Added!  Code cleaned, MAJOR buffer bug fixed. (Would CRASH on large message.. wouldn't send ACK, crash again when it was resent.. lather, repeat.)  Various outputs were cleaned.. temp code was removed.
.2a-v.8e  - Cleaned the text file up.  Fixed history bug.  Added resize command (Usefull for xterms).
.2a-v.8d  - Dirty fix of multi-line message problem. Dumps it to a tmp file then rereads it.  I'm not happy with this fix, so I'll try to get it working another way.

Ncurses
-------

ncurses = new curses

The ncurses.h file is a library, standard on most Linux installs,
contains function calls and procedures for terminal control.  That is, it
changes the way the output is displayed.  Most importantly, it contains
support for "virtual windows" whereby the physical terminal screen can be
logically devided into sub areas for different output.

Most of these functions are backwards with curses.h, which is availible on
most unix systems.  (Unsure if they exist for Win32 environments)
Therefore, I see no reason why the ncurses codes in here shouldn't compile
under any un*x os.  Any information, success or failures would be
appreciated.

-------------
Note: You may have to change the #include <ncurses.h> and -lncurses (in
Makefile) to <curses.h> and -lcurses in order to use the curses library if
ncurses is unavailable
------------

For more information, please read the man pages on ncurses.h


The Interface
-------------

I chose to devide the screen into 3 main parts, which is fairly strait
forward.

 -The main window.  (Internally, WINDOW* mainw)
  - All messages, events, etc.
 -The contact list.  (WINDOW* blist)
  - current list of who's online and their online status
 - User input. (WINDOW* userin)
  - Topline is status (WINDOW* statz)
  - Bottom two lines are where the user input appears as it is typed

Note: Three additional windows (tempw, tempw2, and tempw3) were created in
order to display the boxes around them.


Code Changes
------------

- Color was removed
	-Ncurses was displaying the raw escape codes rather than a color.
- Auto update(s)
	-When a new event is recieved or userinput sent, the buddy list
and status line are updated

- Output
	-EVERY line out output that was printf was replaced with the
wprintw command.  This command uses the same format as printf, but the
first variable is the window to be printed to.

ex: printf("This is something in the mainwidow: %s",stringvariable)
    changed to
    wprintw(mainw,"This is something in the mainwindow: %s",stringvariable)

- Input
	-The input remains at the bottom of the screen, and scrolls when
the end of the line is reached.  Users can also delete and go back up to
change or delete things.

- COLOR ADDED!! Oh joyous day!  Easy to see colors make it much nicer to look at.  It will tell you if your current Term can handle color.  If it can't, find one that does!! (Example.  My xterm won't display color unless I "export TERM=xterm-color")


New Commands
------------
I've also added a few new commands:

        -resize This function resizes the mICQ window... Ex: Running in an xterm, and you change the size.  Otherwise the text gets all screwy.  The screen is cleared, I'd suggest running "hist" after resize to get the display back.

	-hist [user] If no user is specified, the global history is replayed.  If a user is
specified, the history of that user is sent back.  Note: No error checking is done yet... will
crater if you give it a non-valid user.

	-iinfo <user> for some Important INFO.  Port and IP of a user.

Bugs
----

Yeah, I know. I'm shattering your dreams, but not even I am perfect.
Here's a list of known bugs:

 - Heheh, I'm sure I'll be hearing about them

Notes
-----

I would reccomend running this in a large xterm, as the windows are
assigned size based on the current window size.  This means that the mainw
window will be larger and easier to read.  It still runs fine under
console though.

Status line is still up for changes.  Hopefully as features are included
in zICQ that info can be included.  Any ideas, let me know.

Big thanks to Matt Smith for coding the mICQ source.  It wouldn't be
possible without you.  Thanks to Adam for helping me brain storm and test
code. Thanks to Chutt for putting up with my stupidity, and thanks to all
of you who wrote me about zICQ!!


- Omar Harriott
ted23@technologist.com
