*ALWAYS GET THE LATEST VERSION AVAILABLE. THERE WILL ALWAYS BE A REASON ;)
---------------------------------------------------------------------------

v0.1: Very primitive.
v0.2: Problems...pretty not so nice problems.
v0.3: This would segfault before you even got to the opening the modem.
v0.4: Made it a little nicer. 
v0.5: This originally started with just sequential scanning. After random
      scanning being requested, I added that within an hour.

v0.5-0.9: Not worth documenting...blah blah blah. Problems were bein
          fixed here....still not public.

v1.0: An exit() in the wrong place ;) So that was obvious a BIG problem I
      put an exit in check_for_error() so it would exit obviously...which
      it shouldn't of ;) I had this during debugging/testing (v0.1-v0.5). 
      It was now made public and given to a few beta-testers.

v1.1: Changed sleep() to alarm(). Now it will go the next number as soon
      as it connects or times out (whichever comes first). Before it just 
      waited and then checked.

       *IF YOU HAVE LESS THAN v1.2 I guarantee it won't work*
	   There is too much to modify for it to work alone

v1.2: Well...I was able to open /dev/cua1 for dialing and /dev/ttyS1 for
      hanging up..but some OS's might not even have two serial devices
      per file. When I originally wrote this...I only used one serial
      file. I had been using one serial file in the first place, but I had
      not hung up the proper way. So it's USING 1 SERIAL DEVICE now.

v1.3: Just improved it to look nicer. Made the output a little more under-
      standable and nicer.

      			   *UPGRADE TO AT LEAST HERE*
			   --------------------------
v2.0: Many, many changes. I spent two days straight between these versions
      going through everything. Everything looks nicer, and works. In the
      previous versions...the random wouldn't of worked due to how I did
      it. But it will work just fine now. Random works right, added more
      things to be logged. I will add the date of start/stop, statistics,
      etc. In the next few versions.. also expect a GUI as soon.

v2.1: Added a lot of color to make it more "exciting" I suppose.
      The colors are ANSI color codes, that I used, are in colors.h
      Fixed a minor problem that would print "Last Number Dialed: Last 
      Number Dialed was ..." 
			    *Fixed bug with logging*
v2.2: I had a lot of changes here. I fixed the 'not logging' bug, so 
      everything will log fine now. I changed the data types (from 
      strings to integers), and I took out a lot of unimportant buffers, 
      things slowing everything down, etc. IF YOU WANT YOUR LOGGING TO
      WORK..GET THIS ONE. Added some more color, fixed it up a bit more.

v2.3: Now logs the date when scanning started/stopped, took out a lot of
      unneeded sprintf()'s, improved a few little mistakes, etc.

             *It would be a good idea to upgrade to here*
