extern crate getopts;
use getopts::Options;
use std::env;
use xtrakcad_parser::Layout;
fn print_usage(program: &str, opts: Options) {
let brief = format!("Usage: {} FILE [options]", program);
print!("{}", opts.usage(&brief));
}
fn main() {
let args: Vec<String> = env::args().collect();
let program = args[0].clone();
let mut opts = Options::new();
opts.optflag("h", "help", "print this help menu");
let matches = match opts.parse(&args[1..]) {
Ok(m) => { m },
Err(f) => { panic!("{}", f.to_string()); },
};
if matches.opt_present("h") {
print_usage(&program, opts);
return ();
};
let layoutfile = if !matches.free.is_empty() {
matches.free[0].clone()
} else {
print_usage(&program, opts);
panic!("Missing layout file!");
};
let layout = match Layout::new(layoutfile) {
Ok(l) => { l },
Err(message) => { panic!("{}",message.to_string()); },
};
println!("{}",layout);
for (index, layer) in layout.LayerIter() {
println!("Layer # {}: {}",*index,*layer);
}
for (index, structure) in layout.StructureIter() {
println!("Structure # {}: {}",*index,*structure);
}
for (index, drawing) in layout.DrawingIter() {
println!("Drawing # {}: {}",*index,*drawing);
}
for (index, bzrline) in layout.BZRLineIter() {
println!("BZRLine # {}: {}",*index,*bzrline);
}
for (index, cornu) in layout.CornuIter() {
println!("Cornu # {}: {}",*index,*cornu);
}
for (index, curve) in layout.CurveIter() {
println!("Curve # {}: {}",*index,*curve);
}
for (index, bezier) in layout.BezierIter() {
println!("Bezier # {}: {}",*index,*bezier);
}
for (index, straight) in layout.StraightIter() {
println!("Straight # {}: {}",*index,*straight);
}
for (index, turnout) in layout.TurnoutIter() {
println!("Turnout # {}: {}",*index,*turnout);
}
for (index, turntable) in layout.TurntableIter() {
println!("Turntable # {}: {}",*index,*turntable);
}
for (index, joint) in layout.JointIter() {
println!("Joint # {}: {}",*index,*joint);
}
for (index, car) in layout.CarIter() {
println!("Car # {}: {}",*index,*car);
}
for (index, note) in layout.NoteIter() {
println!("Note # {}: {}",*index,*note);
}
for (index, textitem) in layout.TextItemIter() {
println!("TextItem # {}: {}",*index,*textitem);
}
for (index, block) in layout.BlockIter() {
println!("Block # {}: {}",*index,*block);
}
for (index, switchmotor) in layout.SwitchMotorIter() {
println!("SwitchMotor # {}: {}",*index,*switchmotor);
}
for (index, signal) in layout.SignalIter() {
println!("Signal # {}: {}",*index,*signal);
}
for (index, sensor) in layout.SensorIter() {
println!("Sensor # {}: {}",*index,*sensor);
}
for (index, control) in layout.ControlIter() {
println!("Control # {}: {}",*index,*control);
}
}