#help_index "DolDoc/Misc"

U8 *ctrl_L_footer=
"\n$MU-X+Q,\"Abort\",LE=DOCM_CANCEL$\n"
"\n\n$LK+PU,\"Click for Help\",A=\"FI:::/Doc/Widget.DD\"$\n";

I64 PopUpLinkType(Bool include_anchor)
{
I64 i;
CDoc *doc=DocNew;
DocPrint(doc,"$PURPLE$$TX+CX,\"Link Type Menu\"$\n"
"\n$LTBLUE$$MU,\"To file\",LE=LK_FILE$\n"
"$MU,\"To anchor in file\",LE=LK_FILE_ANCHOR$\n"
"$MU,\"To str in file\",LE=LK_FILE_FIND$\n"
"$MU,\"To line in file\",LE=LK_FILE_LINE$\n"
"$MU,\"To man page\",LE=LK_MAN_PAGE$\n"
"$MU,\"To plain-text file\",LE=LK_PLAIN$\n"
"$MU,\"To str in plain-text file\",LE=LK_PLAIN_FIND$\n"
"$MU,\"To line in plain-text file\",LE=LK_PLAIN_LINE$\n"
"$MU,\"To Bible chapter line and verse\",LE=LK_BIBLE_FIND$\n"
"$MU,\"To Dictionary Definition\",LE=LK_DEF$\n"
"$MU,\"To Help Index\",LE=LK_HELP_INDEX$\n"
"$MU,\"To Addr\",LE=LK_ADDR$\n");
if (include_anchor)
DocPrint(doc,"$MU,\"Place Anchor\",LE=LK_PLACE_ANCHOR$\n");
DocPrint(doc,"%s",ctrl_L_footer);
i=PopUpMenu(doc);
DocDel(doc);
return i;
}

class CEdFileLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512] format "$DA-P,A=\"File:%s\"$\n";
I64 book;
U8 aux[512];
I64 num;
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdFileAnchorLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512] format "$DA-P,A=\"File:%s\"$\n";
I64 book;
U8 aux[512] format "$DA-P,A=\"Anchor Label:%s\"$\n";
I64 num;
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdFileFindLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512] format "$DA-P,A=\"File:%s\"$\n";
I64 book;
U8 aux[512] format "$DA-P,A=\"Str:%s\"$\n";
I64 num format "$DA-TRM,A=\"Occurrence Num:%04d\"$\n";
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdFileLineLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512] format "$DA-P,A=\"File:%s\"$\n";
I64 book;
U8 aux[512];
I64 num format "$DA-TRM,A=\"Line Num:%04d\"$\n";
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdManPageLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512];
I64 book;
U8 aux[512] format "$DA-P,A=\"Label:%s\"$\n";
I64 num;
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdAddrLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512];
I64 book;
U8 aux[512] format "$DA-P,A=\"Addr Exp:%s\"$\n";
I64 num format "$DA-TRM,A=\"Bin Size:%04d\"$\n";
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdPlaceAnchor
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512];
I64 book;
U8 aux[512] format "$DA-P,A=\"Anchor Label:%s\"$\n";
I64 num;
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up,
quote format "$CB,\"Quote\"$\n",
hide format "$CB,\"Hide\"$\n";
};

class CEdBibleLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512];
I64 book format "$LS,D=\"ST_BIBLE_BOOKS\"$\n";
U8 aux[512] format "$DA-P,A=\"Chapter Verse:%s\"$\n";
I64 num;

U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdDefLink
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512];
I64 book;
U8 aux[512] format "$DA-P,A=\"Word:%s\"$\n";
I64 num format "$DA-TRM,A=\"Def Num:%4d\"$\n";
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

