//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 my 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 my 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 hndlr 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);
          st2=FileNameAbs(DocPut->filename.name);
          if (!StrCmp(st1,st2)) {
            Free(st1);
            st1=BibleLine2Verse(DocPut->cur_entry->y+1,',');
            DocPrint(sys_clip_doc,"$LK,\"BF:%s\"$",st1);
          } else
            DocPrint(sys_clip_doc,"$LK,\"FL:%s,%d\"$",
                  st2,DocPut->cur_entry->y+1);
          Free(st1);
          Free(st2);
        }
        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);