[ Main Page ] [ About ] [ Design & Development ] [ Downloads ]
NOTE: The upper case letters in () refer to the authors who made the changes,
and anything with () was done by Mike. The date format is DD/MM/YYYY.

- updated AUTHORS (MB)
- updated UPGRADING to inform users of any changes when moving from version
  0.2 to version 0.3 (MB)
- updated BUGS, NEWS, README (removed "It'd be appreciated"), TODO, VERSION,
  doc/overview.txt, doc/roadmap.txt, doc/wayv.1, doc/wayv.conf.*
- fixed doc/HOWTO-wayv-config to reflect ability to use more than just 5
  mouse/pointer launch buttons
- the debian directory is now left as part of the standard distribution
- updated code with new date and email block

- generalized fix to allow any mouse button to be used in the form of Mn
  in the configuration file (NR)
- fixed header in wayv.conf.5 to remove lintian warning (NR)
- removed boilerplate thingy from copyright (NR)

- fixed manpage section for wayv.conf(5) and the reference in wayv.1 (NR)
- fixed multiline literal and #endif compiler warnings in various headers (NR)
- fixed a couple of inclusion compiler warnings (NR)

- began Windows port, but stopped, going to do later on when I move over
  to XML parser for configuration file (MB)

- Placed wayv.conf man page correctly in man/man5 as per Debian Policy (MY)

- updated DEFAULT.wkey, HOWTO-wayv-config, wayv.1, wayv.conf.1, README
- added UPGRADING that contains information for people upgrading from
  version 0.1 to 0.2, it explains the main changes required to wayv.conf

- added CHANGES to record what improvements are made between the stable
  releases of wayV
- updated INSTALL, HOWTO-wayv-keymap, overview.txt, roadmap.txt,

- updated AUTHORS, NEWS, BUGS, trained-gestures.jpg
- bugfix in setup.c:parseSetup() so it doesn't seg fault as easily (yet
  again its the rubbish parser)
- setup.c:readSetup() ammeded so version is NULL, helps detect if the
  configuration file isn't right

- got rid of misc.*:parseArgs() - its too late to be putting that into
  version 0.2
- ammended configure.in, src/Makefile.am and defines.h to use SETUPPATH
  so the configuration file is looked for in the right place
- setup.c:parseSetup(), parseInclude() report clearer error messages if
  they have problems finding the appropiate files
