Browse Source

Add examples directory

pull/10/head
Fenrir 8 years ago
parent
commit
c159576e6d
  1. 15
      examples/.cargo/config
  2. 19
      examples/3ds.json
  3. 9
      examples/Cargo.toml
  4. 6
      examples/Xargo.toml
  5. 11
      examples/build.rs
  6. 42
      examples/src/bin/hello-both-screens.rs
  7. 55
      examples/src/bin/hello-world.rs

15
examples/.cargo/config

@ -0,0 +1,15 @@
[build]
target = "3ds"
[target.3ds]
linker = "arm-none-eabi-gcc"
rustflags = [
"-Clink-arg=-specs=3dsx.specs",
"-Clink-arg=-mfloat-abi=hard",
"-Clink-arg=-march=armv6k",
"-Clink-arg=-mtune=mpcore",
"-Clink-arg=-mfpu=vfp",
"-Clink-arg=-mtp=soft",
"-Clink-arg=-lsysbase",
"-Clink-arg=-lc"
]

19
examples/3ds.json

@ -0,0 +1,19 @@
{
"data-layout": "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64",
"llvm-target": "arm-none-eabihf",
"linker": "arm-none-eabi-gcc",
"ar": "arm-none-eabi-ar",
"target-endian": "little",
"target-pointer-width": "32",
"target-family": "unix",
"arch": "arm",
"os": "linux",
"env": "newlib",
"cpu": "mpcore",
"features": "+vfp2",
"relocation-model": "static",
"executables": true,
"exe-suffix": ".elf",
"panic-strategy": "abort",
"linker-flavor": "gcc"
}

9
examples/Cargo.toml

@ -0,0 +1,9 @@
[package]
name = "examples"
version = "0.1.0"
[dependencies]
ctru-rs = { path = "../ctru-rs" }
[profile.release]
lto = true

6
examples/Xargo.toml

@ -0,0 +1,6 @@
[dependencies.collections]
[dependencies.rand]
[dependencies.std]
path = "../ctr-std"
stage = 1

11
examples/build.rs

@ -0,0 +1,11 @@
use std::env;
fn main() {
let dkp_path = env::var("DEVKITPRO").unwrap();
println!("cargo:rustc-link-search=native={}/libctru/lib", dkp_path);
println!("cargo:rustc-link-lib=static={}", match env::var("PROFILE").unwrap().as_str() {
"debug" => "ctrud",
_ => "ctru",
});
}

42
examples/src/bin/hello-both-screens.rs

@ -0,0 +1,42 @@
extern crate ctru;
use ctru::gfx::{Gfx, Screen};
use ctru::console::Console;
use ctru::services::apt::Apt;
use ctru::services::hid::{Hid, PadKey};
fn main() {
// Initialize services
let apt = Apt::init().unwrap();
let hid = Hid::init().unwrap();
let mut gfx = Gfx::default();
// Start a console on the top screen
let mut top_screen = Console::init(Screen::Top);
// Start a console on the bottom screen.
// The most recently initialized console will be active by default
let mut bottom_screen = Console::init(Screen::Bottom);
// Let's print on the top screen first
top_screen.select();
println!("This is the top screen! We have a lot of space up here!");
// Now let's print something on the bottom screen
bottom_screen.select();
println!("\x1b[14;00HThis is the bottom screen.");
println!("There's not as much space down here, but that's okay.");
top_screen.select();
println!("\x1b[29;16HPress Start to exit");
while apt.main_loop() {
gfx.flush_buffers();
gfx.swap_buffers();
hid.scan_input();
if hid.key_down(PadKey::Start) {
break;
}
}
}

55
examples/src/bin/hello-world.rs

@ -0,0 +1,55 @@
extern crate ctru;
use ctru::gfx::Gfx;
use ctru::console::Console;
use ctru::services::apt::Apt;
use ctru::services::hid::{Hid, PadKey};
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.
// The APT service handles application management functions, such as
// syncing our main loop with the graphics hardware.
let apt = Apt::init().unwrap();
// 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.
let mut gfx = Gfx::default();
// Initialize a ctrulib console and direct standard output to it.
// Consoles can be initialized on both the top and bottom screens.
// The top screen is initialized by default.
let _console = Console::default();
// Now we can print to stdout!
println!("Hello, world!");
// 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");
// Main application loop.
while apt.main_loop() {
// Flushes and swaps the framebuffers when double-buffering
// is enabled
gfx.flush_buffers();
gfx.swap_buffers();
// Scan for user input.
hid.scan_input();
// Check if the user has pressed the given button on this frame.
// If so, break out of the loop.
if hid.key_down(PadKey::Start) {
break;
}
}
// All of our service handles will drop out of scope at this point,
// triggering the end of our application.
}
Loading…
Cancel
Save