TempleOSCDV3.11.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:46:29 +02:00
1 parent f8c05f98f4
commit ed64d7e3b8
549 files changed
+10643 -12855

No files matched your search

+32 -32
View File
@@ -8,7 +8,7 @@ U0 PutKey(I64 ch=0,I64 sc=0)
while (kbd.scan_code & SCF_SCROLL)
Yield; //Wait on SCROLL LOCK Key
while (tempp!=&keydev.put_key_root) {
if ((!(sc & SCF_KEY_DESC) || tempp->flags & KDF_HAS_DESCS) &&
if ((!(sc&SCF_KEY_DESC) || tempp->flags & KDF_HAS_DESCS) &&
(*tempp->put_key)(ch,sc))
break;
tempp=tempp->next;
@@ -19,7 +19,7 @@ U0 PutKey(I64 ch=0,I64 sc=0)
U0 PutChars(U64 ch)
{//Output chars. Up to 8 chars in a single U64.
//Don't use this. $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT.Z,DemoHolyC"$
//Don't use this. $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT,DemoHolyC"$
while (ch) {
PutKey(ch&255,0);
ch>>=8;
@@ -28,7 +28,7 @@ U0 PutChars(U64 ch)
U0 PutS(U8 *st)
{//Use $LK,"Print",A="MN:Print"$(). See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
//Don't use this. $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT.Z,DemoHolyC"$
//Don't use this. $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT,DemoHolyC"$
I64 ch;
U8 *ptr;
Bool cont=TRUE;
@@ -55,19 +55,15 @@ U0 PutS(U8 *st)
U0 KeyDescSet(U8 *fmt,...)
{//Call this from key handler to report desc in $LK,"KeyMap",A="MN:KeyMap"$().
I64 i;
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);
StrCpy(keydev.desc,buf);
keydev.handler=Caller;
Free(buf);
for (i=0;i<5;i++)
Yield; //Makes KeyMap work better.
}
CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),
Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE)
{//Places hook in StdOut chain. See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
Bool old_preempt=Preempt;
CKeyDevEntry *tempp,*tempp1=keydev.put_key_root.last;
tempp=ACAlloc(sizeof(CKeyDevEntry));
tempp->put_key=fp_put_key;
@@ -78,15 +74,12 @@ CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),
while (tempp1->priority>priority)
tempp1=tempp1->last;
QueIns(tempp,tempp1);
Preempt(old_preempt);
return tempp;
}
U0 KeyDevRem(CKeyDevEntry *tempp)
{//Remove StdOut hook and free.
Bool old_preempt=Preempt;
QueRem(tempp);
Preempt(old_preempt);
Free(tempp);
}
@@ -112,11 +105,8 @@ Bool KDRawPutS(U8 *st)
Bool KDInputFilterPutKey(I64 ch,I64 scan_code)
{
Bool old_preempt;
if (Bt(&Fs->task_flags,TASKf_INPUT_FILTER_TASK)) {
old_preempt=Preempt;
Msg(MSG_KEY_DOWN,ch,scan_code);
Preempt(old_preempt);
return TRUE;
} else
return FALSE;
@@ -125,12 +115,9 @@ Bool KDInputFilterPutKey(I64 ch,I64 scan_code)
Bool KDInputFilterPutS(U8 *st)
{
I64 ch;
Bool old_preempt;
if (Bt(&Fs->task_flags,TASKf_INPUT_FILTER_TASK)) {
old_preempt=Preempt;
while (ch=*st++)
Msg(MSG_KEY_DOWN,ch,0);
Preempt(old_preempt);
return TRUE;
} else
return FALSE;
@@ -152,7 +139,7 @@ U0 CtrlAltD(I64)
if (Fs==Gs->idle_task)
BptS(sys_winmgr_task->rip,sys_winmgr_task);
else
BptS(*keydev.ctrl_alt_let_ret_addr);
BptS(*keydev.ctrl_alt_ret_addr);
}
}
@@ -181,31 +168,44 @@ U0 CtrlAltX(I64)
LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_X);
}
U0 CtrlAltLetCBSet(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc,Bool in_irq=FALSE)
U0 CtrlAltCBSet(U8 ch,U0 (*fp_handler)(I64 sc),
U8 *no_shift_desc=NULL,U8 *shift_desc=NULL,Bool in_irq=FALSE)
{//Set callback for <CTRL-ALT-letter>.
ch=ToUpper(ch)-'A';
if (ch<26) {
keydev.fp_ctrl_alt_let_cbs[ch]=fp_handler;
Free(keydev.ctrl_alt_let_descs[ch]);
keydev.ctrl_alt_let_descs[ch]=AStrNew(desc);
BEqu(&keydev.ctrl_alt_let_in_irq_flags,ch,in_irq);
keydev.fp_ctrl_alt_cbs[ch]=fp_handler;
Free(keydev.ctrl_alt_no_shift_descs[ch]);
if (no_shift_desc)
keydev.ctrl_alt_no_shift_descs[ch]=AStrNew(no_shift_desc);
else
keydev.ctrl_alt_no_shift_descs[ch]=NULL;
Free(keydev.ctrl_alt_shift_descs[ch]);
if (shift_desc)
keydev.ctrl_alt_shift_descs[ch]=AStrNew(shift_desc);
else
keydev.ctrl_alt_shift_descs[ch]=NULL;
BEqu(&keydev.ctrl_alt_in_irq_flags,ch,in_irq);
}
}
U0 KeyDevInit()
{
keydev.fp_ctrl_alt_let_cbs =CAlloc(26*sizeof(U8 *));
keydev.ctrl_alt_let_descs =CAlloc(26*sizeof(U8 *));
keydev.ctrl_alt_let_in_irq_flags=0;
keydev.fp_ctrl_alt_cbs =CAlloc(26*sizeof(U8 *));
keydev.ctrl_alt_no_shift_descs=CAlloc(26*sizeof(U8 *));
keydev.ctrl_alt_shift_descs =CAlloc(26*sizeof(U8 *));
keydev.ctrl_alt_in_irq_flags =0;
MemSet(&keydev.put_key_root,0,sizeof(CKeyDevEntry));
QueInit(&keydev.put_key_root);
KeyDevAdd(&KDInputFilterPutKey,&KDInputFilterPutS,0x40000000,FALSE);
KeyDevAdd(&KDRawPutKey,&KDRawPutS,0x60000000,FALSE);
CtrlAltLetCBSet('C',&CtrlAltC,"Sys/Break Execution",TRUE);
CtrlAltLetCBSet('D',&CtrlAltD,"Sys/Enter Debugger",TRUE);
CtrlAltLetCBSet('E',&CtrlAltE,"Sys/Spawn New User Task");
CtrlAltLetCBSet('F',&CtrlAltF,"Sys/VGA Flush",TRUE);
CtrlAltLetCBSet('M',&CtrlAltM,"Sys/Toggle Mute");
CtrlAltLetCBSet('T',&CtrlAltT,"Sys/Switch Focus to Next Task",TRUE);
CtrlAltLetCBSet('X',&CtrlAltX,"Sys/Kill Focused Task",TRUE);
CtrlAltCBSet('C',&CtrlAltC,"Cmd /Break Execution",,TRUE);
CtrlAltCBSet('D',&CtrlAltD,"Cmd /Enter Debugger",,TRUE);
CtrlAltCBSet('E',&CtrlAltE,"Cmd /Spawn New User Task");
CtrlAltCBSet('F',&CtrlAltF,"Cmd /VGA Flush",,TRUE);
CtrlAltCBSet('M',&CtrlAltM,"Cmd /Toggle Mute");
CtrlAltCBSet('T',&CtrlAltT,"Cmd /Switch Focus to Next Task",,TRUE);
CtrlAltCBSet('X',&CtrlAltX,"Cmd /Kill Focused Task",,TRUE);
}