class CEdProject
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
file[512] format "$DA-P,A=\"File:%s\"$\n";
I64 book;
U8 aux[512];
I64 num;
U8 html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
Bool pop_up format "$CB,\"PopUp\"$\n",
quote format "$CB,\"Quote\"$\n",
hide;
};

Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,
Bool *_quote,U8 **_html_link)
{
CEdFileLink *e=CAlloc(sizeof(CEdFileLink));
Bool res=FALSE;
if (type>=0) {
e->num=1;
switch (type) {
case LK_FILE:
if (DocForm(e,,,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->file);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("FI:%s",e->file);
}
break;
case LK_PLAIN:
if (DocForm(e,,,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->file);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("PI:%s",e->file);
}
break;
case LK_FILE_ANCHOR:
if (DocForm(e,"CEdFileAnchorLink",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("FA:%s,%s",e->file,e->aux);
}
break;
case LK_FILE_FIND:
if (DocForm(e,"CEdFileFindLink",,,ctrl_L_footer)) {
res=TRUE;
if (e->num==1) {
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("FF:%s,%s",e->file,e->aux);
} else {
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("FF:%s,%s:%d",e->file,e->aux,e->num);
}
}
break;
case LK_PLAIN_FIND:
if (DocForm(e,"CEdFileFindLink",,,ctrl_L_footer)) {
res=TRUE;
if (e->num==1) {
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("PF:%s,%s",e->file,e->aux);
} else {
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("PF:%s,%s:%d",e->file,e->aux,e->num);
}
}
break;
case LK_FILE_LINE:
if (DocForm(e,"CEdFileLineLink",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->file);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("FL:%s,%d",e->file,e->num);
}
break;
case LK_PLAIN_LINE:
if (DocForm(e,"CEdFileLineLink",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->file);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("PL:%s,%d",e->file,e->num);
}
break;
case LK_MAN_PAGE:
if (DocForm(e,"CEdManPageLink",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("MN:%s",e->aux);
}
break;
case LK_PLACE_ANCHOR:
if (DocForm(e,"CEdPlaceAnchor",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag) {
if (e->hide)
*_tag=StrNew("");
else
*_tag=StrNew(e->aux);
} else
*_tag=StrNew(e->tag);
*_link=StrNew(e->aux);
}
break;
case LK_BIBLE_FIND:
if (DocForm(e,"CEdBibleLink",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=MStrPrint("%Z,%s",e->book,"ST_BIBLE_BOOKS",e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("BF:%Z,%s",e->book,"ST_BIBLE_BOOKS",e->aux);
}
break;
case LK_DEF:
e->num=-1;
if (DocForm(e,"CEdDefLink",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
if (e->num<0)
*_link=MStrPrint("DN:%s",e->aux);
else
*_link=MStrPrint("DN:%s,%d",e->aux,e->num);

}
break;
case LK_HELP_INDEX:
if (DocForm(e,"CEdManPageLink",,,ctrl_L_footer)) {
res=TRUE;
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("HI:%s",e->aux);
}
break;
case LK_ADDR:
e->num=DFT_ADDR_LINK_BIN_SIZE;
if (DocForm(e,"CEdAddrLink",,,ctrl_L_footer)) {
res=TRUE;
if (e->num==DFT_ADDR_LINK_BIN_SIZE) {
if (!*e->tag)
*_tag=StrNew(e->aux);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("AD:%s",e->aux);
} else {
if (!*e->tag)
*_tag=MStrPrint("%s,%d",e->aux,e->num);
else
*_tag=StrNew(e->tag);
*_link=MStrPrint("AD:%s,%d",e->aux,e->num);
}
}
break;
}
}
if (*e->html_link)
*_html_link=StrNew(e->html_link);
else
*_html_link=NULL;
if (e->pop_up)
*_pop_up=TRUE;
else
*_pop_up=FALSE;
if (e->quote)
*_quote=TRUE;
else
*_quote=FALSE;
Free(e);
return res;
}

U0 EdInsLink()
{
U8 *tag=NULL,*link=NULL,*st=NULL,*html_link=NULL,*pop_up_st;
Bool pop_up=FALSE,quote=FALSE;
I64 type=PopUpLinkType(TRUE);
if (type>=0) {
if (GetLink(type,&tag,&link,&pop_up,&quote,&html_link)) {
if (pop_up)
pop_up_st="+PU";
else
pop_up_st="";
switch (type) {
case LK_PLACE_ANCHOR:
if (html_link)
st=MStrPrint("$AN,\"%$Q\",A=\"%$Q\",HTML=\"%$Q\"$",
tag,link,html_link);
else
st=MStrPrint("$AN,\"%$Q\",A=\"%$Q\"$",tag,link);
break;
default:
if (html_link)
st=MStrPrint("$LK%s,\"%$Q\",A=\"%$Q\",HTML=\"%$Q\"$",
pop_up_st,tag,link,html_link);
else
st=MStrPrint("$LK%s,\"%$Q\",A=\"%$Q\"$",pop_up_st,tag,link);
}
}
}
if (st) {
if (quote)
"%$Q",st;
else
"%s",st;
}
Free(tag);
Free(link);
Free(html_link);
Free(st);
}

I64 PopUpColorType()
{
I64 i;
CDoc *doc=DocNew;
DocPrint(doc,"$PURPLE$$TX+CX,\"Color Type Menu\"$\n"
"\n$LTBLUE$$MU,\"Foreground\",LE=DOCT_FOREGROUND$\n"
"$MU,\"Background\",LE=DOCT_BACKGROUND$\n"
"$MU,\"Default Foreground\",LE=DOCT_DFT_FOREGROUND$\n"
"$MU,\"Default Background\",LE=DOCT_DFT_BACKGROUND$\n"
"%s",ctrl_L_footer);
i=PopUpMenu(doc);
DocDel(doc);
return i;
}

I64 PopUpPageSettingType()
{
I64 i;
CDoc *doc=DocNew;
DocPrint(doc,"$PURPLE$$TX+CX,\"Page Setting Menu\"$\n"
"\n$LTBLUE$$MU,\"Page Length\",LE=DOCT_PAGE_LEN$\n"
"$MU,\"Page Header\",LE=DOCT_HEADER$\n"
"$MU,\"Page Footer\",LE=DOCT_FOOTER$\n"
"$MU,\"Left Margin\",LE=DOCT_LEFT_MARGIN$\n"
"$MU,\"Right Margin\",LE=DOCT_RIGHT_MARGIN$\n"
"%s",ctrl_L_footer);
i=PopUpMenu(doc);
DocDel(doc);
return i;
}

U0 EdInsColor()
{
I64 type=PopUpColorType,col=DOC_DFT;
if (type>=0) {
col=PopUpColor(,FALSE);
if (col==DOC_DFT)
"$%Z$",type,"ST_DOC_CMDS";
else if (col>=0)
"$%Z,%d$",type,"ST_DOC_CMDS",col;
}
}

class CEdPageSetting1
{
U8 val[512] format "$DA-P,A=\"Setting Val:%s\"$\n";
Bool winrel;
};

class CEdPageSetting2
{
U8 val[512] format "$DA-P,A=\"Setting Val:%s\"$\n";
Bool winrel format "$CB,\"Win Relative\"$\n";
};

U0 EdInsPageSetting()
{
I64 type=PopUpPageSettingType;
CEdPageSetting1 *e=CAlloc(sizeof(CEdPageSetting1));
if (type>=0) {
if (type==DOCT_RIGHT_MARGIN||type==DOCT_PAGE_LEN) {
if (DocForm(e(CEdPageSetting2 *))) {
if (e->winrel) {
if (*e->val)
"$%Z+WR,%s$",type,"ST_DOC_CMDS",e->val;
else
"$%Z+WR,0$",type,"ST_DOC_CMDS";
} else {
if (*e->val)
"$%Z,%s$",type,"ST_DOC_CMDS",e->val;
else
"$%Z$",type,"ST_DOC_CMDS";
}
}
} else {
if (DocForm(e)) {
if (*e->val)
"$%Z,%s$",type,"ST_DOC_CMDS",e->val;
else
"$%Z$",type,"ST_DOC_CMDS";
}
}
}
Free(e);
}

#define WIZ_HIGHLIGHT_ON (DOCT_ERROR+1)
#define WIZ_HIGHLIGHT_OFF (DOCT_ERROR+2)

I64 PopUpWidgetType()
{
I64 i;
CDoc *doc=DocNew;
DocPrint(doc,"$PURPLE$$TX+CX,\"Text Widgets Menu\"$\n"
"\n$LTBLUE$$MU,\"Link\",LE=DOCT_LINK$\n"
"$MU,\"Text\",LE=DOCT_TEXT$\n"
"$MU,\"Tree Branch\",LE=DOCT_TREE$\n"
"$MU,\"Color\",LE=DOCT_FOREGROUND$\n"
"$MU,\"Page Settings\",LE=DOCT_PAGE_LEN$\n"
"$MU,\"Cursor Movement\",LE=DOCT_CURSOR_MOVEMENT$\n"
"$MU,\"Macro\",LE=DOCT_MACRO$\n"
"$MU,\"Bttn\",LE=DOCT_BTTN$\n"
"$MU,\"Check Box\",LE=DOCT_CHECK_BOX$\n"
"$MU,\"List\",LE=DOCT_LST$\n"
"$MU,\"Menu Val\",LE=DOCT_MENU_VAL$\n"
"$MU,\"Data\",LE=DOCT_DATA$\n"
"$MU,\"Hex Edit\",LE=DOCT_HEX_ED$\n"
"$MU,\"Syntax Highlight ON\",LE=WIZ_HIGHLIGHT_ON$\n"
"$MU,\"Syntax Highlight OFF\",LE=WIZ_HIGHLIGHT_OFF$\n"
"$MU,\"HTML\",LE=DOCT_HTML_CODE$\n"
"$MU,\"Song\",LE=DOCT_SONG$\n"
"%s",ctrl_L_footer);
i=PopUpMenu(doc);
DocDel(doc);
return i;
}

class CEdText
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n";
Bool left_x format "$CB,\"Left X\"$\n",
center_x format "$CB,\"Center X\"$\n",
right_x format "$CB,\"Right X\"$\n",
margin_rel format "$CB,\"Margin Rel X\"$\n",
blink format "$CB,\"Blink\"$\n",
invert format "$CB,\"Invert\"$\n",
underline format "$CB,\"Underline\"$\n",
tree format "$CB,\"Tree\"$\n",
collapsed format "$CB,\"Collapsed\"$\n";
U8 scroll_x [512] format "$DA-P,A=\"Scroll X Length Expression:%s\"$\n",
shift_x [512] format "$DA-P,A=\"X Offset Expression:%s\"$\n",
shift_y [512] format "$DA-P,A=\"Y Offset Expression:%s\"$\n",
define_str[512] format "$DA-P,A=\"Define Str:%s\"$\n",
html_link[512] format "$DA-P,A=\"Html Link:%s\"$\n";
};

U0 EdInsText()
{
U8 *st,buf[512];
CEdText *e=CAlloc(sizeof(CEdText));
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
if (e->left_x ) CatPrint(buf,"+LX");
if (e->center_x) CatPrint(buf,"+CX");
if (e->right_x ) CatPrint(buf,"+RX");
if (e->margin_rel) CatPrint(buf,"+MRX");
if (e->blink) CatPrint(buf,"+BK");
if (e->invert) CatPrint(buf,"+IV");
if (e->underline) CatPrint(buf,"+UL");
if (e->tree) CatPrint(buf,"+TR");
if (e->collapsed) CatPrint(buf,"+C");
st=MStrPrint("%q",e->tag);
"$TX%s,\"%$Q\"",buf,st;
Free(st);
if (*e->shift_x)
",SX=%s",e->shift_x;
if (*e->shift_y)
",SY=%s",e->shift_y;
if (*e->scroll_x)
",SCX=%s",e->scroll_x;
if (*e->define_str) {
st=MStrPrint("%q",e->define_str);
",D=\"%$Q\"",st;
Free(st);
}
if (*e->html_link) {
st=MStrPrint("%q",e->html_link);
",HTML=\"%$Q\"",st;
Free(st);
}
"$";
}
Free(e);
}

class CEdSong
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
song[512] format "$DA-P,A=\"Song:%s\"$\n";
};

U0 EdInsSong()
{
CEdSong *e=CAlloc(sizeof(CEdSong));
if (DocForm(e,,,,ctrl_L_footer))
"$SO,\"%$Q\",A=\"%s\"$",e->tag,e->song;
Free(e);
}

class CEdHtmlCode
{
U8 tag[512] format "$DA-P,A=\"Html Code:%s\"$\n";
};

U0 EdInsHtml()
{
CEdHtmlCode *e=CAlloc(sizeof(CEdHtmlCode));
if (DocForm(e,,,,ctrl_L_footer))
"$HC,\"%$Q\"$",e->tag;
Free(e);
}

class CEdMacroMenu
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
left_macro[512] format "$DA-P,A=\"Left Click Macro:%s\"$\n",
left_exp[512] format "$DA-P,A=\"Left Click Expression:%s\"$\n";
Bool popup format "$CB,\"PopUp\"$\n",
left_is_in_str format "$CB,\"Left is InStr\"$\n",
left_x format "$CB,\"Left X \"$\n",
center_x format "$CB,\"Center X \"$\n",
right_x format "$CB,\"Right X \"$\n",
margin_rel format "$CB,\"Margin Rel X\"$\n",
blink format "$CB,\"Blink\"$\n",
invert format "$CB,\"Invert\"$\n",
underline format "$CB,\"Underline\"$\n",
escape format "$CB,\"Escape\"$\n";
U8 scroll_x[512] format "$DA-P,A=\"Scroll X Length Expression:%s\"$\n",
shift_x[512] format "$DA-P,A=\"X Offset Expression:%s\"$\n",
shift_y[512] format "$DA-P,A=\"Y Offset Expression:%s\"$\n";
};

U0 EdInsMacroMenu(Bool is_macro)
{
U8 *st,buf[512];
CEdMacroMenu *e=CAlloc(sizeof(CEdMacroMenu));
e->underline=TRUE;
e->escape=TRUE;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
if (e->popup) CatPrint(buf,"+PU-X");
if (e->left_x ) CatPrint(buf,"+LX");
if (e->center_x) CatPrint(buf,"+CX");
if (e->right_x ) CatPrint(buf,"+RX");
if (e->margin_rel) CatPrint(buf,"+MRX");
if (e->blink) CatPrint(buf,"+BK");
if (e->invert) CatPrint(buf,"+IV");
if (!e->underline) CatPrint(buf,"-UL");
if (!e->escape) CatPrint(buf,"-X");
if (e->left_is_in_str) CatPrint(buf,"+LIS");
if (*e->tag || is_macro) {
if (is_macro) {
if (*e->tag) {
st=MStrPrint("%q",e->tag);
"$MA%s,\"%$Q\"",buf,st;
Free(st);
} else
"$MA%s",buf;
} else {
st=MStrPrint("%q",e->tag);
"$MU%s,\"%$Q\"",buf,st;
Free(st);
}
if (*e->left_exp)
",LE=%s",e->left_exp;
if (*e->left_macro) {
st=MStrPrint("%q",e->left_macro);
",LM=\"%$Q\"",st;
Free(st);
}
if (*e->shift_x)
",SX=%s",e->shift_x;
if (*e->shift_y)
",SY=%s",e->shift_y;
if (*e->scroll_x)
",SCX=%s",e->scroll_x;
"$";
}
}
Free(e);
}