v2.4: You should probably upgrade to here. I added a new function
      checkok() so that it checks for an "OK" from the modem after
      initializing it, hanging up, etc., to make sure the modem is
      listening and working properly. This would help you with diag-
      nostics should need it be. This also fixed a previous problem,
      when initializing the modem, if it didn't get an "OK", it would
      exit...but I forgot to hangup() and close() the modem's fd! So 
      it would certainly be a good idea to upgrade to here. 
      Oh and another important thing. check_for_error() now logs to 
      the log file when it doesn't get all the bytes it was expecting
      written. checkok() also writes to the logfile when it doesn't 
      receive an okay.

                         *** UPGRADE TO HERE!!! (A MUST) ***
          Reason: Ever since I've been using just one serial file (v1.2),
                  I haven't been hanging up the right way. +++ and ATH are
                  still sent to a remote host when connected. I needed to 
                  close and reopen the modem when connected. This is now 
                  fixed. All is fine for now...dials fine, hangs up
                  fine, logs fine, connects fine, color is fine (well, I
                  hope you like the colors :P).

 v2.5: *Many changes here*. Changes were:
				1) new way to hangup (if connected)
				2) new variables used to:
					a) increase speed
					b) allow us to reuse functions
					c) cut down in size
				(See connected, and noshow)

       It wasn't waiting for "OK" while initializing
       the modem. I added a one second pause to give the modem a change to
       respond to ATZ. Obviously the bug hadn't been there before v2.4 as
       that was a new feature. Secondly, if I the modem didn't send me an
       "OK", then checking for an "OK" with hangup() doesn't do too much
       good. Added a variable to check for this. 
          When sending "+++ATH" to the modem while connected, it's sent to 
       the remote as l: +++ p: ATH that's not a very good failed log
       attempt to be logged ;) So what we did is closed the modem, and
       then reopened it to hang up. I added new variables to allow me to
       reuse functions, cut back on code, increase speed (i.e. I use if
       (connected == 1) rather than two strstr()'s in a row now.
	  These were basically two different versions but I decided to
       leave it as one version since they are closely related.

 
v2.6:  Okay, the list of options was starting to get a little long, so
       I added a getopt(). The way it reads numbers now, has changed.
       Rather than using get_num(), and get_scannum(), it was just ask 
       for the whole number 555-555-1111, rather than the last for digits
       (1111), seperately. The new functions is get_scanrange(). This will
       be more convient, although now now get_scanrange() is more compact.

v2.7:  You can, scan different ranges, like instead of just 555-XXXX, you
       could now scan 555-XXXX through 556-XXXX. The same applies to long
       distance as well.

v2.8: You can now give -d to daemonize (run in the background).
      Also, fixed a small bug, that didn't exit(), when it failed to 
      receive an "OK" from the modem, during hangup().

v2.9: Fixed a problem with getopt(). You can specify a logfile with the -l
      option (run it with -h for help, to see how to use it). A nice nice
      new feature. You can now read numbers from a config file (without
      the '-'s). Just put the plain number into a config file. 5551234 to
      dial 555-1234, or 14565551234 to dial 1-456-555-1234. I will soon
      add the ability to use '-'s or ()'s for the area code.

v3.0: You can now use a config file with '-'s. So to dial 3 numbers..do:

      dial-nums:
      555-5643
      554-3453
      1-800-675-3544

      (You would then run: shokdial -c dial-nums)

v3.1: Added ability to use comments in config file
      So ShokDial has been undergoing many changes to make it look nicer,
      work better, user friendly, attractive, an occasionaly fix. Things
      like this. Please ALWAYS check this file before you do anything else
      ;)

v3.2: Fixed a bug, with the sprintf() and printf()'s...because if you
      would enter 555-0000, it would try to dial 555-0, due to forgetting
      the ".4", the precision. 

v3.3: Noticed a mistake of not stripping out new lines out of the phone 
      number from the config file when using -c. Hence, it would actually
      be doing "ATDT ...\n\r", which isn't right.
 
v3.4: Completely redid all the alignment, so I could fit more things in 
      one line. Now prints statistics, on the number of times connected,
      number of times the phone number was busy, and number of no
      responses (timed out).

v3.5: Changed the variables modified by the sig handlers to type volatile.
      
v3.6: Added a menu that is called when someone tries to abort the program.
      From there you are given the option to skip to the next number, or
      exit the program. Changed sigaction()'s to signal()'s, for
      compatibility with non-posix systems.

v3.7: Realized that my new menu never reset the timer when you skipped to 
      the next number, so that it would eventually timeout from the old
      one and skip the new one.
 
v3.8: Added termcap so that I could clear the screen. I will be adding
      ncurses for a GUI shortly.

v3.9: Added -s option to allow you to pass input via stdin. It will not
      check the number (along with -c for config files) to allow you to
      enter odd strings for formats other than those used in the US and
      things such as "5551234,,,,1,#" that you might see when dialing a
      pager. I also printed some bugs with logging the numbers. 

v4.0: Added ability to send a string to the carrier, and to read a
      response from the carrier (or return a time out otherwise). Fixed up
      the code a bit, style, etc. This was a pretty big upgrade. In the
      process, the old -s for stdin has now become -S, and the -l for
      logfile has now become -L. The new -s means "send a string to the
      carrier" and the -l means "read a response from the carrier". Also
      fixed a minor printing bug in the statistics.
 
v4.1: Fixed several compatibility problems, a coding error (bad scanf), 
      and rewrote the Makefile (much nicer).

                  Shok (Matt Conover), shok@dataforce.net

