AW: [lazarus] LFM Files

Sebastian Günther sguenther at
Thu Oct 12 17:57:13 EDT 2000

Robert Scott Horning wrote:
> I'm curious in how the DFM/LFM format is incompatible with a 64 bit OS (or 128 bit
> OS like on a Sony Play Station, ect.)?  I guess this would be in reference to the
> binary DFM file format, which I'll admit will have some problems as you mention.
> What would a text-editor readable format of the DFM offer that would be counter to
> an OS or CPU which is greater than 32 bits?

You are right, only the binary format is a problem (and a big mess). But
as normally DFM files are binary files I referred to binary files,

But here is the description for the binary DFM format, to end the
discussion (hopefully):


DFM files consist of:

|- Header
|- Form: Binary serialised object

DFM Header
Byte    Value 255 ($FF)
Byte    Value 10
Byte    Value 0
? Byte  Null terminated string: Resource name, in DFM's this is always
	the type of the form in upper case.
2 Bytes $1030
4 Bytes Size of binary serialisation in bytes

Binary serialisation

- Signature
   4 Bytes: "TPF0"
- Form object
  |- Properties
  |- Sub objects
     |- Properties

- Header
   ONLY when ffInherited and/or ffChildPos would be set to 1:
   Byte    TFilerFlags
           Bit Meaning
           0   ffInherited
           1   ffChildPos
           2-3 unused (0)
           4-7 always 1  (==> presence indicator for this byte!)
           When ffChildPos is set:
               Int     ChildPos (Index of child in array)
   SStr    Class name
   SStr    Object name
- Properties
   For each property:
   SStr    Property name
   Value: TValueType, followed by the value itself
         Simple ShortString (length byte + string)
         Simple ShortString (length byte + string)
         Byte -> vaInt8, vaInt16, vaInt32, followed by 1/2/4 value bytes
         List of ShortStrings, terminated by an empty string
       ListBegin / Values / ListEnd
         4 Bytes length of data, followed by the binary data
         |-List of:
         |    (Optional) Integer: Order
         |    ListBegin
         |    Property list
         |    ListEnd
         |-ListEnd (0 byte)
- List End
   Byte    vaNull (0)
- Sub objects
   -> recursively (Header, Properties, Sub-sub objects etc.)
- List End
   Byte    vaNull (0)


- Sebastian

More information about the Lazarus mailing list