//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);