public U0 DocProfile(U8 *filename,I64 flags)
{
I64 i,*cmd_stats=CAlloc(sizeof(I64)*DOCT_TYPES_NUM),
*flags_stats=CAlloc(sizeof(I64)*64),
*type_flags_stats=CAlloc(sizeof(I64)*64);
//Note: word wrap is determined by
//doc->win_task when a CDoc is recalculated
//use DocRecalc().
CDoc *doc=DocRead(filename,flags);

//doc->head which is equ to doc is the
//header of the CQue and represents the end-of-file marker.
CDocEntry *doc_e=doc->head.next;
while (doc_e!=doc) {
cmd_stats[doc_e->type_u8]++;
for (i=0;i<64;i++)
if (Bt(&doc_e->de_flags,i))
flags_stats[i]++;
for (i=16;i<32;i++)
if (Bt(&doc_e->type,i))
type_flags_stats[i]++;
doc_e=doc_e->next;
}
DocDel(doc);

"$PURPLE$-------%s-------\n",filename;
"$GREEN$The lowest byte of the 32-bit 'doc_e->type', "
"'$PURPLE$doc_e->type.u8[0]$GREEN$', "
"is cmd and accessed with the union "
"'$PURPLE$doc_e->type_u8$GREEN$'."
"See $LK,\"CDocEntry\",A=\"MN:CDocEntry\"$, "
"$LK,\"Doc Type Defines\",A=\"MN:DOCT_TEXT\"$ and "
"$LK,\"Doc Type Codes\","
"A=\"FF:::/Adam/DolDoc/DocInit.HC,ST_DOC_CMDS\"$.\n"
"$FG$";
for (i=0;i<DOCT_TYPES_NUM;i++)
if (cmd_stats[i])
"%4Z:%d\n",i,"ST_DOC_CMDS",cmd_stats[i];

"\n$GREEN$'$PURPLE$doc_e->type.u8[1]$GREEN$' is "
"the scrn color attr of the "
"entry.'$PURPLE$doc_e->type.u16[1]"
"$GREEN$' is some flags for blinking and "
"stuff.See $LK,\"Doc Type Flag "
"Defines\",A=\"MN:DOCET_BLINK\"$.\n$FG$";

for (i=16;i<32;i++)
if (type_flags_stats[i])
"%4d:%d\n",i,type_flags_stats[i];

"$GREEN$\n'$PURPLE$doc_e->de_flags$GREEN$' is 64-bit."
"See $LK,\"Doc Flag Defines\",A=\"MN:DOCEf_TAG\"$ and "
"$LK,\"Doc Flag Codes\","
"A=\"FF:::/Adam/DolDoc/DocInit.HC,ST_DOC_FLAGS\"$.\n"
"$FG$";
for (i=0;i<64;i++)
if (flags_stats[i])
"%4Z:%d\n",i,"ST_DOC_FLAGS",flags_stats[i];

Free(cmd_stats);
Free(flags_stats);
PressAKey;
'\n';
}

/*See TipOfDay.

Note: Not all CDocEntry's are full-sized nodes.
Some are MAlloced with a smaller size to save
mem. They all have at least the size CDocEntryBase.

Note: CDocEntry's should be alloced from the
heap of the owning task, doc->mem_task.

The flag arrays doldoc.type_flags_form, etc
are useful.
*/

DocProfile("::/Doc/Welcome.DD",0);
DocProfile("::/Doc/Welcome.DD",DOCF_PLAIN_TEXT);