Subject: OLEdecod
From: Filters Proyect <[email-masked]>
To: Caolan McNamara <[email-masked]>, Andrew Scriven <[email-masked]>
Date: Mon, 12 Oct 1998 03:35:22 -0500 (CDT)

Hello.

Andrew, I have studied your excellent code. Thank you for writting it! I
never though that a replacement for LAOLA in C could be done in a very few
lines of code.  And thank you to explain me about directories in OLE files
too. It is easy, but I didn't understood until you explain it to me. Thank
you again. 

As attachment (gzipped), I send you guys my own version of the Andrew's
code.  Andrew, if you like it, you could incorporate it to your own version:

Changes:

* Added a lot of validations (memory allocations and file access).
* Named OLEdecod (Andrew please, rename it again if you want).
* Include the Caolan's read from memory functions (Andrew's functions
  didn't work for me, in Intel, I don't know why).
* Simplified the memory pps structure. Before, pps_list was a pointer to
  an array of pointers to pps_entry. Now, pps_list is a pointer to an
  array of pps_entry. Less memory to allocate!
* Each pps of type file (called by Microsoft streams) are now saved in
  separated temporal files, wich names are in pps_list.
* Added freeOLEtree function, wich should be called after processing the
  tree (see main.c).
* In pps_entry, changed type of next, previous and dir fields: now are U32
  (unsigned long int) for simplicity.
* Added an example (main.c) wich shows how to visit only the top level
  streams (Caolan, see that file).
* Added VERBOSE symbol. Compile the attachment using -DVERBOSE, please.
* Added more bytes that I would want.
* Tested on MS-DOS (compiled with Borland C++ 3.1).

Missing:

* Don't know how to interpret seconds and days fields.
* The solution to MAXBLOCKS artificial limit.
  Here, one proposed solution:
     Before extract the sbd block list, read all the number blocks from
     BDepot and count it, then allocate the nedded memory and finally
     extract the list.
  This solution should be easy, and fast because we read from memory.
  The same goes for root_list.
* Write and test big endian version of Caolan's read from memory functions.

And that's all.

Hope you like it. Please, send me your opinions and flames.

-- Filters Proyect Maintainer: Arturo Tena <[email-masked]>
<http://centauri.lci.ulsa.mx/~filters/> (this server is down in weekends :( )