class CEdBttn
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n";
Bool popup format "$CB,\"PopUp\"$\n",
left_x format "$CB,\"Left X \"$\n",
center_x format "$CB,\"Center X \"$\n",
right_x format "$CB,\"Right X \"$\n",
margin_rel format "$CB,\"Margin Rel X\"$\n",
escape format "$CB,\"Escape\"$\n";
U8 left_macro[512] format "$DA-P,A=\"Left Click Macro:%s\"$\n";
Bool left_is_in_str format "$CB,\"Left is InStr\"$\n";
U8 left_exp[512] format "$DA-P,A=\"Left Click Expression:%s\"$\n";
Bool quote format "$CB,\"Quote\"$\n";
};

U0 EdInsBttn()
{
U8 *st,buf[512];
CEdBttn *e=CAlloc(sizeof(CEdBttn));
e->escape=TRUE;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
if (e->popup) CatPrint(buf,"+PU-X");
if (e->left_x ) CatPrint(buf,"+LX");
if (e->center_x) CatPrint(buf,"+CX");
if (e->right_x ) CatPrint(buf,"+RX");
if (e->margin_rel) CatPrint(buf,"+MRX");
if (!e->escape) CatPrint(buf,"-X");
if (e->left_is_in_str) CatPrint(buf,"+LIS");
if (*e->tag) {
if (e->quote) {
st=MStrPrint("%q",e->tag);
"$$BT%s,\\\"%$Q\\\"",buf,st;
Free(st);
if (*e->left_exp)
",LE=%s",e->left_exp;
if (*e->left_macro) {
st=MStrPrint("%q",e->left_macro);
",LM=\\\"%$Q\\\"",st;
Free(st);
}
"$$";
} else {
st=MStrPrint("%q",e->tag);
"$BT%s,\"%$Q\"",buf,st;
Free(st);
if (*e->left_exp)
",LE=%s",e->left_exp;
if (*e->left_macro) {
st=MStrPrint("%q",e->left_macro);
",LM=\"%$Q\"",st;
Free(st);
}
"$";
}
}
}
Free(e);
}

