TODO for Orange: o Use libgsf instead of libole2 o Convert to pluggable architecture, and make Windows CE .CAB extraction one of the plugins. Maybe something like this: liborange - plugin framework liborange-plugins - default plugins: - apk: TomTom .apk file - arh: TomTom .arh file - dllinflate - suf: SetupFactory, if libdynamite was found by the configure script - inno: InnoSetup, if ./configure --enable-inno - iscab: InstallShield .CAB file, if libunshield was found by the configure script - issfx1: InstallShield SFX, type 1 - issfx2: InstallShield SFX, type 2 - mscab: Microsoft Cabinet File - mscabsplit: Microsoft Cabinet File - olestream: For example .MSI files - vise: Installer VISE, if ./configure --enable-vise liborange-mscabce - plugin for saving Windows CE .CAB files: - mscabce: Installable Microsoft Cabinet File for Windows CE Plugin API: enum HandlingStatus { NO, MAYBE, YES, }; typedef HandlingStatus (*CanHandle)(filename, magic); typedef bool (*Handle)(filename); struct Plugin { /** Plugins with lower ordinals are called first. For example the check for installable .CAB files should be done before running cabextract! Normally in range 1-100. Default value 50. */ int ordinal; CanHandle can_handle; Handle handle; };