Hi Steve,

The EXE specification is silent on the number of occurrences of the 
Import_Lookup_Table. All I know is that once we see the first Hint_Name_Table 
entry (a 2-byte address, followed by a null-terminated name, followed by an 
optional null) then we know that there are no more Import_Lookup_Tables. Is 
there a way to express (for Import_Lookup_Table):

        There are no more occurrences
        once we encounter a 2-byte
        address, followed by a null-terminated
        string, followed by an optional
        null.

Is it possible to express that?

/Roger

-----Original Message-----
From: Steve Lawrence <[email protected]> 
Sent: Sunday, March 3, 2019 11:25 AM
To: [email protected]; Costello, Roger L. <[email protected]>
Subject: [EXT] Re: Need help informing Daffodil that we're finished with this 
field and it's time to build the next field

I think we need more information, specifically how do you know what is the last 
Import_Lookup_Table?

Within an Import_Lookup_Table you say that the Lookup_Table_Entry ends with the 
last entry is all nulls, but that doesn't tell us where the last 
Import_Lookup_Table is. Is it when there's a special value of a 
Lookup_Table_Entry? Or maybe when the Import_Lookup_table has a no 
Lookup_Table_Entires and just has the terminating Null? Something else?

You'll likely need to add a discriminator somewhere, but we'd need more 
information to know what that discriminator should be.

- Steve

On 3/3/19 7:55 AM, Costello, Roger L. wrote:
> Hello DFDL community,
> 
> In the Windows EXE file format there is one or more 
> Import_Lookup_Tables followed by a Hint_Name_Table. I am struggling 
> with how to inform Daffodil, "Hey Daffodil, the input is finished with 
> the Import_Lookup_Tables, now it's time to build the Hint_Name_Table." 
> I am hoping you can show me how to inform Daffodil of this.
> 
> Each Import_Lookup_Table consists of one of more 32-bit fields, 
> terminated by a 32-bit field containing all nulls.
> 
> The Hint_Name_Table consists of one of more entries; each entry 
> consists of a 2-byte address, followed by a null-terminated name, 
> followed by an optional null (to align to a 2-byte boundary).
> 
> Here is a graphic that illustrates the Import_Lookup_Tables followed 
> by the
> Hint_Name_Table:
> 
> Here is the relevant portion of my DFDL schema:
> 
> <xs:elementname="idata_Section">
> <xs:complexType>
> <xs:sequence>>
> <xs:elementref="Import_Lookup_Table"
>                          maxOccurs="unbounded"/> 
> <xs:elementref="Hint_Name_Table"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> 
> <xs:elementname="Import_Lookup_Table">
> <xs:complexType>
> <xs:sequence>
> <xs:elementref="Lookup_Table_Entry"
>                          maxOccurs="unbounded"/> 
> <xs:elementname="Null_Lookup_Table_Entry"
>                          type="xs:hexBinary"
>                          dfdl:lengthKind="explicit"
>                          dfdl:length="4"
>                          dfdl:lengthUnits="bytes"> <xs:annotation> 
> <xs:appinfosource="http://www.ogf.org/dfdl/";>
> <dfdl:assert>
>                              { . eq xs:hexBinary("00000000") } 
> </dfdl:assert> </xs:appinfo> </xs:annotation> </xs:element> 
> </xs:sequence> </xs:complexType> </xs:element>
> 
> How do I inform Daffodil that the input has finished with the 
> Import_Lookup_Tables?
> 
> /Roger
> 

Reply via email to