class CEdCursorMovement
{
U8 left_exp[512] format "$DA-P,A=\"X Expression(LE):%s\"$\n",
right_exp[512] format "$DA-P,A=\"Y Expression(RE):%s\"$\n";
Bool left_x format "$CB,\"LeftX \"$\n",
center_x format "$CB,\"CenterX \"$\n",
right_x format "$CB,\"RightX \"$\n",
margin_rel format "$CB,\"Margin Rel X\"$\n",
top_y format "$CB,\"TopY \"$\n",
center_y format "$CB,\"CenterY \"$\n",
bottom_y format "$CB,\"BottomY \"$\n",
page_rel format "$CB,\"Page Rel Y\"$\n",
quote format "$CB,\"Quote\"$\n";
};

U0 EdInsCursorMovement()
{
U8 buf[512];
CEdCursorMovement *e=CAlloc(sizeof(CEdCursorMovement));
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
if (e->left_x ) CatPrint(buf,"+LX");
if (e->center_x) CatPrint(buf,"+CX");
if (e->right_x ) CatPrint(buf,"+RX");
if (e->margin_rel) CatPrint(buf,"+MRX");
if (e->top_y ) CatPrint(buf,"+TY");
if (e->center_y) CatPrint(buf,"+CY");
if (e->bottom_y) CatPrint(buf,"+BY");
if (e->page_rel) CatPrint(buf,"+PRY");
if (!*e->left_exp) CatPrint(buf,"-LE");
if (!*e->right_exp) CatPrint(buf,"-RE");
if (e->quote)
"$";
"$CM%s",buf;
if (*e->left_exp)
",LE=%s",e->left_exp;
if (*e->right_exp)
",RE=%s",e->right_exp;
"$";
if (e->quote)
"$";
}
Free(e);
}

