//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 $LK,"Char",A="HI:Char"$ for definition of scan codes.
	//See $LK,"Key Allocations",A="FI:::/Doc/KeyAlloc.DD"$.
	//See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.

	//You can customize keys.  This routine
	//is called before the main editor
	//key handler $LK,"DocPutKey",A="MN: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 /ã");
				else
					'ã';
				return TRUE;

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

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

			case '4':
				if (sc & SCF_KEY_DESC)
					KeyDescSet("Dol /ê");
				else
					'ê';
				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);
