#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;
}