class CEdDataNum
{
U8 fmt_str[512] format "$DA-P,A=\"Format Str:%s\"$\n";
I64 len;
Bool term format "$CB,\"Form Field Terminator\"$\n",
remalloc,
refresh format "$CB,\"Refresh Data\"$\n",
update format "$CB,\"Update Data\"$\n";
};

class CEdDataStr
{
U8 fmt_str[512] format "$DA-P,A=\"Format Str:%s\"$\n";
I64 len format "$DA,A=\"Length:%d\"$\n";
Bool term format "$CB,\"Zero Terminator\"$\n",
remalloc format "$CB,\"Remalloc for Unlimited Length\"$\n",
refresh format "$CB,\"Refresh Data\"$\n",
update format "$CB,\"Update Data\"$\n";
};

U0 EdInsData()
{
I64 i,type=RT_I64;
U8 *st,buf[512],raw_type[16];
CEdDataNum *e=CAlloc(sizeof(CEdDataNum));
e->term=TRUE;
e->len=DOCE_LEN_DFT;
if ((i=PopUpPickDefineSub("ST_NATURAL_TYPES"))>=0) {
*buf=0;
i+=RT_I8;
if (i==RT_F32)
i=RT_F64;
if (i==RT_UF32) {//U8 *
i=DocForm(e(CEdDataStr *),,,,ctrl_L_footer);
if (e->remalloc) {
CatPrint(buf,"+M");
e->term=TRUE;
} else
CatPrint(buf,"-P");
} else {
type=i;
i=DocForm(e,,,,ctrl_L_footer);
}
if (i) {
if (type==RT_I64)
*raw_type=0;
else
StrPrint(raw_type,",RT=%Z",type,"ST_RAW_TYPES");

if (!e->term) CatPrint(buf,"-TRM");
if (e->refresh) CatPrint(buf,"+RD");
if (e->update) CatPrint(buf,"+UD");

st=MStrPrint("%q",e->fmt_str);
if (e->remalloc)
"$$DA%s,A=\\\"%$Q\\\"$$",buf,st;
else if (e->len==DOCE_LEN_DFT)
"$$DA%s%s,A=\\\"%$Q\\\"$$",buf,raw_type,st;
else
"$$DA%s,LEN=%d%s,A=\\\"%$Q\\\"$$",buf,e->len,raw_type,st;
Free(st);
}
}
Free(e);
}

