module OpenAFP.Prelude.Instances where
import OpenAFP.Types
import OpenAFP.Records
import OpenAFP.Internals
import OpenAFP.Prelude.InstanceT
import OpenAFP.Prelude.InstancePTX
import OpenAFP.Prelude.InstanceAFP
import qualified Data.ByteString as S

instance Rec T_ where
    recSizeOf c = 1 + (S.length $ packChunk c)

instance Chunk AFP_ where
    type N AFP_ = N3
    type BufOf AFP_ = Buffer2
    mkChunk = AFP_
    chunkDecon (AFP_ x y) = (x, y)
    chunkTypeLookup = lookupAFP
    chunkApply = applyAFP

apply :: (Chunk c, Rec r) => c -> (r -> t) -> t
apply c f = f (decodeChunk c)

applyAFP :: forall x. N3 -> AFP_ -> (forall a. (Rec a) => (a -> x)) -> x
applyAFP x rec f = case x of
    0xD38C87 -> apply rec (f :: CPI -> x)
    0xD38C89 -> apply rec (f :: FNI -> x)
    0xD38C8A -> apply rec (f :: CFI -> x)
    0xD3A088 -> apply rec (f :: MFC -> x)
    0xD3A090 -> apply rec (f :: TLE -> x)
    0xD3A288 -> apply rec (f :: MCC -> x)
    0xD3A289 -> apply rec (f :: FNM -> x)
    0xD3A66B -> apply rec (f :: OBD -> x)
    0xD3A67B -> apply rec (f :: IID -> x)
    0xD3A687 -> apply rec (f :: CPD -> x)
    0xD3A688 -> apply rec (f :: MDD -> x)
    0xD3A689 -> apply rec (f :: FND -> x)
    0xD3A692 -> apply rec (f :: CDD -> x)
    0xD3A69B -> apply rec (f :: PTD1 -> x)
    0xD3A6AF -> apply rec (f :: PGD -> x)
    0xD3A6BB -> apply rec (f :: GDD -> x)
    0xD3A6C5 -> apply rec (f :: FGD -> x)
    0xD3A6E3 -> apply rec (f :: DXD -> x)
    0xD3A6E7 -> apply rec (f :: LND -> x)
    0xD3A6EB -> apply rec (f :: BDD -> x)
    0xD3A6FB -> apply rec (f :: IDD -> x)
    0xD3A77B -> apply rec (f :: IOC -> x)
    0xD3A787 -> apply rec (f :: CPC -> x)
    0xD3A788 -> apply rec (f :: MMC -> x)
    0xD3A789 -> apply rec (f :: FNC -> x)
    0xD3A78A -> apply rec (f :: CFC -> x)
    0xD3A79B -> apply rec (f :: CTC -> x)
    0xD3A7AF -> apply rec (f :: PMC -> x)
    0xD3A85F -> apply rec (f :: BPS -> x)
    0xD3A877 -> apply rec (f :: BCA -> x)
    0xD3A87B -> apply rec (f :: BII -> x)
    0xD3A887 -> apply rec (f :: BCP -> x)
    0xD3A889 -> apply rec (f :: BFN -> x)
    0xD3A88A -> apply rec (f :: BCF -> x)
    0xD3A892 -> apply rec (f :: BOC -> x)
    0xD3A89B -> apply rec (f :: BPT -> x)
    0xD3A8A7 -> apply rec (f :: BDI -> x)
    0xD3A8A8 -> apply rec (f :: BDT -> x)
    0xD3A8AD -> apply rec (f :: BNG -> x)
    0xD3A8AF -> apply rec (f :: BPG -> x)
    0xD3A8BB -> apply rec (f :: BGR -> x)
    0xD3A8C4 -> apply rec (f :: BDG -> x)
    0xD3A8C5 -> apply rec (f :: BFG -> x)
    0xD3A8C6 -> apply rec (f :: BRG -> x)
    0xD3A8C7 -> apply rec (f :: BOG -> x)
    0xD3A8C9 -> apply rec (f :: BAG -> x)
    0xD3A8CA -> apply rec (f :: BDM -> x)
    0xD3A8CB -> apply rec (f :: BPM -> x)
    0xD3A8CC -> apply rec (f :: BMM -> x)
    0xD3A8CD -> apply rec (f :: BFM -> x)
    0xD3A8CE -> apply rec (f :: BR -> x)
    0xD3A8D9 -> apply rec (f :: BSG -> x)
    0xD3A8DF -> apply rec (f :: BMO -> x)
    0xD3A8E3 -> apply rec (f :: BDX -> x)
    0xD3A8EB -> apply rec (f :: BBC -> x)
    0xD3A8FB -> apply rec (f :: BIM -> x)
    0xD3A95F -> apply rec (f :: EPS -> x)
    0xD3A977 -> apply rec (f :: ECA -> x)
    0xD3A97B -> apply rec (f :: EII -> x)
    0xD3A987 -> apply rec (f :: ECP -> x)
    0xD3A989 -> apply rec (f :: EFN -> x)
    0xD3A98A -> apply rec (f :: ECF -> x)
    0xD3A992 -> apply rec (f :: EOC -> x)
    0xD3A99B -> apply rec (f :: EPT -> x)
    0xD3A9A7 -> apply rec (f :: EDI -> x)
    0xD3A9A8 -> apply rec (f :: EDT -> x)
    0xD3A9AD -> apply rec (f :: ENG -> x)
    0xD3A9AF -> apply rec (f :: EPG -> x)
    0xD3A9BB -> apply rec (f :: EGR -> x)
    0xD3A9C4 -> apply rec (f :: EDG -> x)
    0xD3A9C5 -> apply rec (f :: EFG -> x)
    0xD3A9C6 -> apply rec (f :: ERG -> x)
    0xD3A9C7 -> apply rec (f :: EOG -> x)
    0xD3A9C9 -> apply rec (f :: EAG -> x)
    0xD3A9CA -> apply rec (f :: EDM -> x)
    0xD3A9CB -> apply rec (f :: EPM -> x)
    0xD3A9CC -> apply rec (f :: EMM -> x)
    0xD3A9CD -> apply rec (f :: EFM -> x)
    0xD3A9CE -> apply rec (f :: ER -> x)
    0xD3A9D9 -> apply rec (f :: ESG -> x)
    0xD3A9DF -> apply rec (f :: EMO -> x)
    0xD3A9E3 -> apply rec (f :: EDX -> x)
    0xD3A9EB -> apply rec (f :: EBC -> x)
    0xD3A9FB -> apply rec (f :: EIM -> x)
    0xD3AAE7 -> apply rec (f :: LNC -> x)
    0xD3AB77 -> apply rec (f :: MCA -> x)
    0xD3AB88 -> apply rec (f :: MMT -> x)
    0xD3AB89 -> apply rec (f :: FNN -> x)
    0xD3AB8A -> apply rec (f :: MCF -> x)
    0xD3AB92 -> apply rec (f :: MCD -> x)
    0xD3ABAF -> apply rec (f :: MPG -> x)
    0xD3ABBB -> apply rec (f :: MGO -> x)
    0xD3ABC3 -> apply rec (f :: MDR -> x)
    0xD3ABCC -> apply rec (f :: IMM -> x)
    0xD3ABD8 -> apply rec (f :: MPO -> x)
    0xD3ABEA -> apply rec (f :: MSU -> x)
    0xD3ABEB -> apply rec (f :: MBC -> x)
    0xD3ABFB -> apply rec (f :: MIO -> x)
    0xD3AC6B -> apply rec (f :: OBP -> x)
    0xD3AC7B -> apply rec (f :: ICP -> x)
    0xD3AC89 -> apply rec (f :: FNP -> x)
    0xD3ACAF -> apply rec (f :: PGP1 -> x)
    0xD3AE89 -> apply rec (f :: FNO -> x)
    0xD3AF5F -> apply rec (f :: IPS -> x)
    0xD3AFAF -> apply rec (f :: IPG -> x)
    0xD3AFC3 -> apply rec (f :: IOB -> x)
    0xD3AFD8 -> apply rec (f :: IPO -> x)
    0xD3B077 -> apply rec (f :: CAT -> x)
    0xD3B15F -> apply rec (f :: MPS -> x)
    0xD3B18A -> apply rec (f :: MCF1 -> x)
    0xD3B19B -> apply rec (f :: PTD -> x)
    0xD3B1AF -> apply rec (f :: PGP -> x)
    0xD3B1DF -> apply rec (f :: MMO -> x)
    0xD3B288 -> apply rec (f :: PFC -> x)
    0xD3B2A7 -> apply rec (f :: IEL -> x)
    0xD3B490 -> apply rec (f :: LLE -> x)
    0xD3EE7B -> apply rec (f :: IRD -> x)
    0xD3EE89 -> apply rec (f :: FNG -> x)
    0xD3EE92 -> apply rec (f :: OCD -> x)
    0xD3EE9B -> apply rec (f :: PTX -> x)
    0xD3EEBB -> apply rec (f :: GAD -> x)
    0xD3EEEB -> apply rec (f :: BDA -> x)
    0xD3EEEE -> apply rec (f :: NOP -> x)
    0xD3EEFB -> apply rec (f :: IPD -> x)
    _        -> apply rec (f :: Unknown -> x)

