Browse Source

Merge pull request #6 from FenrirWolf/master

Multiple console support + Bringing RAII back
pull/10/head
Ronald Kinard 9 years ago
parent
commit
c2c030f726
  1. 2
      Cargo.toml
  2. 24
      src/console.rs
  3. 6
      src/lib.rs
  4. 2
      src/sdmc.rs
  5. 20
      src/services/apt.rs
  6. 19
      src/services/hid.rs

2
Cargo.toml

@ -5,7 +5,7 @@ description = "A safe wrapper around smealum's ctrulib." @@ -5,7 +5,7 @@ description = "A safe wrapper around smealum's ctrulib."
license = "https://en.wikipedia.org/wiki/Zlib_License"
links = "ctru"
name = "ctru-rs"
version = "0.3.0"
version = "0.4.0"
[dependencies.ctru-sys]
path = "ctru-sys"

24
src/console.rs

@ -1,17 +1,26 @@ @@ -1,17 +1,26 @@
use libctru::console::{consoleInit, consoleClear};
use libctru::gfx;
use libctru::console::*;
use libctru::libc;
use gfx::Screen;
use core::fmt::{self, Write};
use core::default::Default;
use core::marker::PhantomData;
use core::ptr;
pub struct Console {
pd: PhantomData<()>,
context: PrintConsole,
}
impl Console {
pub fn init(screen: Screen) -> Self {
let ret = unsafe { *(consoleInit(screen.into(), ptr::null_mut())) };
Console { context: ret }
}
pub fn set_window(&mut self, x: i32, y: i32, width: i32, height: i32) {
unsafe { consoleSetWindow(&mut self.context, x, y, width, height) }
}
pub fn clear(&mut self) {
unsafe { consoleClear() }
}
@ -19,15 +28,14 @@ impl Console { @@ -19,15 +28,14 @@ impl Console {
impl Default for Console {
fn default() -> Self {
unsafe {
consoleInit(gfx::gfxScreen_t::GFX_TOP, ptr::null_mut());
}
Console { pd: PhantomData }
let ret = unsafe { *(consoleInit(Screen::Top.into(), ptr::null_mut())) };
Console { context: ret }
}
}
impl Write for Console {
fn write_str(&mut self, s: &str) -> fmt::Result {
unsafe { consoleSelect(&mut self.context); }
let ret = unsafe { libc::write(libc::STDOUT_FILENO, s.as_ptr() as *const _, s.len()) };
if ret == s.len() as isize {
Ok(())

6
src/lib.rs

@ -1,12 +1,8 @@ @@ -1,12 +1,8 @@
#![feature(lang_items, alloc, collections, macro_reexport, allow_internal_unstable)]
#![feature(lang_items)]
#![no_std]
#![crate_type = "rlib"]
#![crate_name = "ctru"]
extern crate alloc;
#[macro_reexport(format, vec)]
extern crate collections;
extern crate ctru_sys as libctru;
pub mod console;

2
src/sdmc.rs

@ -7,7 +7,7 @@ pub struct Sdmc { @@ -7,7 +7,7 @@ pub struct Sdmc {
}
impl Sdmc {
pub fn new() -> Result<Self, i32> {
pub fn new() -> Result<Sdmc, i32> {
unsafe {
let r = sdmcInit();
if r < 0 {

20
src/services/apt.rs

@ -51,13 +51,21 @@ impl From<apt::APT_AppStatus> for AppStatus { @@ -51,13 +51,21 @@ impl From<apt::APT_AppStatus> for AppStatus {
}
pub struct Apt {
pd: PhantomData<()>,
pd: PhantomData<i32>
}
impl Apt {
pub fn new() -> Apt {
Apt { pd: PhantomData }
pub fn new() -> Result<Apt, i32> {
unsafe {
let r = apt::aptInit();
if r < 0 {
Err(r)
} else {
Ok(Apt { pd: PhantomData })
}
}
}
pub fn get_status(&self) -> AppStatus {
unsafe { apt::aptGetStatus().into() }
@ -88,3 +96,9 @@ impl Apt { @@ -88,3 +96,9 @@ impl Apt {
}
}
}
impl Drop for Apt {
fn drop(&mut self) {
unsafe { apt::aptExit() };
}
}

19
src/services/hid.rs

@ -74,12 +74,19 @@ impl From<PadKey> for u32 { @@ -74,12 +74,19 @@ impl From<PadKey> for u32 {
}
pub struct Hid {
pd: PhantomData<()>,
pd: PhantomData<i32>
}
impl Hid {
pub fn new() -> Hid {
Hid { pd: PhantomData }
pub fn new() -> Result<Hid, i32> {
unsafe {
let r = hid::hidInit();
if r < 0 {
Err(r)
} else {
Ok(Hid { pd: PhantomData })
}
}
}
pub fn scan_input(&mut self) {
@ -119,3 +126,9 @@ impl Hid { @@ -119,3 +126,9 @@ impl Hid {
}
}
}
impl Drop for Hid {
fn drop(&mut self) {
unsafe { hid::hidExit() };
}
}

Loading…
Cancel
Save