class CEdCheckBox
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n";
Bool refresh format "$CB,\"Refresh Data\"$\n";
I64 type format "$LS,D=\"ST_INT_SIZE_TYPES\"$\n";
};

U0 EdInsCheckBox()
{
U8 *st,buf[512],raw_type[16];
CEdCheckBox *e=CAlloc(sizeof(CEdCheckBox));
e->type=RT_I8-RT_I8;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
e->type+=RT_I8;
if (e->type==RT_I8)
*raw_type=0;
else
StrPrint(raw_type,",RT=%Z",e->type,"ST_RAW_TYPES");
if (e->refresh) CatPrint(buf,"+RD");
st=MStrPrint("%q",e->tag);
"$$CB%s%s,\\\"%$Q\\\"$$",buf,raw_type,st;
Free(st);
}
Free(e);
}

class CEdLst
{
U8 tag[512] format "$DA-P,A=\"Dft Sel:%s\"$\n",
define_str[512] format "$DA-P,A=\"Define Str:%s\"$\n";
Bool refresh format "$CB,\"Refresh Data\"$\n";
I64 type format "$LS,D=\"ST_INT_SIZE_TYPES\"$\n";
};

U0 EdInsLst()
{
U8 *st1,*st2,buf[512],raw_type[16];
CEdLst *e=CAlloc(sizeof(CEdLst));
e->type=RT_I64-RT_I8;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
e->type+=RT_I8;
if (e->type==RT_I64)
*raw_type=0;
else
StrPrint(raw_type,",RT=%Z",e->type,"ST_RAW_TYPES");
if (e->refresh) CatPrint(buf,"+RD");
if (!*e->tag)
st1=NULL;
else
st1=MStrPrint("%q",e->tag);
st2=MStrPrint("%q",e->define_str);
if (st1)
"$$LS%s%s,\\\"%$Q\\\",D=\\\"%$Q\\\"$$",buf,raw_type,st1,st2;
else
"$$LS%s%s,D=\\\"%$Q\\\"$$",buf,raw_type,st2;
Free(st1);
Free(st2);
}
Free(e);
}

class CEdHexEd
{
I64 cnt format "$DA,A=\"Count:%d\"$\n",
cols format "$DA,A=\"Columns:%d\"$\n";
Bool zero format "$CB,\"Zero Based\"$\n",
refresh format "$CB,\"Refresh Data\"$\n";
};

