#help_index "DolDoc/Task;StdOut/Task"
public CDoc *DocBorderNew(CDoc *pdoc)
{//Make new std border doc.
        CDocEntry       *doc_e;
        CDoc            *bdoc;

        bdoc = DocNew;
        bdoc->flags |= DOCF_BORDER_DOC;
        if (pdoc)
        {
                DocPrint(bdoc, "$CM+H+BY+RX+NC,-7,1$");
                doc_e=DocPrint(bdoc, "$TX+H+BD+TC,\" \"$");
                doc_e->user_data = pdoc;
                doc_e->tag_cb    = &EdFilterCB;
                doc_e=DocPrint(bdoc, "$TX+H+BD+TC,\" \"$");
                doc_e->user_data = pdoc;
                doc_e->tag_cb    = &EdOverStrikeCB;
                doc_e=DocPrint(bdoc, "$TX+H+BD+TC,\" \"$");
                doc_e->user_data = pdoc;
                doc_e->tag_cb    = &EdDollarCB;
                DocPrint(bdoc, "$CM+H+BY+RX+NC,-18,1$");
                doc_e=DocPrint(bdoc, "$TX+BD+TC,\"     \"$");
                doc_e->user_data = pdoc;
                doc_e->tag_cb    = &EdMoreCB;
                doc_e=DocPrint(bdoc, "$TX+H+BD+TC,\" \"$");
                doc_e->user_data = pdoc;
                doc_e->tag_cb    = &EdDollarTypeCB;
        }
        DocPrint(bdoc, "$CM+H+TY+NC,0,-1$");
        doc_e = DocPrint(bdoc, "$DA+H-TRM-P+BD+RD+CX+IV,LEN=STR_LEN-1,A=\"%%s...\",SCX=15$");
        doc_e->data = &Fs->task_title;
        DocDataFormat(bdoc, doc_e);
        DocPrint(bdoc, "$CM+H+NC,1,0$$TX+H+BD+IV,\"%X\"$", Fs);
        if (pdoc->win_task != sys_task)
                DocPrint(bdoc, "$BG+H,LTRED$$LTGRAY+H$$TX+H+RX+BD,\"[X]\"$$BG+H$$FG+H$");
        if (pdoc->win_task != sys_task && pdoc->win_task != ac.task)
                DocPrint(bdoc, "$BG+H,BROWN$$YELLOW+H$$TX+H+LX+BD,\"MENU\"$$FG+H$$BG+H$");

        return bdoc;
}

public U0 DocTermNew()
{//Make into term win task with Put/Display/Border docs.
        CDoc *pdoc = DocNew;

        pdoc->right_click_link  = &TermRightClickLink;
        pdoc->max_entries               = 4096;
        Fs->border_src  = BDS_CUR_DRIVE;
        pdoc->desc                              = 'Term';
        Fs->put_doc             = Fs->display_doc = pdoc;
        Fs->border_doc  = DocBorderNew(pdoc);
        Fs->cur_menu    = MenuFile("::/Doc/EdPullDown.DD");
        WinScrollsInit(Fs);
        Raw(OFF);
}

#help_index "DolDoc"

#define RIGHT_INCLUDE   0
#define RIGHT_AINCLUDE  1
#define RIGHT_COPY              2
#define RIGHT_MOVE              3
#define RIGHT_DELETE    4
#define RIGHT_TYPE              5
#define RIGHT_ED                6
#define RIGHT_MOUNT     7
#define RIGHT_PLAIN     8
#define RIGHT_INFILE    9

I64 PopUpTermRight(U8 *header)
{
        I64   i;
        CDoc *doc = DocNew;

        if (header)
                DocPrint(doc, "%s", header);

        DocPrint(doc, "\n\n"
                                  "TXT=%s\nDD =%s\nJIT=%s\nGR =%s"
                                  "$CM+LX,1,3 $$BT,\"Include           JIT\",LE=RIGHT_INCLUDE$"
                                  "$CM+LX,25,0$$BT,\"System Include    JIT\",LE=RIGHT_AINCLUDE$"
                                  "$CM+LX,1,3 $$BT,\"Copy                 \",LE=RIGHT_COPY$"
                                  "$CM+LX,25,0$$BT,\"Move or Rename       \",LE=RIGHT_MOVE$"
                                  "$CM+LX,1,3 $$BT,\"Delete               \",LE=RIGHT_DELETE$"
                                  "$CM+LX,25,0$$BT,\"Type           TXT;GR\",LE=RIGHT_TYPE$"
                                  "$CM+LX,1,3 $$BT,\"DolDoc Edit        DD\",LE=RIGHT_ED$"
                                  "$CM+LX,25,0$$BT,\"Mount           ISO.C\",LE=RIGHT_MOUNT$"
                                  "$CM+LX,1,3 $$BT,\"Plain Text Edit   TXT\",LE=RIGHT_PLAIN$"
                                  "$CM+LX,25,0$$BT,\"Infile             IN\",LE=RIGHT_INFILE$"
                                  "$CM+LX,1,3 $$BT,\"Cancel               \",LE=DOCM_CANCEL$\n",
                                  FILEMASK_TXT, FILEMASK_DD, FILEMASK_JIT, FILEMASK_GR);
        i = PopUpMenu(doc);
        DocDel(doc);

        return i;
}

