forked from AbleOS/ableos
fix backspace
This commit is contained in:
parent
1ca1594f66
commit
ce765f2488
|
@ -1,6 +1,6 @@
|
|||
use core::panic::PanicInfo;
|
||||
|
||||
use crate::{arch::gdt, println, rhai_shell::KEYBUFF};
|
||||
use crate::{arch::gdt, print, println, rhai_shell::KEYBUFF};
|
||||
use cpuio::outb;
|
||||
use pic8259::ChainedPics;
|
||||
use qrcode::QrCode;
|
||||
|
@ -141,6 +141,7 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(_stack_frame: InterruptStac
|
|||
// TODO: Fix this and apply to new term
|
||||
|
||||
KEYBUFF.lock().push(8.into());
|
||||
// trace!("8");
|
||||
// print!("\u{8}");
|
||||
}
|
||||
// '^' => KERNEL_STATE.lock().shutdown(),
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
use alloc::collections::VecDeque;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ChannelPermission {
|
||||
pub owner: bool,
|
||||
pub producer: bool,
|
||||
|
||||
pub consumer: bool,
|
||||
/// Whether or not the process can be destructive about reading
|
||||
pub distructive_consumer: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Channel {
|
||||
inner: VecDeque<u8>,
|
||||
}
|
||||
|
||||
impl Channel {
|
||||
pub fn new() -> Self {
|
||||
let deq = VecDeque::from([]);
|
||||
|
||||
Self { inner: deq }
|
||||
}
|
||||
|
||||
pub fn read(&mut self) -> Result<u8, ChannelError> {
|
||||
if let Some(abc) = self.inner.pop_front() {
|
||||
return Ok(abc);
|
||||
}
|
||||
return Err(ChannelError::EmptyBuffer);
|
||||
}
|
||||
|
||||
pub fn send(&mut self, data: u8) {
|
||||
self.inner.push_back(data);
|
||||
}
|
||||
}
|
||||
|
||||
pub enum ChannelError {
|
||||
EmptyBuffer,
|
||||
InvalidPermissions,
|
||||
}
|
|
@ -68,14 +68,13 @@ pub mod wasm_jumploader;
|
|||
pub mod allocator;
|
||||
|
||||
// pub use allocator as aalloc;
|
||||
pub mod channels;
|
||||
pub mod handle;
|
||||
pub mod hardware;
|
||||
pub mod ipc;
|
||||
pub mod panic;
|
||||
mod unicode_utils;
|
||||
pub mod vga_e;
|
||||
pub mod vgai;
|
||||
// pub mod vgai;
|
||||
pub mod vterm;
|
||||
|
||||
#[prelude_import]
|
||||
|
|
|
@ -41,8 +41,10 @@ impl core::fmt::Write for Stdout {
|
|||
// trace!("printing");
|
||||
// x86_64::instructions::interrupts::without_interrupts(|| {
|
||||
let mut term = TERM.lock();
|
||||
|
||||
term.set_dirty(true);
|
||||
term.print(s);
|
||||
|
||||
drop(term);
|
||||
// });
|
||||
// trace!("Finished printing");
|
||||
|
|
|
@ -9,6 +9,9 @@ pub fn bruh() {
|
|||
|
||||
let xyz_old = decode(&xyz_new);
|
||||
|
||||
println!("{}", xyz_new.len());
|
||||
println!("{}", xyz_old.len());
|
||||
|
||||
let screen_lock = VGAE.lock();
|
||||
screen_lock.set_mode();
|
||||
for y in 0..8 {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use crate::arch::drivers::sysinfo::master;
|
||||
use crate::arch::interrupts::{reset_pit_for_cpu, set_pit_2};
|
||||
use crate::image::mono_bitmap::bruh;
|
||||
use crate::systeminfo::{KERNEL_VERSION, RELEASE_TYPE};
|
||||
use crate::time::fetch_time;
|
||||
use crate::{
|
||||
|
@ -65,6 +66,8 @@ pub fn scratchpad() {
|
|||
|
||||
println!("\0RED\0OHNO\0RESET\0");
|
||||
|
||||
// bruh();
|
||||
|
||||
disable();
|
||||
let tick_time = fetch_time();
|
||||
|
||||
|
@ -133,7 +136,7 @@ pub fn real_shell() {
|
|||
|
||||
let mut buf = String::new();
|
||||
print!("{}", prompt);
|
||||
|
||||
// panic!(":<");
|
||||
loop {
|
||||
match x86_64::instructions::interrupts::without_interrupts(|| KEYBUFF.lock().pop()) {
|
||||
Some('\n') => {
|
||||
|
@ -151,9 +154,9 @@ pub fn real_shell() {
|
|||
buf.clear();
|
||||
print!("{}", prompt);
|
||||
}
|
||||
Some('\u{0008}') => {
|
||||
print!("\u{08}");
|
||||
|
||||
Some('\u{8}') => {
|
||||
print!("\u{8}");
|
||||
trace!("");
|
||||
buf.pop();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
pub enum Color {
|
||||
/// Represents the color `Black (0x0)`.
|
||||
Black = 0x0,
|
||||
/// Represents the color `Blue (0x1)`.
|
||||
Blue = 0x1,
|
||||
/// Represents the color `Green (0x2)`.
|
||||
Green = 0x2,
|
||||
/// Represents the color `Cyan (0x3)`.
|
||||
Cyan = 0x3,
|
||||
/// Represents the color `Red (0x4)`.
|
||||
Red = 0x4,
|
||||
/// Represents the color `Magenta (0x5)`.
|
||||
Magenta = 0x5,
|
||||
/// Represents the color `Brown (0x6)`.
|
||||
Brown = 0x6,
|
||||
/// Represents the color `LightGrey (0x7)`.
|
||||
LightGrey = 0x7,
|
||||
/// Represents the color `DarkGrey (0x8)`.
|
||||
DarkGrey = 0x8,
|
||||
/// Represents the color `LightBlue (0x9)`.
|
||||
LightBlue = 0x9,
|
||||
/// Represents the color `LightGreen (0xA)`.
|
||||
LightGreen = 0xA,
|
||||
/// Represents the color `LightCyan (0xB)`.
|
||||
LightCyan = 0xB,
|
||||
/// Represents the color `LightRed (0xC)`.
|
||||
LightRed = 0xC,
|
||||
/// Represents the color `Pink (0xD)`.
|
||||
Pink = 0xD,
|
||||
/// Represents the color `Yellow (0xE)`.
|
||||
Yellow = 0xE,
|
||||
/// Represents the color `White (0xF)`.
|
||||
White = 0xF,
|
||||
}
|
||||
|
||||
const VGA_BUFFER_SIZE: usize = 480;
|
||||
|
||||
pub struct ScreenBuffer {}
|
||||
impl ScreenBuffer {
|
||||
pub fn initialise() {}
|
||||
|
||||
pub fn flip_buffer() {
|
||||
/*
|
||||
before doing anything past here we need to tell the VGA about some things
|
||||
*/
|
||||
let setup = false;
|
||||
if setup {
|
||||
use Color::*;
|
||||
let dualpixel: u8 = Red as u8;
|
||||
|
||||
let buff: [u8; VGA_BUFFER_SIZE] = [dualpixel; VGA_BUFFER_SIZE];
|
||||
|
||||
let buff_ptr = buff.as_ptr();
|
||||
let vga_buffer = 0xb8000 as *mut u8;
|
||||
|
||||
use core::ptr;
|
||||
unsafe {
|
||||
ptr::copy(buff_ptr, vga_buffer, VGA_BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,17 +10,20 @@ pub struct Term {
|
|||
dirty: bool,
|
||||
color: Color16,
|
||||
term: [(char, Color16); 80 * 60],
|
||||
back_buffer: [u8; 640 * 480],
|
||||
x: u8,
|
||||
}
|
||||
impl Term {
|
||||
pub fn new() -> Self {
|
||||
let mode = VGAE.lock();
|
||||
mode.set_mode();
|
||||
// let fb = mode.get_frame_buffer();
|
||||
drop(mode);
|
||||
|
||||
Self {
|
||||
dirty: false,
|
||||
x: 0,
|
||||
back_buffer: [0; 640 * 480],
|
||||
term: [('\0', Color16::LightGrey); 80 * 60],
|
||||
color: Color16::White,
|
||||
}
|
||||
|
@ -67,11 +70,11 @@ impl Term {
|
|||
if self.x == 80 {
|
||||
self.move_up();
|
||||
}
|
||||
|
||||
// trace!("C");
|
||||
match c {
|
||||
'\u{08}' => {
|
||||
if self.x == 0 {
|
||||
// trace!("IMPOSSIBLE BACKSPACE");
|
||||
trace!("IMPOSSIBLE BACKSPACE");
|
||||
return;
|
||||
}
|
||||
trace!("BACKSPACE");
|
||||
|
@ -111,7 +114,7 @@ impl Term {
|
|||
|
||||
pub fn draw_term(&mut self) {
|
||||
if self.is_dirty() {
|
||||
trace!("Redrawing");
|
||||
// trace!("Redrawing");
|
||||
use Color16::*;
|
||||
let mode = VGAE.lock();
|
||||
mode.clear_screen(DarkGrey);
|
||||
|
@ -153,7 +156,7 @@ impl Term {
|
|||
}
|
||||
|
||||
self.set_dirty(false);
|
||||
trace!("Finished drawing");
|
||||
// trace!("Finished drawing");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -203,7 +206,7 @@ pub enum Token {
|
|||
#[token(" ")]
|
||||
Space,
|
||||
|
||||
#[regex("[\t\n!-~]+", text_lex, priority = 0)]
|
||||
#[regex("[\t\n\u{8}█!-~]+", text_lex, priority = 0)]
|
||||
Text(String),
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use crate::{arch::generate_process_pass, rhai_shell::KEYBUFF};
|
||||
use crate::{arch::generate_process_pass, ipc::channel::ChannelMessage, rhai_shell::KEYBUFF};
|
||||
use wasmi::{
|
||||
Error, Externals, FuncInstance, FuncRef, ModuleImportResolver, RuntimeArgs, RuntimeValue,
|
||||
Signature, Trap, ValueType,
|
||||
|
@ -165,4 +165,14 @@ host_externals! {
|
|||
print!("{}", char::from(chr));
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
|
||||
|
||||
// TODO: Send a message to a channel
|
||||
6: send_channel_message(){
|
||||
|
||||
|
||||
Ok(None)
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Loading…
Reference in a new issue