13 OCT 1995 - Version 1.0     Friday the 13th release!
                              I hope you aren't superstitious!
                              
- added MClk programming to ClockProg. Should increase text mode max clock
  (and graphics speed...). BUT: VERY DANGEROUS... (hard crash).
- killed outw() argument order bug in Video7 clock setting code.
- a bunch of small changes (mainly to Makefile) by Ron Sommeling
  <sommel@sci.kun.nl>
- moved clock setting block from SVGAtextMode.c (and ClockProg.c) into
  setclock.c.
- split Run_extern_Prog into separate .c file
- MClk programming on some clockchips now supported (higher text mode clocks
  possible).
- merged clockprobe and grabmode into one program
- split up font parsing into parse_font.c
- removed some obsolete code from WDC90CXX chipset unlocking routine.
- safe_wait_vsync created in wait_vsync.c
- used safe_wait_vsync and SCREEN_OFF before programming VGA chip (avoiding
  font corruption and system hangs -- hopefully) in ClockProg and STM
- ClockProg can use different config file (/etc/ClockConfig) if it exists
  (will use /etc/TextConfig otherwise)
- PERROR now does SCREEN_ON before exiting
- moved some compile-time options from severeal .h files to the Makefile
- changed dependency checking/making in Makefiles (now uses .depend files)
- investigated "unstable Cirrus Clock" problem. Resulted in
  contrib/Cirrus_ClockChip.patch
- split setclock.c into setclock.c, std_clock.c & clockchip.c  
- max WDC90C3X clock now 50 MHZ (90 was way too much. I should have known
  only Tseng could do this...)
- option definitions moved from confdefs.h to parse_opt.h  
- added "SyncDisks" option: does a sync() before going to the hardware.
- set/getpalette can input/output in hex now
- DO_SYNCRESET option added to Makefile: this does a synchronous reset of
  the timing sequencer before changing the pixel clocks. Was always on by
  default, but crashed some ET4000's. now off be default.
- changed patch to S3gendac.c code for ET4000 gendac so that pixel
  multiplexing becomes possible (min_n2 changed from 0 to 1)
- changed most Outb_xxxx functions to use outw() instead of 2 outb()'s
- setpalette can now program a "standard" palette without external
  parameters or input. This also uncovered a bug in the built-in standard
  palette of set80 (data was interpreted as octal...Yuck!)
- "browse" option added to contrib/scripts/STMmenu  
- grabmode (in fact modedata.c) has some intelligence built-in to properly
  display modes with 1024 lines (1280x1024 modes were shown wrong, because
  they used chipset-specific registers)
- probeclocks.c started: XFree86-like clock probe. Not finished yet...
- grabmode _should_ now properly detect ALL CGA-emulated modes (320x200, etc),
  even packed pixel modes. Documentation updated/expanded.
- attempt at supporting interlaced modes (for S3 only) Do NOT try this at
  home! It doesn't work yet (_can_ it work for text modes ???).
- cleaned up TODO file (who cares...)
- most "Get_..." functions are now inline. Probably not very useful.
- underline position is now also programmed. Some people complained about
  missing underline, or strike-through instead of underlining when using
  STM. They were right, of course.
  Also added "NoUnderline option".
- Added "DoubleScan" attribute for text mode config lines. Anybody needs a
  64-pixel high font?
- corrected little bug in START_HBLANK code (set_ and get_): was wrong by 1
  char. Need this for correct blanking programming.
- Started correct blanking programming: 1 char before and one after the
  active display. This is useful for those who want a nice colored border
  around their screen using the overscan color register. If the blanking is
  not programmed correctly (as in X), changing the overscan register makes
  ALL screen colors change.
  This was a VERY nasty thing to do. It seems like most VGA programs don't
  bother, and set it to the same position as the sync. It's not easy to get
  it right.
- Needed to change the same two a little more for correct blanking
  programming: it seems like both start and end of HBLK must be decremented
  by 1 before using them. This doesn't show up in any VGA textbook
  (Ferraro,...), but the actual display shows otherwise.
