Compare commits
	
		
			8 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ba55c4c8e7 | |||
| 003f5aeb1f | |||
| 327c71c8ae | |||
| b06c1d5488 | |||
| 82f6c46b64 | |||
| 81c657ec3e | |||
| 82a941eee3 | |||
| e674027b3e | 
							
								
								
									
										9
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								Makefile
									
									
									
									
									
								
							| @ -28,7 +28,7 @@ RUSTLIBS = --extern getopt=build/o/libgetopt.rlib \ | ||||
| CFLAGS += -I$(SYSEXITS) | ||||
| 
 | ||||
| .PHONY: all | ||||
| all: dj false fop hru intcmp mm npc rpn scrut str strcmp swab true | ||||
| all: dj false fop hru intcmp mm npc rpn scrut sleep str strcmp swab true | ||||
| 
 | ||||
| build: | ||||
| 	# keep build/include until bindgen(1) has stdin support | ||||
| @ -118,6 +118,13 @@ scrut: build/bin/scrut | ||||
| build/bin/scrut: src/scrut.c build | ||||
| 	$(CC) $(CFLAGS) -o $@ src/scrut.c | ||||
| 
 | ||||
| .PHONY: sleep | ||||
| sleep: build/bin/sleep | ||||
| build/bin/sleep: src/sleep.rs build rustlibs | ||||
| 	$(RUSTC) $(RUSTFLAGS) \
 | ||||
| 		--extern sysexits=build/o/libsysexits.rlib \
 | ||||
| 		-o $@ src/sleep.rs | ||||
| 
 | ||||
| .PHONY: str | ||||
| str: build/bin/str | ||||
| build/bin/str: src/str.c build | ||||
|  | ||||
							
								
								
									
										53
									
								
								docs/sleep.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								docs/sleep.1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| .\" Copyright (c) 2024 DTB <trinity@trinity.moe> | ||||
| .\" | ||||
| .\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, | ||||
| .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>. | ||||
| 
 | ||||
| .TH SLEEP 1 | ||||
| 
 | ||||
| .SH NAME | ||||
| 
 | ||||
| sleep \(en wait a moment | ||||
| 
 | ||||
| .SH SYNOPSIS | ||||
| 
 | ||||
| sleep | ||||
| .RB [ seconds ] | ||||
| 
 | ||||
| .SH DESCRIPTION | ||||
| 
 | ||||
| Sleep waits the given amount of seconds before exiting. | ||||
| 
 | ||||
| .SH DIAGNOSTICS | ||||
| 
 | ||||
| Sleep exits successfully when the time specified has elapsed, or unsuccessfully | ||||
| if the time fails to elapse or if invoked incorrectly. In the latter scenario | ||||
| sleep will also print a usage synopsis. | ||||
| 
 | ||||
| .SH BUGS | ||||
| 
 | ||||
| User may still be tired after invoking sleep. | ||||
| 
 | ||||
| .SH EXAMPLES | ||||
| 
 | ||||
| The following invocation sleeps for five seconds. | ||||
| 
 | ||||
| .RS | ||||
| .R sleep 5 | ||||
| .RE | ||||
| 
 | ||||
| The following sh(1p) command line sleeps for five minutes, or for sixty | ||||
| seconds, five times, using rpn(1) and xargs(1p). | ||||
| 
 | ||||
| .RS | ||||
| .R $ rpn 60 5 '*' | xargs sleep | ||||
| .RE | ||||
| 
 | ||||
| .SH COPYRIGHT | ||||
| 
 | ||||
| Copyright (c) 2024 DTB. License AGPLv3+: GNU AGPL version 3 or later | ||||
| <https://gnu.org/licenses/gpl.html>. | ||||
| 
 | ||||
| .SH SEE ALSO | ||||
| 
 | ||||
| sleep(3) | ||||
							
								
								
									
										47
									
								
								src/sleep.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								src/sleep.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | ||||
| /* | ||||
|  * Copyright (c) 2024 DTB <trinity@trinity.moe> | ||||
|  * SPDX-License-Identifier: AGPL-3.0-or-later | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify it under | ||||
|  * the terms of the GNU Affero General Public License as published by the Free | ||||
|  * Software Foundation, either version 3 of the License, or (at your option) any | ||||
|  * later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but WITHOUT | ||||
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more | ||||
|  * details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Affero General Public License | ||||
|  * along with this program. If not, see https://www.gnu.org/licenses/.
 | ||||
|  */ | ||||
| 
 | ||||
| use std::{ | ||||
| 	env::args, | ||||
| 	process::ExitCode, | ||||
| 	thread::sleep, | ||||
| 	time::Duration | ||||
| }; | ||||
| 
 | ||||
| extern crate sysexits; | ||||
| use sysexits::EX_USAGE; | ||||
| 
 | ||||
| fn usage(s: &str) -> ExitCode { | ||||
| 	eprintln!("Usage: {} [seconds]", s); | ||||
| 	ExitCode::from(EX_USAGE as u8) | ||||
| } | ||||
| 
 | ||||
| fn main() -> ExitCode { | ||||
| 	let argv = args().collect::<Vec<String>>(); | ||||
| 
 | ||||
| 	if argv.len() == 2 { | ||||
| 		if let Ok(s) = argv[1].parse::<u64>() { | ||||
| 			sleep(Duration::from_secs(s)); | ||||
| 			ExitCode::SUCCESS | ||||
| 		} else { | ||||
| 			usage(&argv[0]) | ||||
| 		} | ||||
| 	} else { | ||||
| 		usage(&argv[0]) | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user