- changed setup.c:parseSetup() to figure out the right path to the 
  keymap (it'll be rewritten for the next version)
- removed cannot find file error message from backend.c and updated to
  be a little more flexiable with the passed in parameter
- DEFAULT.wkey is now installed in the same default directory as wayv.conf

- found a bug there zombie processes where created by the user feedback
- added process.*:setupSignals() to manage the signal hanlders required
  by wayV. It only useful for SIGCHLD at the moment but in later versions
  that'll change
- move the signal setup from process.c:performAction() to backend.c
- created misc.*:parseArgs() and the struct MARGS to parse the commandline
  parameters passed to wayV

- rename wayv.key to DEFAULT.wkey, decided all wayV keymaps should end
  in .wkey
- created doc/HOWTO-wayv-keymap to explain using and creating the new
- renamed setup.*:getSpaceText() to getDelimText() and ammended it to
  to work with parameter passed token (must rewrite the parser)
- update process.c:performAction() to send keypress' correctly, including
  composite key press' - means key press stuff is done and dusted for
  version 0.2
- updated display.c:setupPointer() to properly setup what input events
  to receive
- clearly I was delusional when I wrote the original event handling 
  and pointer grabbing but I've fixed it therefore backend.c should be

- changed the layout of backend.c so its a little more optimised
- finally decided how to approach keypress emulation - after reading 
  the code for xev, xscribble and gtkeyboard
- added Include {} to configuration, extended setup.*:readSetup(), 
- created setup.*:processInclude() to parse the various include files,
  at this stage it only does keymaps
- completely rewrote display.*:sendKey() to use the user configurable
- created a basic keymap, its the file called wayv.key and is used by
- ammended process.c:performAction() to manage sending keypress'

- update the TODO with a few new things and created basic 0.3 plan

- patched display.c:setupDrawable() to put a 1 pixel black border around
  an always on top input window

- got rid of mouse.* and moved its one function to display.*, renaming
  it to display.c:setupPointer()
- ammended files that used setupMouse() and updated the build scripts
- coded display.*:sendKey() to use a static array for special characters
  (and it might make localisation easier later on?)

- renamed display.*:sendKeyPress() to display.*:sendKey() and developed
  inital code to manage special characters

- changed display.*:setupDrawable() to set window properties and
  set backend.c to pass in the extra parameters
- coded the input window to receive the close window client message
  and extended backend.c to handle the ClientMessage event

- added the file VERSION, to more easily control the version information,
  and updated configure.in to use it
- removed wayv.jcc (Code Crusader IDE project file)
- seriously improved the build setup, now properly checks for X libs
- ammended display.c to use XExtension and XTest functions if available
- created two basic man pages and created doc/Makefile.am to install them
- update src/Makefile.am to install wayv.conf properly

- bug fix in setup.c:parseVectors(), memory over run
- bug fix in process.c:createCmdLine(), memory over run
- updated TODO with a lot of future possibilities

- fixed input window bug in backend.c where other mouse presses could
  be used to draw 
- updated most of the *.c files, reduced the history information on
  each function to at most 3 dates - this is the function comment
  header style going forward. I'll writing a code HACKING document for
  the 0.2 release

- rewrote display.c:setupDrawable() to properly setup an input
- added CLEAR to display.c:handleDrawableWindow() to clear a window
- updated backend.c to use CLEAR so previously drawn gestures aren't
  left on the input window
- added new option (Pretty.managed) to the configuration that controls
  turning on or off whether the input window is managed by the window
  manager (updated setup.*:parseSetup())

- wrote code to setup an input box (specifically to support wayv
  used on mobile devices)
- updated setup.c:parseSetup() to parse the Pretty.display key
  if set to input box
- added checks to backend.c to see if display input box
- updated mouse.c:setupMouse() to check for input box to match
  mouse actions on
- extended display.h WPRETTY with window[] for input box area
- added new parameters to display.*:setupDrawable() to allow
  the x and y defining of the drawable to create

- sending single keypress' of non-special keys is now working
- added process.h WA_SENDKEY to match for keypress'
- updated process.c:performAction() to parse the configuration
  file for keypress' to send as actions

- got display.c:writeText() working - now feedback of what
  action is matched is displayed in a popup window
- updated process.c:createCmdLine() to support WAYV_MOUSE_START
  and WAYV_MOUSE_END for more intelligent window placement (its
  a quick kludge for now)
- added WA_KILL to process.h for new config key
- fixed up process.c:performAction() to support cancelling/killing
  of started programs
- updated setup.c:parseProcess() to look for the kill command in
  the configuration
- begin code for sending key presses

- updated setup.c writeSetup(), parseSetup(), setup.h to support
  user feedback
- updated backend.c to use the config feedback setup
- updated backend.c to handle the delays associated with feedback
  cleanly, i.e. fork off another instance of wayV to close the
  windows - later on it'll do fades, etc.
- added 2 new keys to the wayv.conf Pretty configuration structure.
  "feedback" which turns on or off the display of what action was 
  matched (not fully working yet) and "wait" which specifies in
  milli-seconds how long the feedback should be displayed

- created display.*:createDisplay() to setup a GDISPLAY structure
- renamed functions in display.*, setupWindow() to setupDrawable(), 
  createDisplayWindow() to createDrawableWindow(), mapDisplayWindow()
  to mapDrawableWindow(), unmapDisplayWindow() to unmapDrawableWindow()
- updated the source configuration files to build cleaner
- got rid of display.*:createDrawableWindow() and merged the code
  into setupDrawable()
- got rid of display.*:unmapDrawableWindow(), renamed mapDrawableWindow()
  to handleDrawableWindow() and rewrote to control aspects of windows
- began serious writing of display.c:writeText(), should be finished it
  after the next coding session

- added misc.c and misc.h for new non-specific functions
- created misc.c:waitMilli() to wait X number of milli seconds
- updated backend.c to wait X number of milli-seconds before closing
  wayV's UI feedback
- updated configure.in to check for more header files and updated
  src/Makefile.in to compile up misc.*

- updated all the copright messages in the source code for year 2001
- changed my email address to stressbunny.com
- rewrote parts of HOWTO-wayv-conf and moved to the doc directory
- got rid of various files from the docs directory
- rewrote roadmap.txt and overview.txt

- began code to optionally tell the user what action, if any, was matched
- added display.h:GDISPLAY->font to store information on a loaded font
- created display.c:writeText() for writing text to a window
- updated display.c:setupDisplay() to load a font
- updated backend.c:main() to tell user matched action

- moved wayV off SourceForge to stressbunny.com/wayv
- rewrote wayV webpages as required

- began code in process.c:performAction() to parse the commandline and 
  replace values

- added Simon Hart's code to the main codebase - renamed his functions 
  to wayV's coding conventions
- updated ai.h and ai.c:findGesture() with new rule called AIRULE_PDA_VECTOR 
  which does PDA with Simon's vectoring (sense of direction)

03/08/2000 (Simon P Hart)
- added direction based recognition 
  (badly called vectors - it ignores distance and so should be changed)
  it works seperately to the pda recognition, then improves the score of
  a match if the directions match.
- made input grid enarge for short side of (almost) straight lines so that 
  the almost straight line can be distinguished from a 45 degree line 
- fixed setup parameters to be not null if a parameter is missed from the ini
  file to prevent a segv 

- added kmodifier to setup.h:WLAUNCH structure and changed pbutton
- updated setup.c:parseSetup() to support keyboard modifiers in
  the wayv.conf Launch key
- ammended mouse.h with new keyboard modifier defines
- updated mouse.c:setupMouse() to use keyboard modifiers
- added setup.c:getSpaceText() to tokenize a string based on spaces
- fixed bug in setup.c:parseProcess(), process.c:performAction()
  and setup.h:WA_PROCESS which didn't allow command line parameters

- various minor documentation updates pre 0.1
- marked a bug as not existing

- added configure.in, configure, install-sh, missing, mkinstalldirs,
  src/Makefile.am and src/Makefile.in to make compiling easier
- removed VERSION because configure.in now contains version information
- updated various documents to help the end-user setup wayV
- updated defines.h and added PDA_REFUSE to set a threshold so
  gestures which don't have any realistic match aren't matched
- updated ai.c:findGesture() with PDA_REFUSE threshold

- after comming up with a new technique for gesture matching which is
  far better than previous methods so I'm completely getting rid of
  all neural net related code
- updated aimath.c:printMat() format the output slightly different
- decided to get rid of all the neural net (nn) stuff - its cack
- rewrote backend.c getting of nn usage
- got rid of ai.c:trainMnet() and ai.c:matchNnet()
- moved process.c:findGesture() to ai.c and got rid of the neural net
  based gesture matching
- moved process.c:pointDensityAnalysis() to ai.c
- cleaned up the code to compile perfectly with "-Wall"
- got rid of code in setup.h that had entries for brains
- got rid of code in setup.c:readSetup(), setup.c:writeSetup(), 
  setup.c:processSetup(), setup.c:parseSetup() that dealt with brains 
  (neural nets)

- slightly changed setup.c:parseMSpace() to convert matrices so they're
  stored in the configuration file in a more user friendly mannger
- bug fix in gesture.c:gridGPoints() - I was casting floats to ints and
  not paying any attention to rounding - ment the gesture matrices weren't
  always right
- added gesture.c:float2Int() to properly handle converting floats to
- created aimath.c:subMat() to use as part of point density analysis
- updated aimath.c:denormMat() to return a pointer to the changed matrix
- created aimath.c:pdaMat() to count the number of X int's in a matrix,
  used as part of point density analysis
- fixed loads of functions which were creating memory leaks - I was 
  been silly and had forgotten to use freeMat() - instead I was using 
  free() - duh!
- added new gesture matching technique to process.c:findGesture()
- added process.c:pointDensityAnalysis() to do the analysis required to
  match gestures - this is a new technique which I came up with

- updated backend.c to support specifying the configuration file to open
  at the command line
- added process.c:destroyZombies() to get rid of zombie child processes
  (not sure how that affects the portability of the code?)
- updated process.c:performAction() so that child processes aren't closed
  when the parent is and to deal with child zombie process properly
- updated all the source code with the GPL License information and added
  the complete license file

- changed aimath.c:printMat() to support the new matrix structure
- rewrote aimath.c:transMat() getting rid of Meschach
- rewrote aimath.c:mulMat() which now runs faster
- rewrote aimath.c:resizeMat() - yipee all the AI math stuff is done :)

