bamse-0.9.3: Bamse/MSIExtra.hs
--------------------------------------------------------------------
-- |
-- Module : Bamse.MSIExtra
-- Description : Extensions to the MSI COM object model.
-- Copyright : (c) Sigbjorn Finne, 2004-2009
-- License : BSD3
--
-- Maintainer : Sigbjorn Finne <sof@forkIO.com>
-- Stability : provisional
-- Portability : portable
--
-- The MSI TLB doesn't provide everything we need to
-- use the object model. This module provides these
-- extra bits.
--
--------------------------------------------------------------------
module Bamse.MSIExtra where
import Data.Char ( toUpper )
import Util.Path ( fileSuffix )
import Bamse.Package
-- product ID tags (from MsiDefs.h, not provided in the TLB).
data ProductIDTag
= PID_DICTIONARY
| PID_CODEPAGE
| PID_TITLE
| PID_SUBJECT
| PID_AUTHOR
| PID_KEYWORDS
| PID_COMMENTS
| PID_TEMPLATE
| PID_LASTAUTHOR
| PID_REVNUMBER
| PID_EDITTIME
| PID_LASTPRINTED
| PID_CREATE_DTM
| PID_LASTSAVE_DTM
| PID_PAGECOUNT
| PID_WORDCOUNT
| PID_CHARCOUNT
| PID_THUMBNAIL
| PID_APPNAME
| PID_SECURITY
-- The values for the product tags is identical to the Int
-- values the derived Enum instance maps onto (in the order
-- given above), so let's make use of 'deriving' here. This
-- is all somewhat brittle, though..
deriving ( Eq, Enum, Show )
shortLong :: String -> String
shortLong nm = short_form
where
badChars = " +,;=[]"
restricted_nm = map (\ ch -> if ch `elem` badChars then '_' else ch) nm
ext = fileSuffix nm
short_form
| length restricted_nm > 8 || length ext > 3 = take 6 (map toUpper restricted_nm) ++ "~1|" ++ nm
| otherwise = restricted_nm
data MsidbFileAttributes
= MsidbFileAttributesReadOnly -- = 0x00000001,
| MsidbFileAttributesHidden -- = 0x00000002,
| MsidbFileAttributesSystem -- = 0x00000004,
| MsidbFileAttributesReserved0 -- = 0x00000008, // Internal use only - must be 0
| MsidbFileAttributesReserved1 -- = 0x00000040, // Internal use only - must be 0
| MsidbFileAttributesReserved2 -- = 0x00000080, // Internal use only - must be 0
| MsidbFileAttributesReserved3 -- = 0x00000100, // Internal use only - must be 0
| MsidbFileAttributesVital -- = 0x00000200,
| MsidbFileAttributesChecksum -- = 0x00000400,
| MsidbFileAttributesPatchAdded -- = 0x00001000, // Internal use only - set by patches
| MsidbFileAttributesNoncompressed -- = 0x00002000,
| MsidbFileAttributesCompressed -- = 0x00004000,
| MsidbFileAttributesReserved4 -- = 0x00008000, // Internal use only - must be 0
-- internal record type gathering up parameters for the MSI writer/generator.
--
data WriterEnv
= WriterEnv { w_toolDir :: FilePath
, w_templateDir :: FilePath
, w_outFile :: FilePath
, w_srcDir :: FilePath
, w_package :: PackageData
}