
Registry Command Line API Tool
------------------------------

  This progam is intended to fill a particular need.  I needed to make the 
  wine registry look like it would have been if my application would have 
  been installed by its installation program.  Since this was not possible I 
  took the following approach.

  1 - Use regedit to export my full Windows registry before I install my 
      application.

  2 - Use regedit to export my full Windows registry after I had install my 
      application.

  3 - Generate the differences between the two image.   What I obtain from the 
      diff is what I need to apply to the wine registry.

  Obvisouly the process is not that straight forward to solve, first, 
  you don't get the diff between two Windows regedit exported .reg file by 
  doing a simple diff.   What I had to do is a little more complex, but not 
  that much...

  (Assuming that the registry picture files are 
  named ./before.reg and ./after.reg)

  1 - Parse the before.reg and after.reg file into regFixer.pl, in order to 
      obtain lines in the form [HKEY\Sub1\Sub2\...\Subn]"Value"="Data"  
      (where "Data" can be prefixed by the type identifier : hex:, hex(0000000?) 
      or dword:)

  2 - Generate the diff between the before.reg.fix and after.reg.fix 
      into app.diff

  Now we have a app.reg file that contain what has been done by installing the
  application.  To this we extract the parts that we are interested in using 
  grep (and fix it with sed) and put that into app.added by example 
  ( let's say we keep the added values only ).

  At this point we know which registry entry to add to the wine registry.  It 
  only remains to take the format we have and reset it into a format  we get from
  regedit.
    
  So, once you parsed app.added into regRestorer.pl you get an app.reg ready to 
  process by regapi.

  So, this package comes with a few pieces:

  regFixer.pl     - Will convert the export of regedit 
                    into something "diff-able"

  regRestorer.pl  - Will convert "cleaned" diff file into 
                    something "regapi-able"
  
  regSet.sh       - Will do the procedure explained herein 
                    for the added key only.

  
FAQ
---

  Quick Start Guide
  -----------------
  1 - Get a snapshot of your windows registry in before.reg, (regedit/export)
  2 - Install your application,
  3 - Get a snapshot of your windows registry in after.reg.
  4 - Invoke ./regSet.sh before.reg after.reg


  Adding key I have in a regedit export file (nothing to diff with...)
  ------------------------------------------
  1 - Invoke ./regSet.sh /dev/null myRegistry.reg

  regapi help
  -----------
  1 - regapi has some sort of "man page like" help in it, simply invoke it 
      without any arguments.
 
Hope this is of any use to you.

Sylvain St-Germain. 
