Compare commits
73 Commits
3a13017ede
...
6eea3bda06
Author | SHA1 | Date | |
---|---|---|---|
6eea3bda06 | |||
2f608d46ac | |||
1edf10380f | |||
5867195168 | |||
5e1d70819a | |||
07e992f61a | |||
d47c25a2fb | |||
9a7cb66c34 | |||
7a93b15a02 | |||
de15730db5 | |||
1774eadd60 | |||
ea34f782e8 | |||
09ac7b0730 | |||
077a42c15c | |||
2278a0b947 | |||
1214d1711d | |||
6d92eefd5f | |||
56a2284b39 | |||
5e3b9fc950 | |||
c8edb55eb2 | |||
ca92ff9d96 | |||
b2de0d2b84 | |||
ccd5551450 | |||
51b9acac31 | |||
d7d18c7c31 | |||
51ef9536d3 | |||
87a54a6187 | |||
35b645c5c9 | |||
5b875bc12a | |||
e35c940bd9 | |||
63098bb5af | |||
133541b7e4 | |||
0629719975 | |||
39278465ac | |||
210d322886 | |||
4011aa0467 | |||
0aaac192d8 | |||
a703238ff9 | |||
8e2def7d88 | |||
bfa5ce4c00 | |||
1aa0406649 | |||
8ebc5e88a6 | |||
b380d84347 | |||
2d7ece4e9b | |||
1c4f2dfb15 | |||
7066a976c3 | |||
3442ae0bdb | |||
d6b7a4a921 | |||
feb84ac3fa | |||
80c8a80301 | |||
0fcd984c21 | |||
3755d4c0a3 | |||
218278fb22 | |||
117edb3e90 | |||
739b05ab67 | |||
dd3611cb25 | |||
e932efd72c | |||
35d07206d7 | |||
40143597d8 | |||
f90634e1b1 | |||
f61dd9ba99 | |||
eef6483192 | |||
88fb4be5ed | |||
94c06379ea | |||
156092cbbb | |||
4933e1e32c | |||
2a22b751e9 | |||
ea4e374718 | |||
6191039bfb | |||
b222221517 | |||
c17f6d0e57 | |||
4502073b7d | |||
6fe2343233 |
@ -35,6 +35,7 @@ luna_app(time.cpp time)
|
|||||||
luna_app(ln.cpp ln)
|
luna_app(ln.cpp ln)
|
||||||
luna_app(mktemp.cpp mktemp)
|
luna_app(mktemp.cpp mktemp)
|
||||||
luna_app(sysfuzz.cpp sysfuzz)
|
luna_app(sysfuzz.cpp sysfuzz)
|
||||||
|
luna_app(pivot_root.cpp pivot_root)
|
||||||
luna_app(cp.cpp cp)
|
luna_app(cp.cpp cp)
|
||||||
luna_app(kill.cpp kill)
|
luna_app(kill.cpp kill)
|
||||||
luna_app(gol.cpp gol)
|
luna_app(gol.cpp gol)
|
||||||
|
19
apps/pivot_root.cpp
Normal file
19
apps/pivot_root.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <os/ArgumentParser.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
Result<int> luna_main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
StringView new_root;
|
||||||
|
StringView put_old;
|
||||||
|
|
||||||
|
os::ArgumentParser parser;
|
||||||
|
parser.add_description("Move the current root directory to another directory and replace it with another mount.");
|
||||||
|
parser.add_system_program_info("pivot_root"_sv);
|
||||||
|
parser.add_positional_argument(new_root, "new_root", true);
|
||||||
|
parser.add_positional_argument(put_old, "put_old", true);
|
||||||
|
parser.parse(argc, argv);
|
||||||
|
|
||||||
|
long rc = syscall(SYS_pivot_root, new_root.chars(), put_old.chars());
|
||||||
|
return Result<int>::from_syscall(rc);
|
||||||
|
}
|
@ -19,20 +19,21 @@ constexpr u8 RIGHT_SHIFT = 0x36;
|
|||||||
constexpr u8 CAPS_LOCK = 0x3a;
|
constexpr u8 CAPS_LOCK = 0x3a;
|
||||||
|
|
||||||
constexpr u8 LEFT_CONTROL = 0x1D;
|
constexpr u8 LEFT_CONTROL = 0x1D;
|
||||||
|
constexpr u8 TAB = 0x0F;
|
||||||
constexpr u8 LEFT_ALT = 0x38;
|
constexpr u8 LEFT_ALT = 0x38;
|
||||||
constexpr u8 F11 = 0x57;
|
constexpr u8 F11 = 0x57;
|
||||||
constexpr u8 F12 = 0x58;
|
constexpr u8 F12 = 0x58;
|
||||||
|
|
||||||
static bool should_ignore_key(u8 scancode)
|
static bool should_ignore_key(u8 scancode)
|
||||||
{
|
{
|
||||||
return (scancode > 0x3A && scancode < 0x47) || scancode == F11 || scancode == F12;
|
return (scancode > 0x3A && scancode < 0x47) || scancode == TAB || scancode == F11 || scancode == F12;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr char key_table[] = {
|
constexpr char key_table[] = {
|
||||||
'\0',
|
'\0',
|
||||||
'\1', // escape
|
'\1', // escape
|
||||||
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b',
|
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b',
|
||||||
'\t', // tab
|
'\0', // tab
|
||||||
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
|
||||||
'\0', // left ctrl
|
'\0', // left ctrl
|
||||||
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`',
|
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`',
|
||||||
@ -74,7 +75,7 @@ constexpr char shifted_key_table[] = {
|
|||||||
'\0',
|
'\0',
|
||||||
'\1', // escape
|
'\1', // escape
|
||||||
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '\b',
|
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '\b',
|
||||||
'\t', // tab
|
'\0', // tab
|
||||||
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\n',
|
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\n',
|
||||||
'\0', // left ctrl
|
'\0', // left ctrl
|
||||||
'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~',
|
'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~',
|
||||||
|
@ -106,7 +106,6 @@ void ConsoleDevice::process_key_event(u8 scancode)
|
|||||||
{
|
{
|
||||||
TextConsole::putwchar(L'\b');
|
TextConsole::putwchar(L'\b');
|
||||||
if (_iscntrl(maybe_char.value())) TextConsole::putwchar(L'\b');
|
if (_iscntrl(maybe_char.value())) TextConsole::putwchar(L'\b');
|
||||||
if (maybe_char.value() == '\t') TextConsole::wprint(L"\b\b");
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -180,7 +179,7 @@ void ConsoleDevice::process_key_event(u8 scancode)
|
|||||||
if (m_settings.c_lflag & ECHOCTL)
|
if (m_settings.c_lflag & ECHOCTL)
|
||||||
{
|
{
|
||||||
bool should_echo = true;
|
bool should_echo = true;
|
||||||
if (key == '\n' || key == '\t' || key == '\0' || key == m_settings.c_cc[VEOF]) should_echo = false;
|
if (key == '\n' || key == '\0' || key == m_settings.c_cc[VEOF]) should_echo = false;
|
||||||
|
|
||||||
if (should_echo)
|
if (should_echo)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user