mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-14 23:16:55 -04:00
System call to change canonical mode
This commit is contained in:
parent
9111554089
commit
b784bfa38c
@ -45,6 +45,8 @@ struct virtual_terminal {
|
||||
*/
|
||||
size_t read_input_raw();
|
||||
|
||||
void set_canonical(bool can);
|
||||
|
||||
virtual_terminal(){}
|
||||
|
||||
virtual_terminal(const virtual_terminal& rhs) = delete;
|
||||
|
@ -45,6 +45,13 @@ void sc_get_input_raw(interrupt::syscall_regs* regs){
|
||||
regs->rax = tty.read_input_raw();
|
||||
}
|
||||
|
||||
void sc_set_canonical(interrupt::syscall_regs* regs){
|
||||
auto ttyid = scheduler::get_process(scheduler::get_pid()).tty;
|
||||
auto& tty = stdio::get_terminal(ttyid);
|
||||
|
||||
tty.set_canonical(regs->rbx);
|
||||
}
|
||||
|
||||
void sc_sleep_ms(interrupt::syscall_regs* regs){
|
||||
auto time = regs->rbx;
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "keyboard.hpp"
|
||||
#include "console.hpp"
|
||||
#include "assert.hpp"
|
||||
#include "logging.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -60,9 +61,7 @@ void stdio::virtual_terminal::send_input(char key){
|
||||
if(qwertz_key == '\n'){
|
||||
// Transfer current line to the canonical buffer
|
||||
while(!input_buffer.empty()){
|
||||
canonical_buffer.push(input_buffer.pop());
|
||||
}
|
||||
|
||||
canonical_buffer.push(input_buffer.pop()); }
|
||||
if(!input_queue.empty()){
|
||||
input_queue.wake_up();
|
||||
}
|
||||
@ -107,6 +106,12 @@ size_t stdio::virtual_terminal::read_input_raw(){
|
||||
return raw_buffer.pop();
|
||||
}
|
||||
|
||||
void stdio::virtual_terminal::set_canonical(bool can){
|
||||
logging::logf(logging::log_level::TRACE, "Switched terminal %u canonical mode from %u to %u\n", id, uint64_t(canonical), uint64_t(canonical));
|
||||
|
||||
canonical = can;
|
||||
}
|
||||
|
||||
void stdio::init_terminals(){
|
||||
for(size_t i = 0; i < MAX_TERMINALS; ++i){
|
||||
auto& terminal = terminals[i];
|
||||
|
@ -34,6 +34,7 @@ void print_line(const char* s);
|
||||
void print_line(size_t v);
|
||||
void print_line(const std::string& s);
|
||||
|
||||
void set_canonical(bool can);
|
||||
size_t read_input(char* buffer, size_t max);
|
||||
size_t read_input_raw();
|
||||
|
||||
|
@ -55,6 +55,14 @@ void print(int64_t v){
|
||||
print(std::to_string(v));
|
||||
}
|
||||
|
||||
void set_canonical(bool can){
|
||||
size_t value = can;
|
||||
asm volatile("mov rax, 11; mov rbx, %[value]; int 50;"
|
||||
:
|
||||
: [value] "g" (value)
|
||||
: "rax", "rbx");
|
||||
}
|
||||
|
||||
size_t read_input(char* buffer, size_t max){
|
||||
size_t value;
|
||||
asm volatile("mov rax, 3; mov rbx, %[buffer]; mov rcx, %[max]; int 50; mov %[read], rax"
|
||||
|
Loading…
x
Reference in New Issue
Block a user