I wrote an open-source IPD to XML to IPD converter in C, tested on Windows and Linux. It can download be here:
hxxp://darkircop.org/bb/
It converts IPD files to XML, which you can edit, and then convert back to IPD. To extend to the tool and make it's output more pretty, you can use XSLT to convert the XMLs to a more human readable output. I've currently written XSLTs for for service books. This allows you, among other things, to edit, merge, delete and add service books.
It lacks a GUI, but it ought to be trivial to write a frontend to edit the XML files. The goal was to keep the tool / converter as simple as possible and to focus on data integrity (i.e., not mess up IPD files).
Here's a screenshot of the XML output
Code:
<?xml version="1.0" encoding="UTF-8"?>
<ipd version="2">
<database name="Service Book">
<record uid="0xc78b705d">
<field type="1">01000000</field>
<type>0</type>
<ruid>0xc78b705d</ruid>
<name>WAP2 Transport 01</name>
<dsid/>
<userid>-1</userid>
<uid>WAP2 trans01</uid>
<cid>WPTCP</cid>
<appdata type="1">
<unknown datatype="str" type="1">212.183.137.12:8799</unknown>
<unknown datatype="str" type="8">212.183.137.12:8799</unknown>
<field type="2">01</field>
<field type="3">01</field>
<unknown datatype="str" type="4">0.0.0.0</unknown>
<field type="18">01</field>
</appdata>
<compression>1</compression>
<encryption>1</encryption>
<description>WPTCP Trans Vodafone UK (136163)</description>
<source>3</source>
<field type="18">00000000</field>
<field type="24">1366084a</field>
<hrt>
<field type="10">03</field>
<name>HRT</name>
<npc>0x30</npc>
<apn>pp.vodafone.co.uk</apn>
<password>web</password>
<username>web</username>
<field type="18">0000000000</field>
<ip>0.0.0.0</ip>
<ports>0:0</ports>
</hrt>
</record>
...
</database>
</ipd>