Skip to content

Commit 2280901

Browse files
authored
Merge pull request #3 from emig/update-1.9.0
feat: update to rust 1.9.0
2 parents 5b6ec8d + fddec6b commit 2280901

File tree

8 files changed

+256
-295
lines changed

8 files changed

+256
-295
lines changed

Cargo.lock

Lines changed: 18 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ name = "sl"
1212

1313
name = "sl"
1414

15+
[dependencies]
16+
17+
getopts = "0.2.14"
18+
libc = "0.2"
19+
1520
[dependencies.ncurses]
1621

1722
git = "https://github.com/jeaye/ncurses-rs.git"

src/bin/sl.rs

Lines changed: 95 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -3,119 +3,119 @@ extern crate libc;
33
extern crate ncurses;
44
extern crate getopts;
55

6-
use getopts::{optflag,getopts};
7-
use std::os;
6+
use getopts::Options;
7+
use std::env;
88

9-
use sl::{Train};
9+
use sl::Train;
1010
use sl::d51::SL;
1111
use sl::c51::C51;
1212
use sl::logo::Logo;
1313

14-
trait Render : Train + Copy {
15-
fn render(&self, x: i32) {
16-
let mut len = 0 as i32;
17-
let y = ncurses::LINES / 2;
18-
let body_iter = self.body().iter();
19-
let wheelset_iter = self.wheelset(x as uint).iter();
20-
let iter = body_iter.chain(wheelset_iter);
21-
let (_, hint) = iter.size_hint();
22-
let height = match hint {
23-
Some(s) => s,
24-
None => panic!("this really shouldn't happen")
25-
};
26-
let offset = (height / 2) as i32;
27-
for (index, line) in iter.rev().enumerate() {
28-
if line.len() as i32 > len {
29-
len = line.len() as i32;
30-
}
31-
self.render_line((y + offset) - index as i32, x, *line);
32-
}
33-
if let Some(tender) = self.tender() {
34-
let mut new_len = 0 as i32;
35-
for (index, line) in tender.iter().rev().enumerate() {
36-
if len + line.len() as i32 > new_len {
37-
new_len = len + line.len() as i32;
14+
trait Render: Train + Copy {
15+
fn render(&self, x: i32) {
16+
let mut len = 0 as i32;
17+
let y = ncurses::LINES / 2;
18+
let body_iter = self.body().iter();
19+
let wheelset_iter = self.wheelset(x as usize).iter();
20+
let iter = body_iter.chain(wheelset_iter);
21+
let (_, hint) = iter.size_hint();
22+
let height = match hint {
23+
Some(s) => s,
24+
None => panic!("this really shouldn't happen"),
25+
};
26+
let offset = (height / 2) as i32;
27+
for (index, line) in iter.rev().enumerate() {
28+
if line.len() as i32 > len {
29+
len = line.len() as i32;
30+
}
31+
self.render_line((y + offset) - index as i32, x, *line);
3832
}
39-
self.render_line((y + offset) - index as i32, x + len, *line);
40-
}
41-
len = new_len;
42-
}
43-
if let Some(wagon) = self.wagon() {
44-
for _ in range(0,self.wagons()) {
45-
let mut new_len = 0 as i32;
46-
for (index, line) in wagon.iter().rev().enumerate() {
47-
if len + line.len() as i32 > new_len {
48-
new_len = len + line.len() as i32;
49-
}
50-
self.render_line((y + offset) - index as i32, x + len, *line);
33+
if let Some(tender) = self.tender() {
34+
let mut new_len = 0 as i32;
35+
for (index, line) in tender.iter().rev().enumerate() {
36+
if len + line.len() as i32 > new_len {
37+
new_len = len + line.len() as i32;
38+
}
39+
self.render_line((y + offset) - index as i32, x + len, *line);
40+
}
41+
len = new_len;
42+
}
43+
if let Some(wagon) = self.wagon() {
44+
for _ in 0..self.wagons() {
45+
let mut new_len = 0 as i32;
46+
for (index, line) in wagon.iter().rev().enumerate() {
47+
if len + line.len() as i32 > new_len {
48+
new_len = len + line.len() as i32;
49+
}
50+
self.render_line((y + offset) - index as i32, x + len, *line);
51+
}
52+
len = new_len;
53+
}
5154
}
52-
len = new_len;
53-
}
5455
}
55-
}
5656

57-
fn render_line(&self, y: i32, x: i32, line: &str) {
58-
let paint_len = (ncurses::COLS - x) as uint;
59-
if paint_len < line.len() {
60-
ncurses::mvaddstr(y, x, &line[0..paint_len]);
61-
} else if x < 0 {
62-
if -x < line.len() as i32 {
63-
ncurses::mvaddstr(y, 0, &line[-x as uint..line.len()]);
64-
}
65-
} else {
66-
ncurses::mvaddstr(y, x, line);
57+
fn render_line(&self, y: i32, x: i32, line: &str) {
58+
let paint_len = (ncurses::COLS - x) as usize;
59+
if paint_len < line.len() {
60+
ncurses::mvaddstr(y, x, &line[0..paint_len]);
61+
} else if x < 0 {
62+
if -x < line.len() as i32 {
63+
ncurses::mvaddstr(y, 0, &line[-x as usize..line.len()]);
64+
}
65+
} else {
66+
ncurses::mvaddstr(y, x, line);
67+
}
6768
}
68-
}
6969
}
7070

71-
impl Render for SL { }
72-
impl Render for C51 { }
73-
impl Render for Logo { }
71+
impl Render for SL {}
72+
impl Render for C51 {}
73+
impl Render for Logo {}
7474

7575
fn main() {
76-
use libc::funcs::posix01::signal::signal;
77-
use libc::funcs::posix88::unistd::usleep;
78-
use libc::SIGINT;
79-
use libc::consts::os::posix01::SIG_IGN;
80-
81-
let args: Vec<String> = os::args();
76+
use libc::signal;
77+
use libc::usleep;
78+
use libc::SIGINT;
79+
use libc::SIG_IGN;
8280

83-
let opts = [
84-
optflag("l", "", "logo"),
85-
optflag("c", "", "C51"),
86-
optflag("a", "", "reserved for future use"),
87-
optflag("f", "", "reserved for future use"),
88-
];
81+
let args: Vec<String> = env::args().collect();
8982

90-
let matches = match getopts(args.tail(), &opts) {
91-
Ok(m) => { m }
92-
Err(f) => { panic!(f.to_string()) }
93-
};
94-
95-
let train: Box<Render> = if matches.opt_present("l") {
96-
Box::new(Logo)
97-
} else if matches.opt_present("c") {
98-
Box::new(C51)
99-
} else {
100-
Box::new(SL)
101-
};
83+
let mut opts = Options::new();
84+
opts.optflag("l", "", "logo");
85+
opts.optflag("c", "", "C51");
86+
opts.optflag("a", "", "reserved for future use");
87+
opts.optflag("f", "", "reserved for future use");
10288

89+
let matches = match opts.parse(&args[1..]) {
90+
Ok(m) => m,
91+
Err(f) => panic!(f.to_string()),
92+
};
10393

104-
ncurses::initscr();
105-
unsafe { signal(SIGINT, SIG_IGN); }
94+
ncurses::initscr();
95+
unsafe {
96+
signal(SIGINT, SIG_IGN);
97+
}
10698

107-
ncurses::noecho();
108-
ncurses::curs_set(ncurses::CURSOR_VISIBILITY::CURSOR_INVISIBLE);
109-
ncurses::nodelay(ncurses::stdscr, true);
110-
ncurses::leaveok(ncurses::stdscr, true);
111-
ncurses::scrollok(ncurses::stdscr, false);
99+
ncurses::noecho();
100+
ncurses::curs_set(ncurses::CURSOR_VISIBILITY::CURSOR_INVISIBLE);
101+
ncurses::nodelay(ncurses::stdscr, true);
102+
ncurses::leaveok(ncurses::stdscr, true);
103+
ncurses::scrollok(ncurses::stdscr, false);
112104

113-
for x in range(-85, ncurses::COLS).rev() {
114-
ncurses::clear();
115-
train.render(x);
116-
ncurses::getch();
117-
ncurses::refresh();
118-
unsafe { usleep(40000); }
119-
}
120-
ncurses::endwin();
105+
for x in (-85..ncurses::COLS).rev() {
106+
ncurses::clear();
107+
if matches.opt_present("l") {
108+
Logo.render(x)
109+
} else if matches.opt_present("c") {
110+
C51.render(x)
111+
} else {
112+
SL.render(x)
113+
};
114+
ncurses::getch();
115+
ncurses::refresh();
116+
unsafe {
117+
usleep(40000);
118+
}
119+
}
120+
ncurses::endwin();
121121
}

src/c51.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
use super::Train;
22
use super::data::{C51WHL, C51BODY, COAL};
33

4-
#[derive(Copy)]
4+
#[derive(Copy, Clone)]
55
pub struct C51;
66

77
impl Train for C51 {
8-
fn body(&self) -> &'static [&'static str] {
9-
&C51BODY
10-
}
8+
fn body(&self) -> &'static [&'static str] {
9+
&C51BODY
10+
}
1111

12-
fn wheelset(&self, x: uint) -> &'static [&'static str] {
13-
&C51WHL[x % 6]
14-
}
12+
fn wheelset(&self, x: usize) -> &'static [&'static str] {
13+
&C51WHL[(x % 6)]
14+
}
1515

16-
fn tender(&self) -> Option<&'static [&'static str]> {
17-
Some(COAL.as_slice())
18-
}
16+
fn tender(&self) -> Option<&'static [&'static str]> {
17+
Some(&COAL)
18+
}
1919
}

src/d51.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
use super::Train;
22
use super::data::{D51BODY, D51WHL, COAL};
33

4-
#[derive(Copy)]
4+
#[derive(Copy, Clone)]
55
pub struct SL;
66

77
impl Train for SL {
8-
fn body(&self) -> &'static [&'static str] {
9-
&D51BODY
10-
}
8+
fn body(&self) -> &'static [&'static str] {
9+
&D51BODY
10+
}
1111

12-
fn wheelset(&self, x: uint) -> &'static [&'static str] {
13-
&D51WHL[x % 6]
14-
}
12+
fn wheelset(&self, x: usize) -> &'static [&'static str] {
13+
&D51WHL[(x % 6)]
14+
}
1515

16-
fn tender(&self) -> Option<&'static [&'static str]> {
17-
Some(COAL.as_slice())
18-
}
16+
fn tender(&self) -> Option<&'static [&'static str]> {
17+
Some(&COAL)
18+
}
1919
}
20-

0 commit comments

Comments
 (0)