instance Chunk MCF_ where
    type N MCF_ = N0
    type BufOf MCF_ = Buffer2
    mkChunk = MCF_
    chunkDecon (MCF_ x y) = (x, y)
    chunkTypeLookup = lookupMCF
    chunkApply = applyMCF

applyMCF :: forall x. N0 -> MCF_ -> (forall a. (Rec a) => (a -> x)) -> x
applyMCF x rec f = case x of
    _        -> apply rec (f :: MCF_T -> x)

instance RecChunk MCF where
    type ChunkOf MCF = MCF_
    readChunks r = mcf_Chunks r
    writeChunks r io = do
        cs <- io
        return $ r { mcf_Chunks = cs }

instance Rec MCF_ where
    recSizeOf c = 2 + (S.length $ packChunk c)

instance Rec MCF where
    recGet = do a01 <- get; a02 <- get; a03 <- getList; return $ MCF a01 a02 a03
    recPut r = do put $ mcf_Type r; put $ mcf_ r; putList $ mcf_Chunks r; return ()
    recSizeOf r = sum [ sizeOf $ mcf_Type r, sizeOf $ mcf_ r, sizeOf $ mcf_Chunks r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mcf_Type r), viewField "_" (viewNumber $ mcf_ r), viewField "Chunks" (viewChunks $ mcf_Chunks r) ]
    recType = fromEnum . mcf_Type

