persistant scope

master
Able 2022-02-19 07:17:44 -06:00
parent 5910abb4f7
commit e591b0b1f2
Signed by untrusted user: able
GPG Key ID: D164AF5F5700BE51
4 changed files with 47 additions and 12 deletions

View File

@ -12,12 +12,6 @@ run-args = [
"-cpu",
"Broadwell-v3",
"-serial",
"stdio",
"-smp",

View File

@ -7,7 +7,7 @@ lazy_static! {
}
pub struct KernelInternalState {
hostname: String,
pub hostname: String,
should_shutdown: bool,
}

View File

@ -22,7 +22,7 @@ impl log::Log for SimpleLogger {
let color;
let time = TICK.load(Ordering::Relaxed) as f64;
let time_float = time / TIMER_INTERRUPT_HERTZ;
let time_float = time;
match record.level() {
log::Level::Error => color = (Fg::Red, "$RED$"),

View File

@ -94,14 +94,29 @@ impl ProcessMessage {
*/
pub fn rhai_shell() {
let engine = rhai::Engine::new();
let mut engine = rhai::Engine::new();
engine.on_print(|x| println!("{}", x));
engine.on_debug(|x, src, pos| {
let src = src.unwrap_or("unknown");
println!("DEBUG: {} at {:?}: {}", src, pos, x);
debug!("{} at {:?}: {}", src, pos, x);
});
engine.register_fn("afetch", afetch);
engine.register_fn("set_hostname", set_hostname);
engine.register_fn("shutdown", shutdown);
let mut scope = rhai::Scope::new();
let mut buf = String::new();
print!("> ");
loop {
match x86_64::instructions::interrupts::without_interrupts(|| KEYBUFF.lock().pop()) {
Some('\n') => {
match engine.eval::<rhai::Dynamic>(&buf) {
match engine.eval_with_scope::<rhai::Dynamic>(&mut scope, &buf) {
Ok(o) => println!("{o}"),
Err(e) => println!("Eval error: {e}"),
};
@ -123,6 +138,32 @@ lazy_static::lazy_static!(
;
);
use alloc::string::String;
use alloc::string::{String, ToString};
use x86_64::instructions::interrupts::{disable, enable};
use crate::arch::sloop;
use crate::{
arch::{shutdown, sloop},
kmain::{tick, TICK},
systeminfo::{KERNEL_VERSION, RELEASE_TYPE},
KERNEL_STATE,
};
pub fn afetch() {
let kstate = KERNEL_STATE.lock();
use core::sync::atomic::Ordering::*;
disable();
let tick_time = TICK.load(Relaxed);
enable();
println!("OS: AbleOS");
println!("Host: {}", kstate.hostname);
println!("Kernel: AKern-{}-v{}", RELEASE_TYPE, KERNEL_VERSION);
println!("Uptime: {}", tick_time);
drop(kstate);
}
pub fn set_hostname(name: String) {
let mut kstate = KERNEL_STATE.lock();
kstate.hostname = name;
}