mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-03-14 20:15:05 +00:00
166 lines
3.3 KiB
HolyC
Executable file
166 lines
3.3 KiB
HolyC
Executable file
#help_index "InFile;Help System/Training"
|
|
#help_file "::/Doc/InFile"
|
|
|
|
public U0 InGetStr(U8 *st)
|
|
{//Wait for user to type certain str.
|
|
I64 ch, sc;
|
|
U8 buf[256], *st2;
|
|
|
|
while (*st)
|
|
{
|
|
ch=KeyGet(&sc,FALSE);
|
|
if (sc.u8[0] != SC_SHIFT &&
|
|
sc.u8[0] != SC_ALT &&
|
|
sc.u8[0] != SC_CTRL)
|
|
{
|
|
if (ch == *st)
|
|
{
|
|
'' ch;
|
|
st++;
|
|
}
|
|
else
|
|
{
|
|
st2 = Char2KeyName(*st);
|
|
StrPrint(buf, "Press the $$GREEN$$<%s>$$FG$$ key.", st2);
|
|
Free(st2);
|
|
PopUpOk(buf);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public U0 InPrint(I64 mS=100, U8 *format,...)
|
|
{//Print message with delay after each char.
|
|
U8 *buf = StrPrintJoin(NULL, format, argc, argv), *st=buf;
|
|
I64 ch;
|
|
|
|
while (ch = *st++)
|
|
{
|
|
'' ch;
|
|
Sleep(mS);
|
|
}
|
|
Free(buf);
|
|
}
|
|
|
|
public U0 InKeyGet(I64 scan_code, I64 sc_mask = 0xFF | SCF_SHIFT | SCF_CTRL | SCF_ALT)
|
|
{//Wait for user to press certain key.
|
|
I64 sc, ch;
|
|
U8 buf[STR_LEN], *st;
|
|
|
|
do
|
|
{
|
|
ch = KeyGet(&sc);
|
|
if (sc.u8[0] != SC_PRINTSCREEN1 &&
|
|
!(sc.u8[0] == SC_SHIFT && scan_code & SCF_SHIFT) &&
|
|
!(sc.u8[0] == SC_CTRL && scan_code & SCF_CTRL) &&
|
|
!(sc.u8[0] == SC_ALT && scan_code & SCF_ALT) )
|
|
{
|
|
if (sc & sc_mask != scan_code & sc_mask)
|
|
{
|
|
st = ScanCode2KeyName(scan_code);
|
|
StrPrint(buf, "Press the $$GREEN$$<%s>$$FG$$ key", st);
|
|
Free(st);
|
|
PopUpOk(buf);
|
|
}
|
|
}
|
|
}
|
|
while (sc & sc_mask != scan_code & sc_mask);
|
|
|
|
Message(MESSAGE_KEY_DOWN, ch, sc);
|
|
}
|
|
|
|
public I64 InCharGet(...)
|
|
{//Wait for user to press one of set of chars.
|
|
I64 i, sc, ch;
|
|
U8 buf[512], *st;
|
|
|
|
while (TRUE)
|
|
{
|
|
ch = KeyGet(&sc);
|
|
if (sc.u8[0] != SC_SHIFT && sc.u8[0] != SC_ALT && sc.u8[0] != SC_CTRL)
|
|
{
|
|
for (i = 0; i < argc; i++)
|
|
if (ch == argv[i])
|
|
{
|
|
Message(MESSAGE_KEY_DOWN, ch, sc);
|
|
return ch;
|
|
}
|
|
StrPrint(buf, "Press ");
|
|
for (i = 0; i < argc; i++)
|
|
{
|
|
st = Char2KeyName(argv[i]);
|
|
CatPrint(buf, "$$GREEN$$<%s>$$FG$$", st);
|
|
Free(st);
|
|
if (argc == i+1)
|
|
CatPrint(buf, ".");
|
|
else if (argc == i + 2)
|
|
CatPrint(buf, " or ");
|
|
else
|
|
CatPrint(buf, ", ");
|
|
}
|
|
PopUpOk(buf);
|
|
}
|
|
}
|
|
}
|
|
|
|
public U0 InUntilKey(I64 scan_code, I64 sc_mask = 0xFF | SCF_SHIFT | SCF_CTRL | SCF_ALT)
|
|
{//Let user type until he presses certain key.
|
|
I64 sc, ch;
|
|
|
|
do
|
|
{
|
|
ch = KeyGet(&sc);
|
|
Message(MESSAGE_KEY_DOWN, ch, sc);
|
|
}
|
|
while (sc & sc_mask != scan_code & sc_mask);
|
|
}
|
|
|
|
public I64 InUntilChar(...)
|
|
{//Let user type until he presses one of set of chars.
|
|
I64 i, sc, ch;
|
|
|
|
while (TRUE)
|
|
{
|
|
ch = KeyGet(&sc);
|
|
Message(MESSAGE_KEY_DOWN, ch, sc);
|
|
for (i = 0 ;i < argc; i++)
|
|
if (ch == argv[i])
|
|
return ch;
|
|
}
|
|
}
|
|
|
|
public Bool InView()
|
|
{//Let user type until <ESC> or <SHIFT-ESC>.
|
|
Bool res = View;
|
|
|
|
DocBottom;
|
|
|
|
return res;
|
|
}
|
|
|
|
#help_index "InFile;Help System/Training;Mouse"
|
|
I64 in_plot_l, in_plot_r;
|
|
|
|
Bool InSetMousePlot(I64 mS, I64 x, I64 y, I64 z)
|
|
{
|
|
MouseSet(x, y, z, in_plot_l, in_plot_r);
|
|
Sleep(mS);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
public U0 InSetMouse(I64 mS=7, I64 x = I64_MAX, I64 y = I64_MAX, I64 z = I64_MAX, I64 l = I64_MAX, I64 r = I64_MAX)
|
|
{//Move mouse to spot at certain speed.
|
|
if (!(0 <= x < GR_WIDTH))
|
|
x = mouse.pos.x;
|
|
if (!(0 <= y < GR_HEIGHT))
|
|
y = mouse.pos.y;
|
|
if (z == I64_MAX)
|
|
z = mouse.pos.z;
|
|
if (!(FALSE <= l <= TRUE))
|
|
l = mouse.lb;
|
|
if (!(FALSE <= r <= TRUE))
|
|
r = mouse.rb;
|
|
in_plot_l = l; in_plot_r = r;
|
|
Line(mS, mouse.pos.x, mouse.pos.y, mouse.pos.z, x, y, z, &InSetMousePlot);
|
|
}
|