- added font dumper/undumper programs in contrib/changefont.
- disabled S3's "high speed text display font fetch mode" until we know what
  it does and how to use it. This caused trouble on S3 911 etc.
- added S3 high speed text font writing code. Experimental, and non-functional!
- more tweaking on grabmode to make it mode reliable when detecting CGA modes
  and 16/24 bit modes
- manual file for grabmode written. Finally.
- first shot at DOS version of STM, thanks to invaluable help from Stephen
  Lee. (Well, in fact, he did all the work). The most important changes are
  the ttyresize.c file (DOS resizing code), and some include file changes to
  enable DOS compilation.
- Removed argv[0] printing in debug output. Useless, and messy.
- All SVGATextMode code now compiles under DJGPP 2.0 in DOS. I didn't say it
  all works perfectly! This is unsupported work. 
- added ioctl(</dev/console>, KDSETMODE, KD_TEXT) to SVGATextMode.c as well
  (was only in set80.c). Better textmode restoration ???
- more MAN-file updating. 
- STM now always does a pre-1.3.3 VT_RESIZE, and if it's a 1.3.3 or newer,
  it does a VT_RESIZEX also. Maybe this avoids trouble until those kernel
  guys make this a bit less obscure.
- added DOSEMU chapter to doc/PROBLEMS
- fixed makefile so it doesn't re-compile all stuff when binaries are in
  source tree, but .o files are not.
- added "backup" target to makefile
- SVGATextMode is now oficially under the GPL (finally -- I read the damn thing)
- final (you must be kidding...) man-file cleanup.


6 JULY 1995 - Version 0.9

- Added "-t" option to use a different TextConfig file (useful e.g. for the
  clock probing script in contrib)