instance Rec MCF1_Data where
    recGet = do a01 <- get; a02 <- get; a03 <- get; a04 <- get; a05 <- get; a06 <- get; a07 <- get; a08 <- get; return $ MCF1_Data a01 a02 a03 a04 a05 a06 a07 a08
    recPut r = do put $ mcf1_CodedFontLocalId r; put $ mcf1_Reserved1 r; put $ mcf1_CodedFontResourceSectionId r; put $ mcf1_Reserved2 r; put $ mcf1_CodedFontName r; put $ mcf1_CodePageName r; put $ mcf1_FontCharacterSetName r; put $ mcf1_CharacterRotation r; return ()
    recSizeOf r = sum [ sizeOf $ mcf1_CodedFontLocalId r, sizeOf $ mcf1_Reserved1 r, sizeOf $ mcf1_CodedFontResourceSectionId r, sizeOf $ mcf1_Reserved2 r, sizeOf $ mcf1_CodedFontName r, sizeOf $ mcf1_CodePageName r, sizeOf $ mcf1_FontCharacterSetName r, sizeOf $ mcf1_CharacterRotation r ]
    recView r = viewRecord (typeOf r) [ viewField "CodedFontLocalId" (viewNumber $ mcf1_CodedFontLocalId r), viewField "Reserved1" (viewString $ mcf1_Reserved1 r), viewField "CodedFontResourceSectionId" (viewNumber $ mcf1_CodedFontResourceSectionId r), viewField "Reserved2" (viewString $ mcf1_Reserved2 r), viewField "CodedFontName" (viewString $ mcf1_CodedFontName r), viewField "CodePageName" (viewString $ mcf1_CodePageName r), viewField "FontCharacterSetName" (viewString $ mcf1_FontCharacterSetName r), viewField "CharacterRotation" (viewNumber $ mcf1_CharacterRotation r) ]
    recType r = 0