U0 EdInsHexEd()
{
U8 buf[512];
CEdHexEd *e=CAlloc(sizeof(CEdHexEd));
e->cnt=128;
e->cols=4;
e->zero=TRUE;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
if (!e->zero) CatPrint(buf,"-Z");
if (e->refresh) CatPrint(buf,"+RD");
"$$HX%s,%d,%d$$",buf,e->cnt,e->cols;
}
Free(e);
}

class CEdBin
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n";
I64 bin_num format "$DA,A=\"Bin Num:%d\"$\n";
U8 bin_ptr_link_file[512] format "$DA-P,A=\"File:%s\"$\n";
I64 bin_ptr_link_bin_num format "$DA,A=\"File Bin Num:%d\"$\n";
U8 bin_ptr_link_tag[512] format "$DA-P,A=\"File Bin Tag:%s\"$\n";
};

U0 EdInsBin(I64 bin_num,I64 type)
{
CEdBin *e=CAlloc(sizeof(CEdBin));
StrPrint(e->tag,"<%d>",bin_num);
e->bin_num=bin_num;
e->bin_ptr_link_bin_num=1;
if (DocForm(e,,,
"Note: Normally, you enter no file,\n"
"just a bin num.If You enter a\n"
"file, enter a file bin num or a file\n"
"bin tag.\n\n",ctrl_L_footer)) {
if (*e->bin_ptr_link_file) {
if (*e->bin_ptr_link_tag)
"$%Z,\"%$Q\",BI=%d,BP=\"%s,%s\"$",type,"ST_DOC_CMDS",e->tag,e->bin_num,
e->bin_ptr_link_file,e->bin_ptr_link_tag;
else
"$%Z,\"%$Q\",BI=%d,BP=\"%s,%d\"$",type,"ST_DOC_CMDS",e->tag,e->bin_num,
e->bin_ptr_link_file,e->bin_ptr_link_bin_num;
} else {
if (DocBinFindNum(DocPut,e->bin_num))
"$%Z,\"%$Q\",BI=%d$",type,"ST_DOC_CMDS",e->tag,e->bin_num;
else
PopUpOk("Invalid Binary Num");
}
}
Free(e);
}

class CEdTree
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n";
I64 indent format "$DA,A=\"Indention:%d\"$\n";
Bool collapsed format "$CB,\"Collapsed\"$\n";
};

U0 EdInsTree()
{
U8 *st1,*st2,buf[512];
CEdTree *e=CAlloc(sizeof(CEdTree));
e->collapsed=TRUE;
e->indent=2;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
if (!e->collapsed) CatPrint(buf,"-C");
st1=MStrPrint("%q",e->tag);
st2=MStrPrint("$TR%s,\"%$Q\"$\n$ID,%d$*\n$ID,%d$",
buf,st1,e->indent,-e->indent);
DocPrintAtomic(DocPut,"%s",st2);
Free(st1);
Free(st2);
}
Free(e);
}

U0 EdInsWidgetWiz()
{
I64 type=PopUpWidgetType;
switch (type) {
case DOCT_FOREGROUND:
EdInsColor;
break;
case DOCT_PAGE_LEN:
EdInsPageSetting;
break;
case DOCT_LINK:
EdInsLink;
break;
case DOCT_TEXT:
EdInsText;
break;
case DOCT_TREE:
EdInsTree;
break;
case DOCT_MACRO:
EdInsMacroMenu(TRUE);
break;
case DOCT_MENU_VAL:
EdInsMacroMenu(FALSE);
break;
case DOCT_CURSOR_MOVEMENT:
EdInsCursorMovement;
break;
case DOCT_BTTN:
EdInsBttn;
break;
case DOCT_DATA:
EdInsData;
break;
case DOCT_CHECK_BOX:
EdInsCheckBox;
break;
case DOCT_LST:
EdInsLst;
break;
case DOCT_HEX_ED:
EdInsHexEd;
break;
case DOCT_SONG:
EdInsSong;
break;
case WIZ_HIGHLIGHT_ON:
"$HL,1$";
break;
case WIZ_HIGHLIGHT_OFF:
"$HL,0$";
break;
case DOCT_HTML_CODE:
EdInsHtml;
}
}

#define EST_SPRITE 0
#define EST_SPRITE_PTR 1
#define EST_DUP_SPRITE 2
#define EST_SPRITE_SIZE 3
#define EST_SPRITE_MACRO 4
#define EST_SPRITE_MENU 5
#define EST_SPRITE_LINK 6

