The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: anon on January 30, 2005, 08:03:03 PM

Title: dbf Header and STRUCT question
Post by: anon on January 30, 2005, 08:03:03 PM
I want to use dBASE tables directly from my asm program. I'm having a little trouble
figuring out how to initialize the dbf header structure. The Header structure contains
a variable number of Field Descriptor structures. How do I properly declare an unknown
number of Field Descriptors in the Header ?

dbfFIELD_DESCRIPTOR STRUCT
FieldName   BYTE 11 dup(?) ;0-10, 11 bytes, Field name in ASCII (zero-filled).
FieldType   BYTE  ?        ;Field type in ASCII (C, D, F, L, M, or N).
Reserved1   BYTE  4 dup(?) ;Reserved.
FieldLength BYTE  ?        ;Field length in binary.
FieldCount  BYTE  ?        ;Field decimal count in binary.
Reserved2   BYTE  2 dup(?) ;Reserved.
WorkArea    BYTE  ?        ;Work area ID.
Reserved3   BYTE 10 dup(?) ;Reserved.
mdxFlag     BYTE  ?        ;Production MDX field flag; 01H if field has an
                           ;index tag in the production MDX file, 00H if not.
dbfFIELD_DESCRIPTOR ENDS

dbfHEADER STRUCT
Valid       BYTE ?         ;Valid dBASE IV file. bits 0-2 indicate version
                           ;number, bit 3 the presence of a dBASE IV memo
                           ;file, bits 4-6 the presence of an SQL table, bit
                           ;7 the presence of any memo file (either dBASE III
                           ;PLUS or dBASE IV).
LastUpdate  BYTE  3 dup(?) ;Date of last update; formattted as YYMMDD.
NoRecords   DWORD ?        ;Number of records in the file.
NoHdrBytes  WORD  ?        ;Number of bytes in the header.
NoRcdBytes  WORD  ?        ;Number of bytes in the record.
Reserved1   BYTE  3 dup(?) ;Reserved; fill with 0.
iFlag       BYTE  ?        ;Flag indicating incomplete transaction.
eFlag       BYTE  ?        ;Encryption flag.
MultiUser   BYTE 12 dup(?) ;Reserved for dBASE IV in a multi-user environment.
mdxFlag     BYTE  ?        ;Production MDX file flag; 01H if there is an MDX, 00H if not.
ID          BYTE  ?        ;Language driver ID.
Reserved2   BYTE  2 dup(?) ;Reserved; fill with 0.
FieldArray  dbfFIELD_DESCRIPTOR ? dup(<>) ;32 bytes each  Field descriptor array (see above). MY PROBLEM IS HERE
FieldTerm   BYTE  ?        ;0DH as the field terminator.
dbfHEADER ENDS
Title: Re: dbf Header and STRUCT question
Post by: tenkey on January 31, 2005, 01:20:11 AM
Quote from: anon on January 30, 2005, 08:03:03 PM
I want to use dBASE tables directly from my asm program. I'm having a little trouble
figuring out how to initialize the dbf header structure. The Header structure contains
a variable number of Field Descriptor structures. How do I properly declare an unknown
number of Field Descriptors in the Header ?
You separate it from the fixed size part. In others words, redefine it so that it isn't part of the "header".

At best, you can define one Field Descriptor to establish the offset of the first Field Descriptor.
Title: Re: dbf Header and STRUCT question
Post by: anon on January 31, 2005, 01:37:42 AM
Thanks, that is what I'm doing. The other thing I thought about was declaring 255
Field Descriptors (the max allowed for dBASE IV). I was just hoping there was another way.
Title: Re: dbf Header and STRUCT question
Post by: P1 on January 31, 2005, 09:50:10 PM
You can also use the ODBC/ADO Asm stuff to create the file at a little higher level.

Regards,  P1  :8)