I64 EdLeftClickLink(CDoc *doc, CDocEntry *doc_e)
{//Called with doc locked, exit unlocked
        Bool res;
        U8  *st;

        if (st = DocEntryLink(doc, doc_e))
        {
                DocUnlock(doc);
                if (doc_e->de_flags & DOCEF_POPUP)
                        res = PopUpEd(st);
                else
                        res = Ed(st);
                Free(st);

                return res;
        }
}

I64 TermRightClickLink(CDoc *doc, CDocEntry *doc_e)
{//Called with doc locked, exit unlocked
        Bool             send_new_line = FALSE, res = FALSE;
        U8                      *st, *st2;
        I64                      i;
        CEdFileName      fn;

        if (st2 = DocEntryLink(doc, doc_e))
        {
                if (st = DocLinkFile(st2))
                {
                        DocUnlock(doc);
                        if ((i = PopUpTermRight(st)) >= 0)
                        {
                                DocBottom(doc);
                                switch (i)
                                {
                                        case RIGHT_INCLUDE:
                                                if (FileExtDot(st) && !FilesFindMatch(st, FILEMASK_JIT))
                                                {
                                                        if (!PopUpCancelOk(ST_WARN_ST "Not .CC File\n\n"))
                                                        {
                                                                send_new_line = TRUE;
                                                                break;
                                                        }
                                                }
                                                "#include \"%s\";\n$PT$$FG$$BG$", st;
                                                WinZBufUpdate;
                                                ExeFile(st, CCF_CMD_LINE);
                                                res = TRUE;
                                                break;

                                        case RIGHT_AINCLUDE:
                                                if (FileExtDot(st) && !FilesFindMatch(st, FILEMASK_JIT))
                                                {
                                                        if (!PopUpCancelOk(ST_WARN_ST "Not .CC File\n\n"))
                                                        {
                                                                send_new_line = TRUE;
                                                                break;
                                                        }
                                                }
                                                "Sys(\"#include \\\"%s\\\"\" );\n$PT$$FG$$BG$", st;
                                                WinZBufUpdate;
                                                SysFile(st, FALSE);
                                                res = TRUE;
                                                break;

                                        case RIGHT_COPY:
                                                StrCopy(fn.name, st);
                                                if (DocForm(&fn))
                                                {
                                                        res = ToBool(Copy(st, fn.name));
                                                }
                                                else
                                                        send_new_line = TRUE;
                                                break;

                                        case RIGHT_MOVE:
                                                StrCopy(fn.name, st);
                                                if (DocForm(&fn))
                                                        res = Move(st, fn.name);
                                                else
                                                        send_new_line = TRUE;
                                                break;

                                        case RIGHT_DELETE:
                                                res = ToBool(Del(st));
                                                break;

                                        case RIGHT_TYPE:
                                                res = Type(st);
                                                break;

                                        case RIGHT_ED:
                                                if (FileExtDot(st) && !FilesFindMatch(st, FILEMASK_DD))
                                                {
                                                        if (!PopUpCancelOk(ST_WARN_ST "Not DolDoc File\n\n"))
                                                        {
                                                                send_new_line = TRUE;
                                                                break;
                                                        }
                                                }
                                                "Ed(\"%s\");\n$PT$$FG$$BG$", st;
                                                res = Ed(st);
                                                break;

                                        case RIGHT_MOUNT:
                                                if (FileExtDot(st) && !FilesFindMatch(st, "*.ISO.C"))
                                                {
                                                        if (!PopUpCancelOk(ST_WARN_ST "Not .ISO.C File\n\n"))
                                                        {
                                                                send_new_line = TRUE;
                                                                break;
                                                        }
                                                }
                                                "MountFile(\"%s\");\n$PT$$FG$$BG$", st;
                                                WinZBufUpdate;
                                                MountFile(st);
                                                res = TRUE;
                                                break;

                                        case RIGHT_PLAIN:
                                                "Plain(\"%s\");\n$PT$$FG$$BG$", st;
                                                res = Plain(st);
                                                break;

                                        case RIGHT_INFILE:
                                                if (FileExtDot(st) && !FilesFindMatch(st, "*.IN*"))
                                                {
                                                        if (!PopUpCancelOk(ST_WARN_ST "Not .IN File\n\n"))
                                                        {
                                                                send_new_line = TRUE;
                                                                break;
                                                        }
                                                }
                                                "InFile(\"%s\");\n$PT$$FG$$BG$", st;
                                                WinZBufUpdate;
                                                InFile(st);
                                                res = TRUE;
                                                break;
                                }
                        }
                        else
                                send_new_line = TRUE;
                        Free(st);
                }
                else
                        send_new_line = TRUE;
                Free(st2);
        }
        else
                send_new_line = TRUE;
        DocBottom(doc);
        "$PT$$FG$$BG$";
        if (send_new_line)
                '\n';

        return res;
}