instance RecData MCF1 MCF1_Data where
    type RecOf MCF1_Data = MCF1
    type DataOf MCF1 = MCF1_Data
    readData r = mcf1_Data r
    writeData r cs = r { mcf1_Data = cs }

instance Rec MCF1 where
    recGet = do a01 <- get; a02 <- get; a03 <- get; a04 <- get; a05 <- getList; return $ MCF1 a01 a02 a03 a04 a05
    recPut r = do put $ mcf1_Type r; put $ mcf1_ r; put $ mcf1_RepeatingGroupLength r; put $ mcf1__ r; putList $ mcf1_Data r; return ()
    recSizeOf r = sum [ sizeOf $ mcf1_Type r, sizeOf $ mcf1_ r, sizeOf $ mcf1_RepeatingGroupLength r, sizeOf $ mcf1__ r, sizeOf $ mcf1_Data r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mcf1_Type r), viewField "_" (viewNumber $ mcf1_ r), viewField "RepeatingGroupLength" (viewNumber $ mcf1_RepeatingGroupLength r), viewField "__" (viewString $ mcf1__ r), viewField "Data" (viewData $ mcf1_Data r) ]
    recType = fromEnum . mcf1_Type

instance Rec MDD where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MDD a01 a02 a03
    recPut r = do put $ mdd_Type r; put $ mdd_ r; put $ mdd r; return ()
    recSizeOf r = sum [ sizeOf $ mdd_Type r, sizeOf $ mdd_ r, sizeOf $ mdd r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mdd_Type r), viewField "_" (viewNumber $ mdd_ r), viewField "" (viewNStr $ mdd r) ]
    recType = fromEnum . mdd_Type

instance Rec MDR where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MDR a01 a02 a03
    recPut r = do put $ mdr_Type r; put $ mdr_ r; put $ mdr r; return ()
    recSizeOf r = sum [ sizeOf $ mdr_Type r, sizeOf $ mdr_ r, sizeOf $ mdr r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mdr_Type r), viewField "_" (viewNumber $ mdr_ r), viewField "" (viewNStr $ mdr r) ]
    recType = fromEnum . mdr_Type

instance Rec MFC where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MFC a01 a02 a03
    recPut r = do put $ mfc_Type r; put $ mfc_ r; put $ mfc r; return ()
    recSizeOf r = sum [ sizeOf $ mfc_Type r, sizeOf $ mfc_ r, sizeOf $ mfc r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mfc_Type r), viewField "_" (viewNumber $ mfc_ r), viewField "" (viewNStr $ mfc r) ]
    recType = fromEnum . mfc_Type

instance Rec MGO where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MGO a01 a02 a03
    recPut r = do put $ mgo_Type r; put $ mgo_ r; put $ mgo r; return ()
    recSizeOf r = sum [ sizeOf $ mgo_Type r, sizeOf $ mgo_ r, sizeOf $ mgo r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mgo_Type r), viewField "_" (viewNumber $ mgo_ r), viewField "" (viewNStr $ mgo r) ]
    recType = fromEnum . mgo_Type

