ZealOS/src/System/InFile.ZC
TomAwezome 3a33e6baaf Rename CosmiC to ZealC.
Rename all .CC files to .ZC extension.
2021-12-11 06:21:22 -05:00

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);
}