I64 PopUpSpriteType()
{
I64 i;
CDoc *doc=DocNew;
DocPrint(doc,"$PURPLE$$TX+CX,\"Graphic Sprite Resource Menu\"$\n"
"$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/Resource.DD.Z\"$\n\n"
"$LTBLUE$$MU,\"Make Sprite\",LE=EST_SPRITE$$FG$\t"
"Start by making a sprite.\n"
"$LTBLUE$$MU,\"Ptr to Sprite\",LE=EST_SPRITE_PTR$$FG$\t"
"Insert pointer into src code.\n"
"$LTBLUE$$MU,\"Duplicate Sprite\",LE=EST_DUP_SPRITE$$FG$"
"Make dup image for in a doc.\n"
"$LTBLUE$$MU,\"Sprite Size\",LE=EST_SPRITE_SIZE$$FG$\t"
"Insert size of a sprite into src code.\n"
"$LTBLUE$$MU,\"Sprite Macro\",LE=EST_SPRITE_MACRO$$FG$\t"
"Create icon with auto-text payload.\n"
"$LTBLUE$$MU,\"Sprite Menu Item\",LE=EST_SPRITE_MENU$$FG$"
"Create icon with numeric payload.\n"
"$LTBLUE$$MU,\"Sprite Link\",LE=EST_SPRITE_LINK$$FG$\t"
"Create icon with link payload.\n\n"
"$LTBLUE$$MU,\"Abort\",LE=DOCM_CANCEL$\n\n");
i=PopUpMenu(doc);
DocDel(doc);
return i;
}

class CEdMacroSprite
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
exp[512] format "$DA-P,A=\"Macro:%s\"$\n";
Bool escape format "$CB,\"Escape\"$\n",
popup format "$CB,\"PopUp\"$\n",
is_in_str format "$CB,\"InStr\"$\n";
};

class CEdMenuSprite
{
U8 tag[512] format "$DA-P,A=\"Tag Text:%s\"$\n",
exp[512] format "$DA-P,A=\"Expression:%s\"$\n";
Bool escape format "$CB,\"Escape\"$\n",
popup,
is_in_str;
};

U8 *EdSpriteLink(Bool *_pop_up,U8 **_html_link)
{
U8 *res=NULL,*tag=NULL,*link=NULL;
Bool quote=FALSE;
I64 type=PopUpLinkType(FALSE);
*_html_link=NULL;
if (type>=0 && GetLink(type,&tag,&link,_pop_up,&quote,_html_link))
res=MStrPrint("\"%$Q\",A=\"%$Q\"",tag,link);
Free(tag);
Free(link);
return res;
}

U8 *EdSprite(I64 bin_num)
{
I64 type=PopUpSpriteType;
Bool pop_up;
U8 *st,*st1=NULL,*st2=NULL,buf[1024],*html_link=NULL;
CEdMacroSprite *e=CAlloc(sizeof(CEdMacroSprite));
*buf=0;
switch (type) {
case EST_SPRITE:
st1=MStrPrint("\"<%d>\"",bin_num);
break;
case EST_SPRITE_MACRO:
e->escape=TRUE;
if (DocForm(e,,,,ctrl_L_footer)) {
CatPrint(buf,"+UL");
if (e->is_in_str) CatPrint(buf,"+LIS");
if (e->popup) CatPrint(buf,"+PU");
if (e->escape) CatPrint(buf,"+X");
st=MStrPrint("%q",e->exp);
st1=MStrPrint("\"%$Q\",LM=\"%$Q\"",e->tag,st);
Free(st);
}
break;
case EST_SPRITE_MENU:
e->escape=TRUE;
if (DocForm(e,"CEdMenuSprite",,,ctrl_L_footer)) {
if (e->escape) CatPrint(buf,"+X");
st1=MStrPrint("\"%$Q\",LE=%s",e->tag,e->exp);
}
break;
case EST_SPRITE_LINK:
CatPrint(buf,"+L");
st1=EdSpriteLink(&pop_up,&html_link);
if (pop_up)
CatPrint(buf,"+PU");
break;
case EST_SPRITE_PTR:
EdInsBin(--bin_num,DOCT_INS_BIN);
break;
case EST_SPRITE_SIZE:
EdInsBin(--bin_num,DOCT_INS_BIN_SIZE);
break;
case EST_DUP_SPRITE:
EdInsBin(--bin_num,DOCT_SPRITE);
break;
}
if (st1) {
if (html_link)
st2=MStrPrint("$SP%s,%s,HTML=\"%$Q\",BI=%d$",buf,st1,html_link,bin_num);
else
st2=MStrPrint("$SP%s,%s,BI=%d$",buf,st1,bin_num);
Free(st1);
}
Free(e);
Free(html_link);
return st2;
}