- explained "character bandwidth" in doc/PROBLEMS file.
- fixed bug in WDC90cXX code (clock selection bit #2 was wrongly programmed)
- another bug in WDC code: registers were not unlocked: some modes only worked
  after X unlocked the VGA registers.
- used CirrusSetClock from XFREE package instead of previous (custom) version.
- added "restore all VGA registers" option to set80. More robust, but not
  perfect, since SVGA regs are not restored...
- added "-m" switch. When VT_RESIZE fails due to lack of memory, it doesn't
  automatically try via a 1x1 screen anymore. You need to use "-m". This is
  to avoid erasing all screens unannounced.
- split up README into README and INDEX.
- updated binary DOS version of grabmode.exe to 0.8.4. (actually Mr
  Albanowski updated it...). This needed a few changes to the code here and
  there: some double colons in the Makefile (for the grabmode.exe target),
  removing "optopt" for the DOS version, and changing the general [][] array
  references to more specific ones.
- man-files written for: SVGATextMode(8), TextConfig(5).
- first attempt at a separate clock program using the XFREE clockchip code
  (useful for X, where ClockProg DOES restore text mode clock, and
  ClockChip doesn't). Also attempt at getting ET4000w32p with GenDAC
  working.
- included patches by Mr David Mosberger-Tang <davidm@cs.arizona.edu> for
  Linux/Alpha. STM should now compile on Alpha systems without changing a
  single byte to the sources nor the Makefile.
- split up grabmode.c into grabmode.c and modedata.c. Should be useful for
  scanmode, etc.
- added "DAC" register set to set/getVGAreg.
- patched XFREE/common_hw/S3gendac.c so ET4000W32p with ICS5341 GenDAC now
  works, too.
- changed clockchip code to allow clockchips for other-than-S3 chipsets.
- added "DacSpeed" line + default maximum clocks for all chipsets. 
- scan-mode now also takes clock limit into account.
- included a patch for ET4000 W32p X-server that solves mouse-garbage
  problem on PCI cards.
- replaced 49 (!) misspelled words "usefull" to "useful"... That says
  something about the program itself... ;-) (thanks David!). 
- separated clock related config file parsing into a separate file
  (parse_clock.c). To be used later in a "generic" clock program for XFREE.
  Users of XFREE with a ClockChip should appreciate this (correct
  restoration of textclock).
- also separated parse_modeline from configfile.c into separate .c file
- moved Hsync/Vsync_range parsing to main(), so it doesn't have to be done
  in several places over and over. 
- moved mode validation functions into validate.c
- mode validation now also tests if the required clock is in the clocks
  line. (useful for "scan" mode).
- fixed bug in grabmode (actually bug in Get_xxx_End() functions in
  vga_prg.c) that caused wrong blanking values to be displayed.
- added "-c" option to grabmode: don't probe for pixel clock.
- "slow clock" in grabmode is now non-fatal, 0 MHz is returned as probed
  clock value
- all mode parameters (either from mode line or grabmode) use same struct
  for data. I think that's called "unification".
- "DefaultMode" command introduced in config file
- mode selection tool using dialog and the enhanced "scan" mode of STM:
  STMmenu. This obsoleted the 2 previous ones "grepmodes" and
  "textmodeselect".
- added detection for some special features in grabmode (doublescan, ...)
- implemented VT_RESIZEX from kernel version 1.3.3 and up.
- also skipped tty resizing for kernels >= 1.3.3 (should be done by
  VT_RESIZE now)
- compilation now automatically selects to allow or disallow resizing,
  through checking of availability of VT_RESIZE call.
- changed ClockProg into a generic VGA clock programming tool, that can be
  used either in SVGATextMode itself, or in XFREE, to support yet
  unsupported clockchips in X (notably ET4000 genDAC), AND to allow for
  sub-25 MHz modes in X for ALL cards (DOOM!), and not just those with a
  clockchip. This will also smoothe the interaction between X and
  SVGATextMode, since they then use the same clock programming code. Also
  useful for Clockchip-cards in X, to allow for correct text mode clock
  restoration.
- passed CFLAGS from top level to XFREE sub-Makefile
- workaround Cirrus Clockchip bug (unstable clock at 58 MHz --> use 57.9).


2 MAY 1995 - Version 0.8

- changed VT_RESIZE call to use /dev/console instead of stdin. This avoids
  having to redirect stdin when running SVGATextMode remotely.
- moved lower-level functions for video timings into vga_prg.c,
  SVGATextMode.c now uses more higher-level functions.
- removed "bug" that limited modes to max 1024 lines per screen. Now up to
  2048 lines are possible. This is all a standard VGA chip can do.
- made division by 2 feature an OPTION instead of a default. This should
  avoid problems with not-so-standard VGA cards. Is now default DISABLED,
  instead of enabled in previous versions.
- Amazing... one more dead bug: now the Ti3025 clock chip code was wrong.
  (it was passed the desired frequency in MHZ, and it needed KHZ).
  AND the XFREE/xfree_compat.c file used the opposite definition of outb(),
  so you got a segmentation fault there. Why do people use TWO different
  (and completely incompatible) versions of outb() ???
  But... it STILL doesn't work.
- Michael Shields contributed a better function to free some RAM to avoid
  VT_RESIZE from giving an "out of memory" error. This time it should work a
  lot more reliably than what I had done too quickly... But still not
  perfect.
- he also fixed a bug that made some font sizes NOT mentionned in the font
  selection table be assigned the wrong font.
- changed PDEBUG, PWARNING, etc so they can be used as functions (';'
  allowed at end).
- added contrib/loadfont. A better alternative to setfont written by Albert
  Cahalan <albert@ccs.neu.edu>
- added two more register unlocking bits to S3 chipset. This COULD have
  caused problems (VGA clock and 8/9 pixel wide char selection COULD be
  locked from BIOS).
- changed argv[0] processing of set/getVGAreg and set/getpalette so they
  select between set/get function correctly.
- put all tty-resizing code in a separate file (ttyresize.c).
- removed the ICD2061 setting programs in the contrib directory once again.
  Hopefully nobody minds.
- added a "rescue" program "set80" that programs the VGA 80x25 mode, without
  options or configfile. Useful for when you made a mistake using
  SVGATextMode...
- moved mode line parsing code from SVGATextMode.c into configfile.c. Needed
  for the mode line scan function.
- changed TRUE/FALSE definition, and moved it into misc.h for ALL sources.
  also used boolean assignments where possible (instead of "if (...)
  bool=TRUE; else bool=FALSE;").
- added '-s' option to scan config file for all possible mode lines. 
- added '-v' option to disable mode validation (H/V frequency checking)
- changed sync checking code to allow for sync range validation in "scan" mode.
- changed explicit comparing with "NULL" to implicit.
- Keith Owens (kaoss@singnet.com.sg) suggested a change to make SVGATextMode
  show the resulting text mode BEFORE bailing out when the syncs are out of
  range.
- Changed TextConfig file clock selection mechanism (again). Now you only
  have to define a clocks line when it is actually NEEDED: for non-clockchip
  S3 cards, cards needing a Clockprog, and all other cards except Cirrus.
- Fixed a problem with the ATI MACH32 card support. Those cards seem to need
  bits 2 and 3 of the clock selection word exchanged. Weird. Now at least it
  works for one of them.
- allowed checking of correct number of clocks in 'Clocks' line to be
  switched of using #define statement in SVGATextMode.c. It seemed to bother
  some people.
- Command-line switch '-c' (don't program clock) produced a warning line.
  This too seemed to bother some people. Now it is a debug message (only shown
  when debugging is enabled).
- Kris Coryn suggested doing a temporary VT_RESIZE to 1x1 if the new one
  fails (because of a lack of memory) at first. This frees (almost) all of
  the RAM needed for the current display, thus freeing more for a second
  attempt. This is very succesfull! The only downside is that the screen gets
  cleared in the process.
- changed resizing code to check for correct kernel version BEFORE doing
  ANYTHING. Code hopefully a lot more clean now, too. 
- replaced VT_RESIZE.note with a more up-to-date screen-resizing.note.
- added "-b" option to grabmode, to show the H/V-blanking registers.
- changed all absolute VGA register references that were dependent on Mono
  or Color VGA to vgaIOBase. If everything went right, SVGATextMode should
  now also work on monochrome displays (NOT tested!).
- cleaned out XFREE Makefile and xfree_compat.h so now the clock chip code
  compiles cleanly. This is in anticipation of the XFREE 3.1.1 code import.
- XFREE 3.1.1 clock chips now included! But if they work ...?
- get/setVGAreg now also outputs in binary (useful for some bit-level
  registers).
- split up configuration defines from vga_prg.h (they have nothing to do
  with VGA hardware) into separate confdefs.h file. This also facilitated
  the use of the "other" definition of outb() from common/compiler.h for
  Ti3025 code in XFREE/xfree_compat.c.
- fixed bug that called random filename for ResetProg when it was not
  defined.


27 MAR 1995 - Version 0.7

- You guessed it: I reversed the order of the HISTORY entries. Everybody
  else seems to do it that way...
- updated some doc files. Removed obsolete doc/VT_RESIZE.note. 
- changed external clock program calling to comply with XFREE3.x method: now
  takes MHz as an argument instead of kHz.
- To be more compatible with the XFREE configuration, you must now ALWAYS
  define a clocks line. Even when using a Cirrus card, a clock chip or an
  external clock program. In these three cases, you can define ANY number of
  clocks of any value on the clocks line (as long as they are within range
  of what your VGA chip can handle). 
  This also burries another really idiotic bug that caused the Cirrus Logic
  cards to fail with the message "Internal error: No clock programming
  defined. Please complain to the author...". Which is what many people did :-(
- started writing the "doc/PROBLEMS" file. Contains some troubleshooting
  tips, and some commonly encountered problems.
- added "-x" option to set/getVGAreg, producing pipeable hex output.
- removed tiny bug that produced incorrect error report when combining
  command-line switches in one "-abcd..." line, with an incorrect one in
  between. All programs had this bug.
- changed Makefiles (again). XFREE/libcommon_hw.a is now NOT deleted in
  distribution, so people without an X installation CAN recompile without
  missing header file errors. As long as they don't do a "make mrproper"..
- quick hack by Stephen Lee: textmodeselect. A dialog-based mode selector.
- !!!maybe, just maybe, the infamous ICD2061 programming problem is HISTORY!
  it used to give a segmentation fault, due to its reading of IO address
  0x200, which wasn't given IO permissions by SVGATextMode...
- Reuben Sumner provided a neat function to do AUTOMATIC VT resizing. So
  now you don't need the "terminals" line anymore: this function finds out
  by itself what VT's are active, and resizes them.
  This has the added advantage that putting tty7 and tty8 in the "Terminals"
  line doesn't activate them (which TIOCSWINSZ does), so X cannot use them,
  and fails when starting up, telling you it cannot open /dev/tty9 (when you
  have 8 VT's defined).
  Note that this function will be overridden if a "Terminals" line is
  specified. This will allow you to override the "intelligent" behaviour of
  SVGATextMode, and define which VT's you want resized (and which not).
- Split up the huge "main()" in SVGATextMode.c into smaller functions.   
- changed NO_VT_RESIZE into ALLOW_RESIZE. This looks less obfuscated.
- restructured terminal resizing code completely, using more functions.
- changed "open" mode for terminal devices from read/write to write only.
  This avoids a permission problem on most machines when running SUID.
- changed check_bounds_realtime(), so it now allows for spaces in the
  frequency strings (suggested by Stefan Dalibor).
- put the "diamond" clock program back in. I removed it a bit to early: the
  ICD2061a clock code didn't work yet. Maybe now...
- started changing grabmode to make it correctly detect CGA-emulated modes,
  and Hi/TrueColor modes. Not there yet.
- VGA IO permission stuff facelifted.
  

16 MAR 1995 - Version 0.6

- Added support for Video7 (Headland Technologies) chipset.
- changed calling of reset-program to only run when screen actually changes
  size.
- more general path option fetching from config file (in preparation for
  FontProg et al)
- changed option stuff (code readability improvement)
- fixed a bug in OPT_SWAP_HIBIT for WDC cards.
- !!! added automatic font loading. Major feature improvement.
- fixed a stupid bug that produced an error when using ClockChip ICD2061A. 
- fixed ANOTHER stupid bug that found an incomplete clockchip line when
  there was none defined, after having found a ClockProg line. I must have
  had a bad day there...
- added flags: -r : don't run ResetProg
               -f : don't run FontProg
               -c : don't program clock (but do the rest)
- cleaned up message printing code. Less overhead now.
- programmable cursor position and size: lets you define what the cursor
  looks like.
- added 'HorizSync', 'VertRefresh' parameters to config file, to define
  monitor's limits, and avoid loading a mode that the monitor cannot handle.
  Same syntax as in XF86Config.


03 MAR 1995 - Version 0.5

- Made clockprobe shut up about interlacing. Was wrong anyway. adapted doc
  accordingly
- !!! added mode grabber, which outputs a TextConfig (or XF86Config)
  compatible line describing the currently used text mode.
  !!! DOS port of grabmode by Kenneth Albanowski. Now you can grab a DOS
  text mode and import it into SVGATextMode. (grabmode.exe included)
- removed small bug in set/getVGAreg (setVGAreg didn't work when called with
  a path)
- added doc/README.ET4000.AltClockSelect. A technical description of a
  rather common problem with ET4000's: the "hibit" option and the different
  methods of clock selection.
- added Sigma Legend (ET4000) option.
- added Cirrus DRAM speed options (SLOW_DRAM, MED_DRAM, FAST_DRAM, XFAST_DRAM)
- continued XFREE code importing effort. Now all kinds of clock chips on S3
  boards could possibly work. Needs testing though.
  Produces lots of warnings during compilation, so it's not sure it will work.
  Will somebody test this, please? S3 Gendac tested: OK
- added "ResetProg" line to TextConfig. This calls a program or a script
  after SVGATextMode ended succesfully.
- fixed obscure problem with ATI code (needed at least for ATI VGA Wonder V5)


19 FEB 1995 - Version 0.4

This time, lots of user feedback resulted in most of the new features.
Thanks to all those who contributed!
- Increased sync widths in many default TextConfig modes, after TONS of
  complaints about many modes just not working. This should fix most
  problems (but not all...)
- added a clock probing program "clockprobe". Useful for debugging on
  "remote" video cards (i.e. those YOU have, but I don't). Used some fancy
  stuff in there. Check the documentation!
- short docs for getpalette, setpalette, getVGAreg, setVGAreg, and
  clockprobe added.
- added some more user-contributed text modes. If this goes on, the
  TextConfig file will be a MegaByte within a few years...
- added (user contributed) Video 7 mercury external clock program.
- fixed bug in setpalette code (getpalette was wrong).
- now SVGATextMode uses the last matching textmode line, instead of the
  first (suggested by Kenneth Albanowski. Thanks). This gives YOUR patched
  lines precedence over the original ones, if your lines are at the end of
  the TextConfig file.
- changed external clock program calling to comply with XFREE3.1 method
- made option parsing more generic, so now adding options for all cards is
  easier.
- added option "ET4000_AltClockSel" for those ET4000 which won't work with
  the normal clock selection code.
- "swap_hibit" option for WDC cards added (as in XFREE). This actuall swaps
  bit 2 (not 3), so the name is rather misleading...
- added automatic sync polarity selection. Deleted most sync polarities from
  default text modes in TextConfig (auto polarity should get most right).
- first attempt at using some XFREE code. This has been suggested by myself
  and many others. It's a good idea, but probably not that simple. Let's
  see...
  Nothing works yet, but it'll come, one day.
- Put VT_RESIZE before VGA programming code instead of after, and added
  malloc() to get some more free memory (avoiding "out of memory" error).
- !!! Now does terminal resizing automatically, using the terminals defined
  in a "Terminals" line in the TextConfig file. All these terminals get the
  equivalent of an "stty rows ... cols ..." sent to them when SVGATextMode
  is run. All programs that support the SIGWINCH signal (more/less, joe,
  emacs, ...) redraw their screen automatically into the new size. This is a
  really nice feature!
- and finally: SVGATexMode now checks for the kernel version, and if it's
  older than 1.1.54, it will not allow screen resizing. This seemed to be a
  major problem for some people.
  This will also make SVGATextMode MUCH less dangerous to use.


31 JAN 1995 - Version 0.3

- more cosmetics. Especially changing small functions into #defines. Is this
  wise???
- added setpalette and getpalette, to set/get the color palette. Completely
  useless, but is was lying around somewhere else, and this seemed a better
  place for it to reside.
- ATI support tested and changed to make use of ALL 128 clocks available!
- multiple clocks lines supported.
- split up README into separate parts in doc directory. It was beginning to
  get bloated.
- added conditional compilation for older kernels (#define NO_VT_RESIZE)
- Still 867 bugs undiscovered...


23 JAN 1995 - Version 0.2

- major cosmetic changes. And more will follow...
- more modular code ( = more .c files)
- added options (-n, -d and -h)
- changed define DEBUG into an option. Executable will be always bigger, but
  who cares...
- added "setVGAreg" and "getVGAreg" for hacking purposes (formerly not
  distributed, but written as lots of separate programs by Wouter Gadeyne)
- added support for Western Digital and ATI cards (but VERY much untested ...)
- removed 8/9 character switching bug.


10 Jan 1995 - Version 0.1   First release

- Xconfig-like configuration
- S3, Et4000, Trident and Cirrus Logic support. 
  each tested on just ONE of those cards...
- probably a TON of bugs.


