From 46a615cae561ea5e341bfecdcb73c00b629121d8 Mon Sep 17 00:00:00 2001 From: Andrea Ciliberti Date: Fri, 21 Jan 2022 15:55:24 +0100 Subject: [PATCH] Substituted hello-world example --- ctru-rs/Cargo.toml | 3 ++ ctru-rs/examples/hello-world.rs | 64 ++++++++++++++------------------- 2 files changed, 29 insertions(+), 38 deletions(-) diff --git a/ctru-rs/Cargo.toml b/ctru-rs/Cargo.toml index f33e177..29323b4 100644 --- a/ctru-rs/Cargo.toml +++ b/ctru-rs/Cargo.toml @@ -18,3 +18,6 @@ pthread-3ds = { git = "https://github.com/Meziu/pthread-3ds.git" } libc = { git = "https://github.com/Meziu/libc.git" } bitflags = "1.0.0" widestring = "0.2.2" + +[dev-dependencies] +ferris-says = "0.2.1" diff --git a/ctru-rs/examples/hello-world.rs b/ctru-rs/examples/hello-world.rs index ccebef7..bb653dd 100644 --- a/ctru-rs/examples/hello-world.rs +++ b/ctru-rs/examples/hello-world.rs @@ -1,56 +1,44 @@ +extern crate ctru; use ctru::console::Console; -use ctru::gfx::{Gfx, Screen}; +use ctru::gfx::Gfx; use ctru::services::apt::Apt; use ctru::services::hid::{Hid, KeyPad}; -fn main() { - // Initialize ctrulib service handles. - // Service handles are internally reference-counted. When all instances of a - // service handle go out of scope, the service will be closed. - ctru::init(); +extern crate ferris_says; - // The APT service handles application management functions, such as enabling sleep - // mode and jumping to the home menu or to other applications - let apt = Apt::init().unwrap(); +use std::io::BufWriter; - // The HID service handles button and touch screen inputs. - let hid = Hid::init().unwrap(); - - // The GFX service manages the framebuffers for the top and bottom screens. +fn main() { + ctru::init(); let gfx = Gfx::default(); + let hid = Hid::init().expect("Couldn't obtain HID controller"); + let apt = Apt::init().expect("Couldn't obtain APT controller"); + let _console = Console::init(gfx.top_screen.borrow_mut()); - // Initialize a ctrulib console and direct standard output to it. - // Consoles can be initialized on both the top and bottom screens. - let _console = Console::init(&gfx, Screen::Top); + let out = b"Hello fellow Rustaceans, I'm on the Nintendo 3DS!"; + let width = 24; - // Now we can print to stdout! - println!("Hello, world!"); + let mut writer = BufWriter::new(Vec::new()); + ferris_says::say(out, width, &mut writer).unwrap(); - // We can use escape sequences to move the cursor around the terminal. - // The following text will be moved down 29 rows and right 16 characters - // before printing begins. - println!("\x1b[29;16HPress Start to exit"); + println!( + "\x1b[0;0H{}", + String::from_utf8_lossy(&writer.into_inner().unwrap()) + ); - // Main application loop. + // Main loop while apt.main_loop() { - // Flushes and swaps the framebuffers when double-buffering - // is enabled - gfx.flush_buffers(); - gfx.swap_buffers(); - - // Wait for the next frame to begin - gfx.wait_for_vblank(); - - // Scan for user input. + //Scan all the inputs. This should be done once for each frame hid.scan_input(); - // Check if the user has pressed the given button on this frame. - // If so, break out of the loop. if hid.keys_down().contains(KeyPad::KEY_START) { break; } - } + // Flush and swap framebuffers + gfx.flush_buffers(); + gfx.swap_buffers(); - // All of our service handles will drop out of scope at this point, - // triggering the end of our application. -} + //Wait for VBlank + gfx.wait_for_vblank(); + } +} \ No newline at end of file