instance Rec MIO where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MIO a01 a02 a03
    recPut r = do put $ mio_Type r; put $ mio_ r; put $ mio r; return ()
    recSizeOf r = sum [ sizeOf $ mio_Type r, sizeOf $ mio_ r, sizeOf $ mio r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mio_Type r), viewField "_" (viewNumber $ mio_ r), viewField "" (viewNStr $ mio r) ]
    recType = fromEnum . mio_Type

instance Rec MMC where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MMC a01 a02 a03
    recPut r = do put $ mmc_Type r; put $ mmc_ r; put $ mmc r; return ()
    recSizeOf r = sum [ sizeOf $ mmc_Type r, sizeOf $ mmc_ r, sizeOf $ mmc r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mmc_Type r), viewField "_" (viewNumber $ mmc_ r), viewField "" (viewNStr $ mmc r) ]
    recType = fromEnum . mmc_Type

instance Rec MMO where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MMO a01 a02 a03
    recPut r = do put $ mmo_Type r; put $ mmo_ r; put $ mmo r; return ()
    recSizeOf r = sum [ sizeOf $ mmo_Type r, sizeOf $ mmo_ r, sizeOf $ mmo r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mmo_Type r), viewField "_" (viewNumber $ mmo_ r), viewField "" (viewNStr $ mmo r) ]
    recType = fromEnum . mmo_Type

instance Rec MMT where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MMT a01 a02 a03
    recPut r = do put $ mmt_Type r; put $ mmt_ r; put $ mmt r; return ()
    recSizeOf r = sum [ sizeOf $ mmt_Type r, sizeOf $ mmt_ r, sizeOf $ mmt r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mmt_Type r), viewField "_" (viewNumber $ mmt_ r), viewField "" (viewNStr $ mmt r) ]
    recType = fromEnum . mmt_Type

instance Rec MPG where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MPG a01 a02 a03
    recPut r = do put $ mpg_Type r; put $ mpg_ r; put $ mpg r; return ()
    recSizeOf r = sum [ sizeOf $ mpg_Type r, sizeOf $ mpg_ r, sizeOf $ mpg r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mpg_Type r), viewField "_" (viewNumber $ mpg_ r), viewField "" (viewNStr $ mpg r) ]
    recType = fromEnum . mpg_Type

instance Rec MPO where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MPO a01 a02 a03
    recPut r = do put $ mpo_Type r; put $ mpo_ r; put $ mpo r; return ()
    recSizeOf r = sum [ sizeOf $ mpo_Type r, sizeOf $ mpo_ r, sizeOf $ mpo r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mpo_Type r), viewField "_" (viewNumber $ mpo_ r), viewField "" (viewNStr $ mpo r) ]
    recType = fromEnum . mpo_Type

instance Rec MPS where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MPS a01 a02 a03
    recPut r = do put $ mps_Type r; put $ mps_ r; put $ mps r; return ()
    recSizeOf r = sum [ sizeOf $ mps_Type r, sizeOf $ mps_ r, sizeOf $ mps r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ mps_Type r), viewField "_" (viewNumber $ mps_ r), viewField "" (viewNStr $ mps r) ]
    recType = fromEnum . mps_Type

instance Rec MSU where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ MSU a01 a02 a03
    recPut r = do put $ msu_Type r; put $ msu_ r; put $ msu r; return ()
    recSizeOf r = sum [ sizeOf $ msu_Type r, sizeOf $ msu_ r, sizeOf $ msu r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ msu_Type r), viewField "_" (viewNumber $ msu_ r), viewField "" (viewNStr $ msu r) ]
    recType = fromEnum . msu_Type

instance Rec NOP where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ NOP a01 a02 a03
    recPut r = do put $ nop_Type r; put $ nop_ r; put $ nop r; return ()
    recSizeOf r = sum [ sizeOf $ nop_Type r, sizeOf $ nop_ r, sizeOf $ nop r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ nop_Type r), viewField "_" (viewNumber $ nop_ r), viewField "" (viewNStr $ nop r) ]
    recType = fromEnum . nop_Type

