class FDStruct
{//Use <CTRL-l> and sel "Data", "List" or "Check Box"
//to generate the formats.
    F64      num1       format "$DA-TRM,A=\"Float 1:%12.8f\"$\n";
    F64      num2       format "$DA-TRM,A=\"Float 2:%12e\"$\n";
    I64      num3       format "$DA-TRM,A=\"Int   1:0x%016X\"$\n";
    I64      num4       format "$DA-TRM,A=\"Int   2:%12d\"$\n";
    I64      type       format "$LS,D=\"ST_PERSON_TYPE\"$\n";
    U8       name[32]   format "$DA-P,A=\"Name   :%s\"$\n";
    U8      *address1   format "$DA+M,A=\"Address:%s\"$\n"; //+M is unlimited len U8 *.
    U8      *address2   format "$DA+M,A=\"Address:%s\"$\n"; //+M is unlimited len U8 *.
    CDate    datetime   format "$DA-TRM,A=\"Date   :%8D\"$\n";
    Bool     check      format "$CB,\"Check\"$\n";
};

U0 FormDemo()
{
    FDStruct fds;

    DefineListLoad("ST_PERSON_TYPE","Child\0Teen\0Adult\0");
    fds.num1 = 12.3e-4;         //Set defaults
    fds.num2 = 4.5e3;
    fds.num3 = 0x1234;
    fds.num4 = -567;
    fds.type = 1;
    StrCopy(&fds.name, "John");
    fds.address1 = StrNew("1234 Pine St.");
    fds.address2 = NULL;    //Init to NULL if empty.
    fds.datetime = Now;
    fds.check = TRUE;
    if (DocForm(&fds))
    {
        "#1\t=%e\n", fds.num1;
        "#2\t=%e\n", fds.num2;
        "#3\t=%d\n", fds.num3;
        "#4\t=%d\n", fds.num4;
        "Type\t=%s\n", DefineSub(fds.type,"ST_PERSON_TYPE");
        "Name\t=%s\n", fds.name;
        "Address1=%s\n", fds.address1;
        "Address2=%s\n", fds.address2;
        "Date\t=%D\n", fds.datetime;
        "Check\t=%d\n", fds.check;
    }
    else
        "Cancel\n";

    "\n\nClassRep Example\n";
    ClassRep(&fds);
    Free(fds.address1);
    Free(fds.address2);
    //See also ClassRepD().
}

FormDemo;