- added aimath.c:setMat() to set all the entries in a matrix to the
  same value
- rewrote aimath.c:addMat()
- got rid of aimath.c:invMat() - it wasn't needed anymore
- updated the Makefile to compile without Meschach

- created MATRIX structure in aimath.h
- rewrote aimath.c:createMat() and aimath.c:freeMat() to get rid of

- rewrote ai.c:trainNnet() to create multiple brains for the gestures
- rewrote process.c:findGesture() to do action matching using the multiple
- updated backend.c so it now uses multiple brains

- updated backend.c to turn on/off user feedback based on the
  configuration file
- bug fix in setup.c:parseSetup() where I'd forgotten to strip the
  quotes from gesture actions
- added support to setup.c/h to parse process lists in an action and
  create list of sub-actions
- created setup.c:getQuoteText() to get quoted text
- finished process.c:performAction() to handle execute, warp and delay

- updated display.c:createDisplayWindow() to drawn a white border around
  the whole display when drawn input mode is activated

- updated process.c:performAction() to close on error starting a child
- updated display.c:createDisplayWindow() to invert colors as the line is
  drawn over them

- updated process.c:performAction() to properly disassociate from the
  display in the child
- finished display.c:setupDisplay()
- added UNSETINT and UNSETCHAR to defines.h for setting empty defaults,
  esp. in display.c
