intcmp(1): add comments
This commit is contained in:
parent
2f2270322a
commit
27ff64dffa
@ -34,45 +34,45 @@ fn usage(s: &str) -> ExitCode {
|
|||||||
|
|
||||||
fn main() -> ExitCode {
|
fn main() -> ExitCode {
|
||||||
let argv = args().collect::<Vec<String>>();
|
let argv = args().collect::<Vec<String>>();
|
||||||
let mut can_eq = false;
|
let mut e = false; /* args can be == */
|
||||||
let mut can_gt = false;
|
let mut g = false; /* args can be > */
|
||||||
let mut can_lt = false;
|
let mut l = false; /* args can be < */
|
||||||
let mut optind = 0;
|
let mut optind = 0;
|
||||||
|
|
||||||
if argv.len() < 3 { return usage(&argv[0]); }
|
if argv.len() < 3 { return usage(&argv[0]); }
|
||||||
|
|
||||||
while let Some(opt) = argv.getopt("egl") {
|
while let Some(opt) = argv.getopt("egl") {
|
||||||
match opt.opt() {
|
match opt.opt() {
|
||||||
Ok("e") => can_eq = true,
|
Ok("e") => e = true,
|
||||||
Ok("g") => can_gt = true,
|
Ok("g") => g = true,
|
||||||
Ok("l") => can_lt = true,
|
Ok("l") => l = true,
|
||||||
_ => { return usage(&argv[0]); },
|
_ => { return usage(&argv[0]); },
|
||||||
}
|
}
|
||||||
optind = opt.ind();
|
optind = opt.ind();
|
||||||
}
|
}
|
||||||
|
|
||||||
if argv.len() - optind < 2 /* ref cmp */ { return usage(&argv[0]); }
|
if argv.len() - optind < 2 /* see usage */ { return usage(&argv[0]); }
|
||||||
|
|
||||||
let mut reference: Option<usize> = None;
|
let mut prev: Option<usize> = None; /* no previous operand */
|
||||||
let mut cmpn: usize;
|
let mut currn: usize;
|
||||||
|
|
||||||
for arg in argv.iter().skip(optind) {
|
for arg in argv.iter().skip(optind) { /* iterate operands */
|
||||||
match arg.parse::<usize>() {
|
match arg.parse::<usize>() { /* parse current operand */
|
||||||
Ok(n) => cmpn = n,
|
Ok(n) => currn = n,
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("{}: {}: Invalid integer", &argv[0], arg);
|
eprintln!("{}: {}: Invalid integer", &argv[0], arg);
|
||||||
return ExitCode::from(EX_USAGE as u8);
|
return ExitCode::from(EX_USAGE as u8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(refn) = reference {
|
if let Some(prevn) = prev { /* if there was a previous opr., test */
|
||||||
if (!can_eq && refn == cmpn)
|
if (!e && prevn == currn)
|
||||||
|| (!can_gt && refn > cmpn)
|
|| (!g && prevn > currn)
|
||||||
|| (!can_lt && refn < cmpn)
|
|| (!l && prevn < currn)
|
||||||
{ return ExitCode::FAILURE; }
|
{ return ExitCode::FAILURE; }
|
||||||
}
|
}
|
||||||
|
|
||||||
reference = Some(cmpn);
|
prev = Some(currn); /* there is a previous operand */
|
||||||
}
|
}
|
||||||
|
|
||||||
ExitCode::SUCCESS
|
ExitCode::SUCCESS
|
||||||
|
Loading…
Reference in New Issue
Block a user