instance Rec OBD where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ OBD a01 a02 a03
    recPut r = do put $ obd_Type r; put $ obd_ r; put $ obd r; return ()
    recSizeOf r = sum [ sizeOf $ obd_Type r, sizeOf $ obd_ r, sizeOf $ obd r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ obd_Type r), viewField "_" (viewNumber $ obd_ r), viewField "" (viewNStr $ obd r) ]
    recType = fromEnum . obd_Type

instance Rec OBP where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ OBP a01 a02 a03
    recPut r = do put $ obp_Type r; put $ obp_ r; put $ obp r; return ()
    recSizeOf r = sum [ sizeOf $ obp_Type r, sizeOf $ obp_ r, sizeOf $ obp r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ obp_Type r), viewField "_" (viewNumber $ obp_ r), viewField "" (viewNStr $ obp r) ]
    recType = fromEnum . obp_Type

instance Rec OCD where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ OCD a01 a02 a03
    recPut r = do put $ ocd_Type r; put $ ocd_ r; put $ ocd r; return ()
    recSizeOf r = sum [ sizeOf $ ocd_Type r, sizeOf $ ocd_ r, sizeOf $ ocd r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ ocd_Type r), viewField "_" (viewNumber $ ocd_ r), viewField "" (viewNStr $ ocd r) ]
    recType = fromEnum . ocd_Type

instance Rec PFC where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ PFC a01 a02 a03
    recPut r = do put $ pfc_Type r; put $ pfc_ r; put $ pfc r; return ()
    recSizeOf r = sum [ sizeOf $ pfc_Type r, sizeOf $ pfc_ r, sizeOf $ pfc r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ pfc_Type r), viewField "_" (viewNumber $ pfc_ r), viewField "" (viewNStr $ pfc r) ]
    recType = fromEnum . pfc_Type

instance Rec PGD where
    recGet = do a01 <- get; a02 <- get; a03 <- get; a04 <- get; a05 <- get; a06 <- get; a07 <- get; a08 <- get; a09 <- get; a10 <- get; a11 <- get; return $ PGD a01 a02 a03 a04 a05 a06 a07 a08 a09 a10 a11
    recPut r = do put $ pgd_Type r; put $ pgd_ r; put $ pgd_XUnitBase r; put $ pgd_YUnitBase r; put $ pgd_XLUnitsperUnitBase r; put $ pgd_YLUnitsperUnitBase r; put $ pgd_Reserved1 r; put $ pgd_XPageSize r; put $ pgd_Reserved2 r; put $ pgd_YPageSize r; put $ pgd__ r; return ()
    recSizeOf r = sum [ sizeOf $ pgd_Type r, sizeOf $ pgd_ r, sizeOf $ pgd_XUnitBase r, sizeOf $ pgd_YUnitBase r, sizeOf $ pgd_XLUnitsperUnitBase r, sizeOf $ pgd_YLUnitsperUnitBase r, sizeOf $ pgd_Reserved1 r, sizeOf $ pgd_XPageSize r, sizeOf $ pgd_Reserved2 r, sizeOf $ pgd_YPageSize r, sizeOf $ pgd__ r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ pgd_Type r), viewField "_" (viewNumber $ pgd_ r), viewField "XUnitBase" (viewNumber $ pgd_XUnitBase r), viewField "YUnitBase" (viewNumber $ pgd_YUnitBase r), viewField "XLUnitsperUnitBase" (viewNumber $ pgd_XLUnitsperUnitBase r), viewField "YLUnitsperUnitBase" (viewNumber $ pgd_YLUnitsperUnitBase r), viewField "Reserved1" (viewNumber $ pgd_Reserved1 r), viewField "XPageSize" (viewNumber $ pgd_XPageSize r), viewField "Reserved2" (viewNumber $ pgd_Reserved2 r), viewField "YPageSize" (viewNumber $ pgd_YPageSize r), viewField "__" (viewNStr $ pgd__ r) ]
    recType = fromEnum . pgd_Type