- added display.c:getDisplayInfo() to set values in a GDISPLAY
  structure when a display has been opened
- added display.c:createDisplayWindow() to create an output window to
  draw on
- added display.c:mapDisplayWindow() and display.c:unmapDisplayWindow()
  to show and hide the output window
- added display.c:writePixels() to connect some X and Y points via lines,
  this is used to draw the gesture on screen

- whew discovered that the xevent handling wasn't working correctly for
  the mouse....eventually I figured out what I was doing wrong :)
- renamed usex.c/h to display.c/h
- rewrote display.c:setupXEnv() to be display.c:setupDisplay() and
  create the GDISPLAY struct
- rewrote display.c:closeDisplay() to support the GDISPLAY struct
- added mouse.c/h
- created mouse.c:setupMouse() to setup how mouse events are going
  to be captured
- rename main.c to backend.c
- updated Makefile to reflect all the filename changes have specific
  information for building the backend of wayV
- added WLAUNCH to setup.h to support various launch options
- ammended setup.c:parseSetup() to handle the newly added WLAUNCH
- updated setup.c:writeSetup() to write out WLAUNCH

- ok after fixing the weird malloc/realloc error in http.c:delCookie(),
  it was all my fault, a little bit of silliness overwriting memory
- added ai.c:hebbRotate() for rotating a matrix after attempted match,
  then removed it...it wasn't required after all
- created aimath.c:rescaleMat() to change the shape of a matrix while
  preserving the values
- got rid of printMatRatio() because printMat() and rescaleMat() can
  do the equivalent
- added aimath.c:cmpMat() to compare two matrices
- created gesture.c:findGesture() to try and find a gesture in the
  gesture space
- created process.h/c to hold processing and matching of gestures
- move gesture.c:findGesture() to process.c:findGesture(), mostly
  because of weird compile time errors
- created process.c:performAction() to process an action list in a
  gesture structure...at the moment it doesn't process an action
  properly but will execute a program :)

- hmm, getting strange happenings when using malloc and realloc under
  Linux 2.2.12-20, egcs-2.91.66, RedHat 6.1 - core dumps are occuring
  for no sane reason that I can see
- updated gesture.c:gridGPoints() to return a MATRIX with a gesture
- updated ai.c:matchNnet() to perform AI Hebb rule matching
- added aimath.c:denormMat() to convert a matrix from +1/-1 to +1/0

- updated ai.c:trainNnet() to support the Hebb Rule
- added setup.c:parseMSpace() for converting a matrix to the ascii
  comma delimited equivalent
- updated setup.c:writeSetup() to translate the matrices to ascii
- extended setup.c/h:getKeyText() to support stripping of quotes and
  updated various function usage in setup.c
- add "description" key to the gesture structure and extended various
  setup.c/h functions to support it

- after spending the last few days looking at matrix math thinking
  I already need to replace meschach, the end result is that I won't
  be doing that (yet)

- updated aimath.c:normMat() to create a new matrix and return it
  and changed to convert less than 1 to -1

- added in better function documentation to aimath.c
- added aimath.c:copyMat() for copying one matrix to another
- added aimath.c:cloneMat() for making an exact clone of a matrix
- stripped out a most of the functions from ai.c
- added proper function documentation to ai.c
- finished ai.c:trainNnet()

- created roadmap of the features and developments up to version 0.3
- worked on the functional specification
- changed the website design slightly

- worked on the functional specification

- created a lot of graphics and diagrams for the functional
- wrote up quite a lot of the functional specification
- rewrote the overview slightly and turned it into HTML
- added both documents to the website and the CVS

- updated setup.c, renamed functions and added a wrapper, readSetup(),
  grouping config file related functions together
- renamed 2 functions in setup.c
- added setup.c:processSetup() to post process the configuration
  struct and convert various ascii keys to data structures
- added setup.c:getKeyNum() to get int back instead of text key
- edited setup.c:parseSetup() to use setup.c:getKeyNum() and to
  set fields to defaults
- updated aimath.c:printMat() to display more than just 1's or 0's
- added setup.c:parseGSpace() to convert gridspaces into matrices
- created setup.c:writeSetup() to write out the setup file

- worked on the functional specification
- researched webcams

- learn X and write backend for catching mouse events (MOSTLY DONE)
- learn GTK and design front end
	* design UI (MOSTLY DONE)
- learn about neural nets (DONE)
- obtain matrix library (DONE)

wayV is hosted on StressBunny.com