In order to write a program myself to do this I had to reverse engineer the ACD file format. This is what I discovered.
Address Bits Description
--------- ---- -----------
$00000000 32 Unknown
$00000004 16 Unknown
$00000006 32 Relative offset to last Block
$0000000A 32 Offset to font tables?
$0000000E 16 Number of pages in document
...
$00000018 32 Block 1 unknown
$0000001C 16 Block 1 page number
$0000001E 32 Block 1 relative offset to
next block
$00000022 16 Block 1 length of string
$00000024 8 Block 1 array of characters
Block data structure
--------------------
rel+$0000 32 Unknown
rel+$0004 16 Page number
rel+$0006 32 Relative offset to next block
rel+$000A 16 Length of string
rel+$000C 8 Array of characters
...
The data structure seems to start at address $00000018 and consists of a linked list that can be walked. The last data structure contains a null relative offset.
Address $0000000E contains the total number of pages in the document. As you walk the data structure you encounter blocks that have page numbers equal to zero. These seem to be blocks that are obsolete and replaced with new blocks at the end of the list. Deleted pages contain the value $DEAD for the page number.
To delete a page from the list, (1) decrement the total number of pages, (2) walk the list, (3) decrement the page number on any pages greater than the one being deleted, and (4) write the value $DEAD at the page number the is to be deleted.
If you have any other information about the ACD format, let me know
nick@b-e.com. Thanks.