LTCD_070816.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:20 +02:00
1 parent d14bbc24f9
commit 0e9364ff4c
506 files changed
+157705 -41812

No files matched your search

+175
View File
@@ -0,0 +1,175 @@
I8 ToUpper(I8 ch)
{
if (ch>='a' && ch<='z')
return ch-'a'+'A';
else
return ch;
}
void GetOutOfDollar()
{
Ltf *l=Fs->cur_ltf;
if (IsRaw) {
if (dc_flags&DCF_IN_DOLLAR)
PutChar('$$');
} else {
if (l && l->flags&LTFF_IN_DOLLAR)
PutChar('$$');
}
}
void PutErr()
{
GetOutOfDollar;
PutSysText("ST_ERROR");
}
void PutWarn()
{
GetOutOfDollar;
PutSysText("ST_WARNING");
}
void PutSysTextErr(I1 *st)
{
PutErr;
PutSysText(st);
}
void PutSysTextWarn(I1 *st)
{
PutWarn;
PutSysText(st);
}
BoolU8 ScanKey(I8 *ch=NULL,U8 *scancode=NULL,BoolU4 echo=FALSE)
{
I8 ch1=0;
U8 scancode1=0;
BoolU4 result=CallExtNum(EXT_SCAN_KEY,&ch1,&scancode1,FALSE);
if (echo)
PutKey(ch1,scancode1);
if (ch) *ch=ch1;
if (scancode) *scancode=scancode1;
return result;
}
I8 GetKey(U8 *scancode=NULL,BoolU4 echo=FALSE)
{
I8 ch1;
BoolU4 old_preempt=Preempt(OFF);
Fs->task_flags&=~(1<<TSSf_IDLE);
while (!ScanKey(&ch1,scancode,echo)) {
Fs->task_flags|=1<<TSSf_IDLE;
if (!Bt(&sys_semas[SYS_SEMA_IN_DEBUGGER],0)) {
Fs->task_flags|=1<<TSSf_AWAITING_MSG;
SwapInNext;
} else {
//kinda a kludge
Bts(&sys_semas[SYS_SEMA_KEY_PRESSED],0);
CallExtStr("PollKbdMouse");
CallExtStr("WinQueueKbdMouseMsgs");
}
}
Fs->task_flags&=~(1<<TSSf_IDLE);
Preempt(old_preempt);
return ch1;
}
I8 GetChar(U8 *scancode=NULL,BoolU4 echo=TRUE)
{
I8 ch1;
do ch1=GetKey(scancode,FALSE);
while (!ch1);
if (echo)
PrintF("$$FU$$$$BU$$%c$$FG$$$$BG$$",ch1);
return ch1;
}
I1 *MGetS()
{
//Returns a $LK,"MAlloc","MN:MAlloc"$()ed prompted string.
return CallExtNum(EXT_MGETS);
}
U8 GetS(I1 *buf,U8 size,BoolU4 allow_extended=TRUE)
{
I8 ch;
I1 *buf2;
U8 i=0;
if (!size || !buf) return 0;
if (allow_extended) {
buf2=MGetS;
if (StrLen(buf2)>size-1) {
MemCpy(buf,buf2,size-1);
buf[size-1]=0;
} else
StrCpy(buf,buf2);
i=StrLen(buf);
Free(buf2);
} else {
while (TRUE) {
ch=GetChar(NULL,FALSE);
if (ch==CH_CR) {
PutChar(ch);
break;
} if (ch==CH_BACKSPACE) {
if (i>0) {
i--;
PutChar(ch);
}
} else {
if (i<size-1) {
buf[i++]=ch;
PutChar(ch);
}
}
}
buf[i]=0;
}
return i;
}
BoolU8 YorN()
{
I8 ch;
cout "(y or n)? ";
while (TRUE) {
ch=ToUpper(GetChar(NULL,FALSE));
if (ch=='Y') {
coutln "$$FU$$$$BU$$YES$$FG$$$$BG$$";
return TRUE;
} else if (ch=='N') {
coutln "$$FU$$$$BU$$NO$$FG$$$$BG$$";
return FALSE;
}
}
}
BoolU8 PressAKey()
{
I8 ch;
PutSysText("ST_PRESS_A_KEY");
ch=GetChar(NULL,FALSE);
if (ch==CH_CTRLQ || ch==CH_ESC)
return FALSE;
else
return TRUE;
}
BoolU8 AreYouSure()
{
PutSysText("ST_ARE_YOU_SURE");
return YorN;
}
asm {KBD_IRQ_HANDLER::}
void KbdIrqHandler()
{
kbd_evt_time=GetTimeStamp;
Bts(&sys_semas[SYS_SEMA_KEY_PRESSED],0);
OutP(0x21,InP(0x21)|2);
}