//Place this file in /Home and change
//anything you want.

U0 TimeIns()
{
    CDate cdt;

    cdt = Now;
    "$IV,1$----%D %T----$IV,0$\n", cdt, cdt;
}

U0 FileLinkIns()
{
    U8 *st = PopUpPickFile;

    st[0] = ':';    //This is Terry's personal code, not production. LOL
    "$LK,\"%s\",A=\"FI:%s\"$", st + 2, st;
    Free(st);
}

U0 DirLinksIns()
{
    CDirEntry   *tmpde, *tmpde1;
    U8          *st = PopUpPickDir, *st2;

    st[0] = ':';    //This is Terry's personal code, not production. LOL
    st2 = MStrPrint("%s/*", st);
    tmpde = tmpde1 = FilesFind(st2, FUF_JUST_FILES);
    while (tmpde)
    {
        tmpde->full_name[0] = ':';
        "$LK,\"%s\",A=\"FI:%s\"$\n", tmpde->full_name + 2, tmpde->full_name;
        tmpde = tmpde->next;
    }
    DirTreeDel(tmpde1);
    Free(st);
    Free(st2);
}

U0 DocHiddenDel(CDoc *doc=NULL)
{
    Bool         unlock;
    CDocEntry   *doc_e, *doc_e1;

    if (!doc)
        doc = DocPut;
    if (doc)
    {
        unlock = DocLock(doc);
        DocRecalc(doc);
        doc_e = doc->head.next;
        while (doc_e != doc)
        {
            doc_e1 = doc_e->next;
            if (doc_e->de_flags & (DOCEF_FILTER_SKIP | DOCEF_SKIP))
                DocEntryDel(doc, doc_e);
            doc_e = doc_e1;
        }
        DocRecalc(doc);
        if (unlock)
            DocUnlock(doc);
    }
}

Bool MyPutKey(I64 ch, I64 sc)
{//ch=ASCII; sc=scan_code

    //See Char for definition of scan codes.
    //See Key Allocations.
    //See Keyboard Devices.

    //You can customize keys.  This routine
    //is called before the main editor
    //key handler DocPutKey().
    //You can intercept any key.

    //Return TRUE if you completely
    //handled the key.
    I64 i;
    U8 *st1, *st2;

    if (sc & SCF_ALT && !(sc & SCF_CTRL))
    {
        switch (ch)
        {
            case 0:
                switch (sc.u8[0])
                {
                    case SC_F1:
                        if (sc & SCF_SHIFT)
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /LTPURPLE");
                            else
                                "$LTPURPLE$";
                        }
                        else
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /PURPLE");
                            else
                                "$PURPLE$";
                        }
                        return TRUE;

                    case SC_F2:
                        if (sc & SCF_SHIFT)
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /LTRED");
                            else
                                "$LTRED$";
                        }
                        else
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /RED");
                            else
                                "$RED$";
                        }
                        return TRUE;

                    case SC_F3:
                        if (sc & SCF_SHIFT)
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /LTGREEN");
                            else
                                "$LTGREEN$";
                        }
                        else
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /GREEN");
                            else
                                "$GREEN$";
                        }
                        return TRUE;

                    case SC_F4:
                        if (sc & SCF_SHIFT)
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /Default Color");
                            else
                                "$FG$";
                        }
                        else
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Dol /BLUE");
                            else
                                "$BLUE$";
                        }
                        return TRUE;

                    case SC_F8:
                        if (sc & SCF_SHIFT)
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Cmd /DirLinksIns");
                            else
                                DirLinksIns;
                        }
                        else
                        {
                            if (sc & SCF_KEY_DESC)
                                KeyDescSet("Cmd /FileLinkIns");
                            else
                                FileLinkIns;
                        }
                        return TRUE;
                }
                break;

            case 'a':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /AutoComplete On");
                else
                    AutoComplete(ON);
                return TRUE;

            case 'A':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /AutoComplete Off");
                else
                    AutoComplete;
                return TRUE;

            case 'f': //With sync
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /FrameGrabber Sync");
                else if (fg_on)
                    FrameGrabberToggle(FALSE, FALSE);
                else
                    FrameGrabberToggle(TRUE, FALSE);
                return TRUE;

            case 'F': //With sync and intro TOS theme
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /FrameGrabber Intro");
                else if (fg_on)
                    FrameGrabberToggle(FALSE, FALSE);
                else
                    FrameGrabberToggle(TRUE, TRUE);
                return TRUE;

            case 'h':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /WinTileHorz");
                else
                    WinTileHorz;
                return TRUE;

            case 'H':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Edit/Del Hidden Doc Entries");
                else
                    DocHiddenDel;
                return TRUE;

            case 'm':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /WinMax");
                else
                {
                    WinBorder;
                    WinMax;
                }
                return TRUE;

            case 'v':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /WinTileVert");
                else
                    WinTileVert;
                return TRUE;

            case 'l':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Edit/Put Link to Cur Pos on Clip");
                else
                {
                    ClipDel;
                    st1 = FileNameAbs(BIBLE_FILENAME);
                    DocPrint(sys_clip_doc, "$LK,\"FL:%s,%d\"$", st1, DocPut->cur_entry->y + 1);
                    Free(st1);
                }
                return TRUE;

            case 'L':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Edit/Place Anchor, Put Link to Clip");
                else
                {
                    i = RandU32;
                    ClipDel;
                    DocPrint(sys_clip_doc, "$LK,\"<TODO>\",A=\"FA:%s,ANC%d\"$", DocPut->filename.name, i);
                    "$AN,\"<TODO>\",A=\"ANC%d\"$", i;
                }
                return TRUE;

            case 'p':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /JukeBox");
                else
                    PopUp("#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Home/Sup3/Sup3Hymns\");");
                return TRUE;

            case 'P':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Cmd /Psalmody");
                else
                    PopUp("#include \"::/Apps/Psalmody/Load\";Psalmody(\"~/Sup3/Sup3Hymns\");");
                return TRUE;

                //Ins your own ALT-key plug-ins
            case '1':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Dol /pi");
                else
                    'pi';
                return TRUE;

            case '2':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Dol /theta");
                else
                    'theta';
                return TRUE;

            case '3':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Dol /phi");
                else
                    'phi';
                return TRUE;

            case '4':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Dol /omega");
                else
                    'omega';
                return TRUE;

            case '9':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Dol /Indent 5");
                else
                    "$ID,5$";
                return TRUE;

            case '0':
                if (sc & SCF_KEY_DESC)
                    KeyDescSet("Dol /Unindent 5");
                else
                    "$ID,-5$";
                return TRUE;
        }
    }
    return FALSE;
}

Bool MyPutS(U8 *)
{
    return FALSE;
}

KeyDevAdd(&MyPutKey, &MyPutS, 0x20000000, TRUE);