
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 similar
  to the one we get from regedit.

  I say "similar" because there is a tiny difference between Windows regedit 
  export format and the format actually required by the tool.

  The problem with this (and it is not a big one) is that regedit exports long 
  data streams onto many lines, and since I don't have tons of time I setup 
  another Perl script (regRestorer.pl) that fixes this (this could easily 
  be done in C obviously) (left as exercise ;-) ).  
    
  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. 
