diff --git a/Cargo.lock b/Cargo.lock index 8ce034f..7fdc641 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,6 +9,7 @@ dependencies = [ "ansi_rgb", "async-trait", "bootloader", + "cmos-rtc", "conquer-once", "crossbeam-queue", "futures-util", @@ -47,9 +48,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.62" +version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "689894c2db1ea643a50834b999abf1c110887402542955ff5451dab8f861f9ed" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", @@ -64,9 +65,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "bit_field" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" [[package]] name = "bitflags" @@ -74,6 +75,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + [[package]] name = "bootloader" version = "0.9.23" @@ -82,9 +89,9 @@ checksum = "b6e02311b16c9819e7c72866d379cdd3026c3b7b25c1edf161f548f8e887e7ff" [[package]] name = "bytemuck" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "cfg-if" @@ -98,6 +105,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cmos-rtc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd109d8ba108f7420ce21f75e2278589ef91ef2ebd5641032bec8ffd5b8b572" +dependencies = [ + "x86_64", +] + [[package]] name = "conquer-once" version = "0.3.2" @@ -136,21 +152,21 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-core", "futures-task", @@ -178,18 +194,18 @@ dependencies = [ [[package]] name = "linked_list_allocator" -version = "0.10.4" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322f259d225fbae43a1b053b2dc6a5968a6bdf8b205f5de684dab485b95030e" +checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" dependencies = [ "spinning_top", ] [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -203,9 +219,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "once_cell" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "pc-keyboard" @@ -215,18 +231,18 @@ checksum = "5c6f2d937e3b8d63449b01401e2bae4041bc9dd1129c2e3e0d239407cf6635ac" [[package]] name = "pic8259" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ec21f514e2e16e94649f1d041ca4a7069b512c037ac156360652a775e6229d" +checksum = "cb844b5b01db1e0b17938685738f113bfc903846f18932b378bc0eabfa40e194" dependencies = [ "x86_64", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -236,18 +252,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "proc-macro2" -version = "1.0.50" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.23" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -269,24 +285,24 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "rgb" -version = "0.8.34" +version = "0.8.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3603b7d71ca82644f79b5a06d1220e9a58ede60bd32255f698cb1af8838b8db3" +checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" dependencies = [ "bytemuck", ] [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "spin" @@ -296,18 +312,18 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spinning_top" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75adad84ee84b521fb2cca2d4fd0f1dab1d8d026bda3c5bea4ca63b5f9f9293c" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" dependencies = [ "lock_api", ] [[package]] name = "syn" -version = "1.0.107" +version = "2.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" dependencies = [ "proc-macro2", "quote", @@ -316,20 +332,20 @@ dependencies = [ [[package]] name = "uart_16550" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b074eb9300ad949edd74c529c0e8d451625af71bb948e6b65fe69f72dc1363d9" +checksum = "614ff2a87880d4bd4374722268598a970bbad05ced8bf630439417347254ab2e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "rustversion", "x86_64", ] [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "version_check" @@ -351,12 +367,12 @@ checksum = "442887c63f2c839b346c192d047a7c87e73d0689c9157b00b53dcc27dd5ea793" [[package]] name = "x86_64" -version = "0.14.10" +version = "0.14.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "100555a863c0092238c2e0e814c1096c1e5cf066a309c696a87e907b5f8c5d69" +checksum = "3b835097a84e4457323331ec5d6eb23d096066cbfb215d54096dcb4b2e85f500" dependencies = [ "bit_field", - "bitflags", + "bitflags 2.4.0", "rustversion", "volatile 0.4.6", ] diff --git a/Cargo.toml b/Cargo.toml index 4277f3a..ac19b30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,11 +23,11 @@ pic8259 = "0.10.1" pc-keyboard = "0.5.0" linked_list_allocator = "0.10.2" async-trait = "0.1.62" -# fatfs = { version = "0.3", default-features = false, features = ["core_io"] } ansi_rgb = "0.2.0" rgb = "0.8" rand = { version = "0.8.5", default-features = false, features = ["small_rng"]} hashbrown = "0.13.2" +cmos-rtc = "0.1.2" [dependencies.lazy_static] version = "1.0" diff --git a/src/system/kernel/mod.rs b/src/system/kernel/mod.rs index 9949c33..ff0ae35 100644 --- a/src/system/kernel/mod.rs +++ b/src/system/kernel/mod.rs @@ -5,4 +5,5 @@ pub mod interrupts; pub mod memory; pub mod render; pub mod serial; -pub mod tasks; \ No newline at end of file +pub mod tasks; +pub mod sysinit; \ No newline at end of file diff --git a/src/system/kernel/sysinit.rs b/src/system/kernel/sysinit.rs index fa32c58..68e2b07 100644 --- a/src/system/kernel/sysinit.rs +++ b/src/system/kernel/sysinit.rs @@ -1,3 +1,4 @@ -fn init() -> Result<(), ()> { +use crate::println; +pub fn init() -> Result<(), ()> { Ok(()) } \ No newline at end of file diff --git a/src/system/mod.rs b/src/system/mod.rs index d8f9d4b..0380115 100644 --- a/src/system/mod.rs +++ b/src/system/mod.rs @@ -6,4 +6,5 @@ pub fn init() { kernel::interrupts::init_idt(); unsafe { kernel::interrupts::PICS.lock().initialize() }; x86_64::instructions::interrupts::enable(); + kernel::sysinit::init().unwrap(); } \ No newline at end of file diff --git a/src/system/std/random.rs b/src/system/std/random.rs index d292e71..e85ef80 100644 --- a/src/system/std/random.rs +++ b/src/system/std/random.rs @@ -3,14 +3,16 @@ use alloc::{string::{String, ToString}, vec::Vec}; use rand::{Rng, SeedableRng, rngs::SmallRng, RngCore}; use spin::Mutex; use lazy_static::lazy_static; +use cmos_rtc::{ReadRTC, Time}; lazy_static! { - pub static ref RANDOM: Mutex = Mutex::new(SmallRng::seed_from_u64(1)); + pub static ref RANDOM: Mutex = Mutex::new(SmallRng::seed_from_u64({ + let mut cmos = ReadRTC::new(0x00, 0x00); + let time: Time = cmos.read(); + time.second as u64 + time.minute as u64 + time.hour as u64 + time.day as u64 + time.month as u64 + time.year as u64 + })); } - - - pub struct Random; impl Random { @@ -28,8 +30,8 @@ impl Random { } } - pub fn selection(ls: Vec) -> T { + pub fn selection(ls: &Vec) -> &T { let range = Random::int(0, ls.len() - 1); - ls[range as usize].clone() + &ls[range as usize] } } \ No newline at end of file diff --git a/src/user/bin/shell.rs b/src/user/bin/shell.rs index d3258df..3fa025d 100644 --- a/src/user/bin/shell.rs +++ b/src/user/bin/shell.rs @@ -123,17 +123,21 @@ async fn exec() -> Result<(), Error> { } "random" => { use crate::std::random::Random; - let vec = Vec::from(["a", "b", "c", "d", "e", "f"]); - let sel = Random::selection(vec); - println!("{}", sel); + let vec = Vec::from(["is", "is not", "is absolutely"]); + let vec2 = Vec::from(["simp", "gigachad", "genius", "bozo", "Non simp"]); + let sel = *Random::selection(&vec); + let sel2 = *Random::selection(&vec2); + println!("panic attack {} a {}", sel, sel2); } "filesystem" => { use crate::std::io; io::mkfs(); } "test_features" => { - use crate::user::lib::libgui; - libgui::libgui_core::test_elements(); + use crate::std::random::Random; + println!("{}", Random::int(0, 10)); + // use crate::user::lib::libgui; + // libgui::libgui_core::test_elements(); } _ => { return Err(Error::UnknownCommand( diff --git a/src/user/lib/libgui/libgui_core.rs b/src/user/lib/libgui/libgui_core.rs index 023ecd5..896192c 100644 --- a/src/user/lib/libgui/libgui_core.rs +++ b/src/user/lib/libgui/libgui_core.rs @@ -268,6 +268,11 @@ this is gonna be the best game ever", true, ))); + let mut bar = IndicatorBar::new(Pos::new(7, 7), 12); + bar.set_value(70); + bar.set_text(String::from("ayo")); + + containers[0].elements.push(Box::new(bar)); render_frame(containers); return;