forked from bonsai/harakit
		
	Makefile, fop(1): added argument parsing and -d option
This commit is contained in:
		
							parent
							
								
									91e129b813
								
							
						
					
					
						commit
						52def0a32d
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -65,7 +65,7 @@ sysexits: build | ||||
| 
 | ||||
| libgetopt: src/getopt-rs/lib.rs | ||||
| 	$(RUSTC) $(RUSTCFLAGS) --crate-type=lib --crate-name=getopt \
 | ||||
| 		-o build/o/libgetopt.rlib src/lib.rs | ||||
| 		-o build/o/libgetopt.rlib src/getopt-rs/lib.rs | ||||
| 
 | ||||
| false: src/false.rs build | ||||
| 	$(RUSTC) $(RUSTFLAGS) -o build/bin/false src/false.rs | ||||
|  | ||||
							
								
								
									
										37
									
								
								src/fop.rs
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								src/fop.rs
									
									
									
									
									
								
							| @ -18,33 +18,54 @@ | ||||
| 
 | ||||
| use std::{ | ||||
| 	env::args, | ||||
| 	io::{ stdin, Write }, | ||||
| 	io::{ Read, stdin, Write }, | ||||
| 	process::{ Command, exit, Stdio }, | ||||
| }; | ||||
| 
 | ||||
| extern crate sysexits; | ||||
| extern crate getopt; | ||||
| 
 | ||||
| use getopt::{ Opt, Parser }; | ||||
| use sysexits::{ EX_DATAERR, EX_USAGE }; | ||||
| 
 | ||||
| fn main() { | ||||
| 	let argv = args().collect::<Vec<String>>(); | ||||
| 	let mut d = '␞'; | ||||
| 	let mut arg_parser = Parser::new(&argv, "d:"); | ||||
| 
 | ||||
| 	argv.get(2).unwrap_or_else(|| { | ||||
| 	while let Some(opt) = arg_parser.next() { | ||||
| 		match opt { | ||||
| 			Ok(Opt('d', Some(arg))) => { | ||||
| 				let arg_char = arg.chars().collect::<Vec<char>>(); | ||||
| 				if arg_char.len() > 1 { | ||||
| 					eprintln!("{}: {}: Not a character.", argv[0], arg); | ||||
| 					exit(EX_USAGE); | ||||
| 				} else { d = arg_char[0]; } | ||||
| 			}, | ||||
| 			_ => {}, | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	let index_arg = arg_parser.index(); | ||||
| 	let command_arg = arg_parser.index() + 1; | ||||
| 
 | ||||
| 	argv.get(command_arg).unwrap_or_else(|| { | ||||
| 		eprintln!("Usage: {} index command [args...]", argv[0]); | ||||
| 		exit(EX_USAGE); | ||||
| 	}); | ||||
| 
 | ||||
| 	let index = argv[1].parse::<usize>().unwrap_or_else(|_| { | ||||
| 	let index = argv[index_arg].parse::<usize>().unwrap_or_else(|_| { | ||||
| 		eprintln!("{}: {}: Not an integer.", argv[0], argv[1]); | ||||
| 		exit(EX_DATAERR); | ||||
| 	}); | ||||
| 
 | ||||
| 	let mut buf = String::new(); | ||||
| 	stdin().read_line(&mut buf).unwrap(); | ||||
| 	let mut fields = buf.split('␞').collect::<Vec<&str>>(); | ||||
| 	stdin().read_to_string(&mut buf).unwrap(); | ||||
| 	let mut fields = buf.split(d).collect::<Vec<&str>>(); | ||||
| 
 | ||||
| 	let opts = argv.iter().clone().skip(3).collect::<Vec<&String>>(); | ||||
| 	let opts = argv.iter().clone().skip(command_arg + 1).collect::<Vec<&String>>(); | ||||
| 
 | ||||
| 	let mut spawned = Command::new(argv.get(2).unwrap()) | ||||
| 	let mut spawned = Command::new(argv.get(command_arg).unwrap()) | ||||
| 		.args(opts) | ||||
| 		.stdin(Stdio::piped()) | ||||
| 		.stdout(Stdio::piped()) | ||||
| @ -71,5 +92,5 @@ fn main() { | ||||
| 
 | ||||
| 	fields[index] = &new_field; | ||||
| 
 | ||||
| 	print!("{}", fields.join("␞")); | ||||
| 	print!("{}", fields.join(&d.to_string())); | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user