Makefile, rpn(1): add sysexits dependency
This commit is contained in:
		
							parent
							
								
									32537895cb
								
							
						
					
					
						commit
						4870f4679c
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@ -83,7 +83,7 @@ build/bin/intcmp: src/intcmp.c build
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.PHONY: rpn
 | 
					.PHONY: rpn
 | 
				
			||||||
rpn: build/bin/rpn
 | 
					rpn: build/bin/rpn
 | 
				
			||||||
build/bin/rpn: src/rpn.rs build
 | 
					build/bin/rpn: src/rpn.rs build sysexits
 | 
				
			||||||
	$(RUSTC) $(RUSTFLAGS) -o $@ src/rpn.rs
 | 
						$(RUSTC) $(RUSTFLAGS) -o $@ src/rpn.rs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.PHONY: scrut
 | 
					.PHONY: scrut
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										21
									
								
								src/rpn.rs
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								src/rpn.rs
									
									
									
									
									
								
							@ -52,6 +52,10 @@ use std::{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use CalcType::{ Add, Divide, Multiply, Power, Subtract, Val };
 | 
					use CalcType::{ Add, Divide, Multiply, Power, Subtract, Val };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern crate sysexits;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use sysexits::EX_DATAERR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone, Copy, PartialEq, PartialOrd, Debug)]
 | 
					#[derive(Clone, Copy, PartialEq, PartialOrd, Debug)]
 | 
				
			||||||
/// enum CalcType is a type containing operations used in the calculator.
 | 
					/// enum CalcType is a type containing operations used in the calculator.
 | 
				
			||||||
enum CalcType {
 | 
					enum CalcType {
 | 
				
			||||||
@ -156,7 +160,8 @@ fn eval(
 | 
				
			|||||||
			Val(_) => {
 | 
								Val(_) => {
 | 
				
			||||||
				return Err(
 | 
									return Err(
 | 
				
			||||||
					EvaluationError {
 | 
										EvaluationError {
 | 
				
			||||||
						message: "Unexpected value in the operator stack.".to_string()
 | 
											message: "Unexpected value in the operator stack."
 | 
				
			||||||
 | 
												.to_string()
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
@ -173,21 +178,25 @@ fn round_precise(value: &f64, precision: usize) -> f64 {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
fn main() -> ExitCode {
 | 
					fn main() -> ExitCode {
 | 
				
			||||||
	let argv = args().collect::<Vec<String>>();
 | 
						let argv = args().collect::<Vec<String>>();
 | 
				
			||||||
	let stack = VecDeque::new();
 | 
						let mut stack = VecDeque::new();
 | 
				
			||||||
	let mut buf = String::new();
 | 
						let mut buf = String::new();
 | 
				
			||||||
	let precision = (-f64::EPSILON.log10() * 0.999).ceil() as usize;
 | 
						let precision = (-f64::EPSILON.log10() * 0.999).ceil() as usize;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if argv.get(1).is_none() {
 | 
						if argv.get(1).is_none() {
 | 
				
			||||||
		while let Ok(_) = stdin().read_line(&mut buf) {
 | 
							while let Ok(_) = stdin().read_line(&mut buf) {
 | 
				
			||||||
			match eval(&buf.trim(), stack.clone()) {
 | 
								match eval(&buf.trim(), stack) {
 | 
				
			||||||
				Ok(val) => {
 | 
									Ok(val) => {
 | 
				
			||||||
					let precise = round_precise(val.iter().last().unwrap(), precision);
 | 
										stack = val.clone();
 | 
				
			||||||
 | 
										let precise = round_precise(
 | 
				
			||||||
 | 
											stack.iter().last().unwrap(),
 | 
				
			||||||
 | 
											precision,
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
					println!("{}", precise.to_string());
 | 
										println!("{}", precise.to_string());
 | 
				
			||||||
					buf.clear();
 | 
										buf.clear();
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				Err(err) => {
 | 
									Err(err) => {
 | 
				
			||||||
					eprintln!("{}: {}", argv[0], err.message);
 | 
										eprintln!("{}: {}", argv[0], err.message);
 | 
				
			||||||
					return ExitCode::from(1);
 | 
										return ExitCode::from(EX_DATAERR as u8);
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -203,7 +212,7 @@ fn main() -> ExitCode {
 | 
				
			|||||||
			Ok(val) => println!("{}", val.iter().last().unwrap().to_string()),
 | 
								Ok(val) => println!("{}", val.iter().last().unwrap().to_string()),
 | 
				
			||||||
			Err(err) => {
 | 
								Err(err) => {
 | 
				
			||||||
				eprintln!("{}: {}", argv[0], err.message);
 | 
									eprintln!("{}: {}", argv[0], err.message);
 | 
				
			||||||
				return ExitCode::from(1);
 | 
									return ExitCode::from(EX_DATAERR as u8);
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user