1
0
Fork 0
forked from koniifer/ableos

colorify integrated into print

This commit is contained in:
Able 2021-12-28 02:56:29 -06:00
parent 914085fdf5
commit 353d759e94
13 changed files with 149 additions and 37 deletions

2
ableos/Cargo.lock generated
View file

@ -59,7 +59,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]] [[package]]
name = "externc-libm" name = "externc-libm"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/HaruxOS/externc-libm#597110801cbcbbfb5d4731746d13014494deb39f" source = "git+https://github.com/HaruxOS/externc-libm#ad2865a706fd46d829550ed4cdfa4126f2c81e19"
dependencies = [ dependencies = [
"libm", "libm",
] ]

View file

@ -92,6 +92,10 @@ impl Writer {
self.buffer.chars[row][col].write(blank); self.buffer.chars[row][col].write(blank);
} }
} }
pub fn backspace(&mut self) {
self.column_position -= 1;
}
} }
impl fmt::Write for Writer { impl fmt::Write for Writer {
fn write_str(&mut self, s: &str) -> fmt::Result { fn write_str(&mut self, s: &str) -> fmt::Result {
@ -102,7 +106,7 @@ impl fmt::Write for Writer {
lazy_static! { lazy_static! {
pub static ref WRITER: Mutex<Writer> = Mutex::new(Writer { pub static ref WRITER: Mutex<Writer> = Mutex::new(Writer {
column_position: 0, column_position: 0,
color_code: ColorCode::new(Color::Green, Color::Black), color_code: ColorCode::new(Color::White, Color::Black),
buffer: unsafe { &mut *(0xb8000 as *mut Buffer) }, buffer: unsafe { &mut *(0xb8000 as *mut Buffer) },
}); });
} }
@ -111,6 +115,8 @@ use core::fmt;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use spin::Mutex; use spin::Mutex;
use volatile::Volatile; use volatile::Volatile;
use crate::print;
#[macro_export] #[macro_export]
macro_rules! kprint { macro_rules! kprint {
($($arg:tt)*) => ($crate::arch::drivers::vga::_kprint(format_args!($($arg)*))); ($($arg:tt)*) => ($crate::arch::drivers::vga::_kprint(format_args!($($arg)*)));

View file

@ -1,7 +1,7 @@
#![allow(clippy::print_literal)] #![allow(clippy::print_literal)]
use { use {
super::{gdt, interrupts}, super::{gdt, interrupts},
crate::{info, println}, crate::info,
}; };
pub fn init() { pub fn init() {
@ -9,6 +9,5 @@ pub fn init() {
interrupts::init_idt(); interrupts::init_idt();
unsafe { interrupts::PICS.lock().initialize() }; unsafe { interrupts::PICS.lock().initialize() };
x86_64::instructions::interrupts::enable(); x86_64::instructions::interrupts::enable();
println!("Initialized");
info!("Initialized"); info!("Initialized");
} }

View file

@ -1,4 +1,7 @@
use crate::{arch::gdt, print, println}; use crate::{
arch::{drivers::vga::WRITER, gdt},
print, println,
};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use pic8259::ChainedPics; use pic8259::ChainedPics;
use spin; use spin;
@ -81,8 +84,18 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(_stack_frame: InterruptStac
kind: DecodedKeyKind::Unicode, kind: DecodedKeyKind::Unicode,
value: character, value: character,
} => { } => {
match character {
// Backspace
8 => {
WRITER.lock().backspace();
print!(" ");
WRITER.lock().backspace();
}
_ => {
print!("{}", char::try_from(character).unwrap()); print!("{}", char::try_from(character).unwrap());
// serial_print!("{}", character); }
}
crate::kmain::key_entropy(character.try_into().unwrap()); crate::kmain::key_entropy(character.try_into().unwrap());
} }
DecodedKey { DecodedKey {

View file

@ -1,4 +0,0 @@
#[no_mangle]
extern "C" fn __truncdfsf2(_x: f64) -> f32 {
0.0
}

View file

@ -1,4 +1,7 @@
use crate::arch::drivers::vga::{set_vga_color, Color}; use crate::{
arch::drivers::vga::{set_vga_color, Color},
kprint,
};
pub fn colorify(eval: &str) { pub fn colorify(eval: &str) {
let y = eval.split("$"); let y = eval.split("$");
@ -56,7 +59,7 @@ pub fn colorify(eval: &str) {
set_vga_color(Color::White, Color::Black); set_vga_color(Color::White, Color::Black);
} }
elk => { elk => {
print!("{}", elk); kprint!("{}", elk);
} }
} }
} }

View file

@ -0,0 +1,69 @@
/*
clparse
* A simple command line parser for ableOS
*/
use std::collections::HashMap;
const CURRENT_PATH: &str = "file://test/";
#[derive(Debug)]
struct Command {
root_command: String,
arguments: HashMap<String, String>,
}
impl Command {
pub fn parse(command: String) -> Command {
let split_command = command.split("?");
let mut root = "".to_string();
let mut rootCount = 0;
let mut args = HashMap::<String, String>::new();
for subcommand in split_command {
match rootCount {
0 => root = subcommand.to_string(),
1 => {
for subarg in subcommand.split("&") {
let mut arg1 = "";
let mut arg2 = "";
let mut arg_count = 0;
for arg in subarg.split("=") {
if arg_count == 0 {
arg1 = arg;
} else {
arg2 = arg;
}
arg_count += 1;
}
args.insert(arg1.to_string(), arg2.to_string());
}
}
_ => {}
}
rootCount += 1;
}
Command {
root_command: root,
arguments: args,
}
}
}
fn main() {
let x = Command::parse("ls?path=".to_string());
let y = &x.arguments["path"];
parsePath(y.to_string());
}
fn parsePath(path: String) {
if path.len() == 0 {
println!("EMPTY PATH");
} else {
match &path[..1] {
"@" => println!("PARTIAL PATH: {}{}", CURRENT_PATH, path),
"/" => println!("FULL PATH: {}", path),
_ => {
println!("MALFORMED PATH: {}", path)
}
}
}
}

View file

@ -1,6 +1,7 @@
#![allow(clippy::empty_loop)] #![allow(clippy::empty_loop)]
use crate::experiments::absi::colorify; use crate::log::LOG_STATE;
use { use {
crate::{ crate::{
arch::{drivers::graphics::GraphicsBuffer, init, sloop}, arch::{drivers::graphics::GraphicsBuffer, init, sloop},
@ -31,23 +32,23 @@ lazy_static! {
#[no_mangle] #[no_mangle]
pub fn kernel_main() -> ! { pub fn kernel_main() -> ! {
init::init(); init::init();
LOG_STATE.lock().log_to_screen = false;
let mut a_thread = Thread::new(); let mut a_thread = Thread::new();
a_thread.new_task(test_fn); a_thread.new_task(test_fn);
a_thread.new_task(test_fn); a_thread.new_task(test_fn);
THREAD_LIST.lock().push(a_thread); THREAD_LIST.lock().push(a_thread);
GraphicsBuffer::draw(); GraphicsBuffer::draw();
GraphicsBuffer::hide_cursor(); GraphicsBuffer::hide_cursor();
GraphicsBuffer::show_cursor();
crate::wasm::evaluate(); crate::wasm::evaluate();
println!("{} v{}", RELEASE_TYPE, KERNEL_VERSION);
info!("{} v{}", RELEASE_TYPE, KERNEL_VERSION); info!("{} v{}", RELEASE_TYPE, KERNEL_VERSION);
colorify("$PINK$Hi$RED$ from$GREEN$ able"); println!("$PINK$Hi$RED$ from$GREEN$ able!$RESET$");
println!("$RED$hi$RESET$");
// stack_overflow(); // stack_overflow();
// crate::arch::shutdown(); // crate::arch::shutdown();

View file

@ -31,7 +31,6 @@ pub mod print;
pub mod log; pub mod log;
pub mod allocator; pub mod allocator;
pub mod dirty_hacks;
pub mod driver_traits; pub mod driver_traits;
pub mod experiments; pub mod experiments;
pub mod keyboard; pub mod keyboard;
@ -41,6 +40,5 @@ pub mod relib;
pub mod scheduler; pub mod scheduler;
pub mod wasm; pub mod wasm;
extern crate alloc; pub extern crate alloc;
pub extern crate externc_libm as libm; pub extern crate externc_libm as libm;

View file

@ -5,6 +5,9 @@ pub trait Log {
fn trace(val: &str); fn trace(val: &str);
} }
pub struct LogState { pub struct LogState {
pub log_to_serial: bool,
pub log_to_screen: bool,
pub debug: bool, pub debug: bool,
pub error: bool, pub error: bool,
pub info: bool, pub info: bool,
@ -12,36 +15,60 @@ pub struct LogState {
} }
lazy_static::lazy_static! { lazy_static::lazy_static! {
pub static ref LOG_STATE: LogState = LogState { pub static ref LOG_STATE: Mutex<LogState> = spin::Mutex::new(LogState {
log_to_screen: true,
log_to_serial: true,
debug: true, debug: true,
error: true, error: true,
info: true, info: true,
trace: true, trace: true,
}; });
} }
use crate::serial_print; use crate::serial_println;
use lliw::{Fg, Reset}; use lliw::{Fg, Reset};
use spin::Mutex;
pub struct ANSISerialLogger; pub struct ANSISerialLogger;
impl Log for ANSISerialLogger { impl Log for ANSISerialLogger {
fn debug(val: &str) { fn debug(val: &str) {
serial_print!("[{}Debug{}] {}\n", Fg::Blue, Reset, val); if LOG_STATE.lock().log_to_serial {
serial_println!("[{}Debug{}] {}", Fg::Blue, Reset, val);
}
if LOG_STATE.lock().log_to_screen {
println!("[$BLUE$Debug$RESET$] {}", val);
}
} }
fn error(val: &str) { fn error(val: &str) {
serial_print!("[{}Error{}] {}\n", Fg::Red, Reset, val); if LOG_STATE.lock().log_to_serial {
serial_println!("[{}Error{}] {}", Fg::Red, Reset, val);
}
if LOG_STATE.lock().log_to_screen {
println!("[$RED$Error$RESET$] {}", val);
}
} }
fn info(val: &str) { fn info(val: &str) {
serial_print!("[{}Info{}] {}\n", Fg::LightWhite, Reset, val); if LOG_STATE.lock().log_to_serial {
serial_println!("[{}Info{}] {}", Fg::LightWhite, Reset, val);
}
if LOG_STATE.lock().log_to_screen {
println!("[$LIGHTGRAY$Info$RESET$] {}", val);
}
} }
fn trace(val: &str) { fn trace(val: &str) {
serial_print!("[{}Trace{}] {}\n", Fg::Yellow, Reset, val); if LOG_STATE.lock().log_to_serial {
serial_println!("[{}Trace{}] {}", Fg::Yellow, Reset, val);
}
if LOG_STATE.lock().log_to_screen {
println!("[$YELLOW$Trace$RESET$] {}", val);
}
} }
} }
#[macro_export] #[macro_export]
macro_rules! debug { macro_rules! debug {
($($arg:tt)*) => ({ ($($arg:tt)*) => ({
if $crate::log::LOG_STATE.debug{ if $crate::log::LOG_STATE.lock().debug{
use crate::log::Log; use crate::log::Log;
let _ = &log::ANSISerialLogger::debug(&alloc::format!($($arg)*)); let _ = &log::ANSISerialLogger::debug(&alloc::format!($($arg)*));
@ -52,7 +79,7 @@ macro_rules! debug {
#[macro_export] #[macro_export]
macro_rules! error { macro_rules! error {
($($arg:tt)*) => ({ ($($arg:tt)*) => ({
if $crate::log::LOG_STATE.error{ if $crate::log::LOG_STATE.lock().error{
use crate::log::Log; use crate::log::Log;
crate::log::ANSISerialLogger::error(&alloc::format!($($arg)*)); crate::log::ANSISerialLogger::error(&alloc::format!($($arg)*));
} }
@ -62,7 +89,7 @@ macro_rules! error {
#[macro_export] #[macro_export]
macro_rules! info { macro_rules! info {
($($arg:tt)*) => ({ ($($arg:tt)*) => ({
if $crate::log::LOG_STATE.info{ if $crate::log::LOG_STATE.lock().info{
use crate::log::Log; use crate::log::Log;
crate::log::ANSISerialLogger::info(&alloc::format!($($arg)*)); crate::log::ANSISerialLogger::info(&alloc::format!($($arg)*));
} }
@ -72,7 +99,7 @@ macro_rules! info {
#[macro_export] #[macro_export]
macro_rules! trace { macro_rules! trace {
($($arg:tt)*) => ({ ($($arg:tt)*) => ({
if $crate::log::LOG_STATE.trace{ if $crate::log::LOG_STATE.lock().trace{
use crate::log::Log; use crate::log::Log;
crate::log::ANSISerialLogger::trace(&alloc::format!($($arg)*)); crate::log::ANSISerialLogger::trace(&alloc::format!($($arg)*));
} }

View file

@ -16,9 +16,9 @@ impl core::fmt::Write for Stdout {
} }
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
fn write_str(&mut self, s: &str) -> Result<(), Error> { fn write_str(&mut self, s: &str) -> Result<(), Error> {
use crate::kprint; use crate::experiments::absi::colorify;
// FIXME: causes issues colorify(s);
kprint!("{}", s); // kprint!("{}", s);
Ok(()) Ok(())
} }
#[cfg(target_arch = "riscv64")] #[cfg(target_arch = "riscv64")]

View file

@ -60,7 +60,7 @@ impl Thread {
Some(last_thread) => final_threadid = last_thread.id + 1, Some(last_thread) => final_threadid = last_thread.id + 1,
None => {} None => {}
} }
debug!("New thread with ThreadID: {}", final_threadid); debug!("New thread with $BLUE$ThreadID$RESET$: {}", final_threadid);
Self { Self {
id: final_threadid, id: final_threadid,
tasks: vec![], tasks: vec![],

View file

@ -72,7 +72,7 @@ impl ModuleImportResolver for HostFunctions {
} }
pub fn evaluate() { pub fn evaluate() {
let wasm_binary = include_bytes!("zig.wasm"); let wasm_binary = include_bytes!("rust.wasm");
// Load wasm binary and prepare it for instantiation. // Load wasm binary and prepare it for instantiation.
let module = wasmi::Module::from_buffer(&wasm_binary).expect("failed to load wasm"); let module = wasmi::Module::from_buffer(&wasm_binary).expect("failed to load wasm");