instance Rec PGP where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ PGP a01 a02 a03
    recPut r = do put $ pgp_Type r; put $ pgp_ r; put $ pgp r; return ()
    recSizeOf r = sum [ sizeOf $ pgp_Type r, sizeOf $ pgp_ r, sizeOf $ pgp r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ pgp_Type r), viewField "_" (viewNumber $ pgp_ r), viewField "" (viewNStr $ pgp r) ]
    recType = fromEnum . pgp_Type

instance Rec PGP1 where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ PGP1 a01 a02 a03
    recPut r = do put $ pgp1_Type r; put $ pgp1_ r; put $ pgp1 r; return ()
    recSizeOf r = sum [ sizeOf $ pgp1_Type r, sizeOf $ pgp1_ r, sizeOf $ pgp1 r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ pgp1_Type r), viewField "_" (viewNumber $ pgp1_ r), viewField "" (viewNStr $ pgp1 r) ]
    recType = fromEnum . pgp1_Type

instance Rec PMC where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ PMC a01 a02 a03
    recPut r = do put $ pmc_Type r; put $ pmc_ r; put $ pmc r; return ()
    recSizeOf r = sum [ sizeOf $ pmc_Type r, sizeOf $ pmc_ r, sizeOf $ pmc r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ pmc_Type r), viewField "_" (viewNumber $ pmc_ r), viewField "" (viewNStr $ pmc r) ]
    recType = fromEnum . pmc_Type

instance Rec PTD where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ PTD a01 a02 a03
    recPut r = do put $ ptd_Type r; put $ ptd_ r; put $ ptd r; return ()
    recSizeOf r = sum [ sizeOf $ ptd_Type r, sizeOf $ ptd_ r, sizeOf $ ptd r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ ptd_Type r), viewField "_" (viewNumber $ ptd_ r), viewField "" (viewNStr $ ptd r) ]
    recType = fromEnum . ptd_Type

instance Rec PTD1 where
    recGet = do a01 <- get; a02 <- get; a03 <- get; return $ PTD1 a01 a02 a03
    recPut r = do put $ ptd1_Type r; put $ ptd1_ r; put $ ptd1 r; return ()
    recSizeOf r = sum [ sizeOf $ ptd1_Type r, sizeOf $ ptd1_ r, sizeOf $ ptd1 r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ ptd1_Type r), viewField "_" (viewNumber $ ptd1_ r), viewField "" (viewNStr $ ptd1 r) ]
    recType = fromEnum . ptd1_Type

instance RecChunk TLE where
    type ChunkOf TLE = T_
    readChunks r = tle_Chunks r
    writeChunks r io = do
        cs <- io
        return $ r { tle_Chunks = cs }

instance Rec TLE where
    recGet = do a01 <- get; a02 <- get; a03 <- getList; return $ TLE a01 a02 a03
    recPut r = do put $ tle_Type r; put $ tle_ r; putList $ tle_Chunks r
    recSizeOf r = sum [ sizeOf $ tle_Type r, sizeOf $ tle_ r, sizeOf $ tle_Chunks r ]
    recView r = viewRecord (typeOf r) [ viewField "Type" (viewNumber $ tle_Type r), viewField "_" (viewNumber $ tle_ r), viewField "Chunks" (viewChunks $ tle_Chunks r) ]
    recType = fromEnum . tle_Type

instance RecChunk MCF_T where
    type ChunkOf MCF_T = T_
    readChunks r = mcf_t_Chunks r
    writeChunks r io = do
        cs <- io
        return $ r { mcf_t_Chunks = cs }

instance Rec MCF_T where
    recGet = do a01 <- getList; return $ MCF_T a01
    recPut r = do putList $ mcf_t_Chunks r; return ()
    recSizeOf r = sum [ sizeOf $ mcf_t_Chunks r ]
    recView r = viewRecord (typeOf r) [ viewField "Chunks" (viewChunks $ mcf_t_Chunks r) ]
    recType r = 0