Importing games/random
No Minix specific changes needed. Change-Id: I0fd074325f334f03426accbece4e731b746ebe14
This commit is contained in:
		
							parent
							
								
									6e7922ee31
								
							
						
					
					
						commit
						b098ee9ca6
					
				@ -566,6 +566,7 @@
 | 
			
		||||
./usr/games/pig				minix-sys
 | 
			
		||||
./usr/games/ppt				minix-sys
 | 
			
		||||
./usr/games/primes			minix-sys
 | 
			
		||||
./usr/games/random			minix-sys
 | 
			
		||||
./usr/games/strfile			minix-sys
 | 
			
		||||
./usr/games/unstr			minix-sys
 | 
			
		||||
./usr/games/wargames			minix-sys
 | 
			
		||||
@ -4766,6 +4767,7 @@
 | 
			
		||||
./usr/man/man6/pig.6				minix-sys
 | 
			
		||||
./usr/man/man6/ppt.6				minix-sys
 | 
			
		||||
./usr/man/man6/primes.6				minix-sys
 | 
			
		||||
./usr/man/man6/random.6				minix-sys
 | 
			
		||||
./usr/man/man6/wargames.6			minix-sys
 | 
			
		||||
./usr/man/man7					minix-sys
 | 
			
		||||
./usr/man/man7/ascii.7				minix-sys
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@ SUBDIR=	adventure \
 | 
			
		||||
	factor fortune \
 | 
			
		||||
	monop morse number \
 | 
			
		||||
	pig ppt primes \
 | 
			
		||||
	\
 | 
			
		||||
	random \
 | 
			
		||||
	wargames
 | 
			
		||||
 | 
			
		||||
.if !defined(__MINIX)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								games/random/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								games/random/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
#	$NetBSD: Makefile,v 1.5 2008/01/28 07:03:59 dholland Exp $
 | 
			
		||||
#	@(#)Makefile	8.1 (Berkeley) 3/31/94
 | 
			
		||||
 | 
			
		||||
PROG=	random
 | 
			
		||||
MAN=	random.6
 | 
			
		||||
 | 
			
		||||
.include <bsd.prog.mk>
 | 
			
		||||
							
								
								
									
										68
									
								
								games/random/random.6
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								games/random/random.6
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,68 @@
 | 
			
		||||
.\"	$NetBSD: random.6,v 1.7 2007/03/20 16:12:40 hubertf Exp $
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright (c) 1994
 | 
			
		||||
.\"	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Redistribution and use in source and binary forms, with or without
 | 
			
		||||
.\" modification, are permitted provided that the following conditions
 | 
			
		||||
.\" are met:
 | 
			
		||||
.\" 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
.\"    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
.\"    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
.\"    documentation and/or other materials provided with the distribution.
 | 
			
		||||
.\" 3. Neither the name of the University nor the names of its contributors
 | 
			
		||||
.\"    may be used to endorse or promote products derived from this software
 | 
			
		||||
.\"    without specific prior written permission.
 | 
			
		||||
.\"
 | 
			
		||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
.\" SUCH DAMAGE.
 | 
			
		||||
.\"
 | 
			
		||||
.\"     @(#)random.6	8.2 (Berkeley) 3/31/94
 | 
			
		||||
.\"
 | 
			
		||||
.Dd March 20, 2007
 | 
			
		||||
.Dt RANDOM 6
 | 
			
		||||
.Os
 | 
			
		||||
.Sh NAME
 | 
			
		||||
.Nm random
 | 
			
		||||
.Nd random lines from a file or random numbers
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm
 | 
			
		||||
.Op Fl er
 | 
			
		||||
.Op Ar denominator
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
.Nm
 | 
			
		||||
reads lines from the standard input and copies them to the standard
 | 
			
		||||
output with a probability of 1/denominator.
 | 
			
		||||
The default value for
 | 
			
		||||
.Ar denominator
 | 
			
		||||
is 2.
 | 
			
		||||
.Pp
 | 
			
		||||
The options are as follows:
 | 
			
		||||
.Bl -tag -width Ds
 | 
			
		||||
.It Fl e
 | 
			
		||||
If the
 | 
			
		||||
.Fl e
 | 
			
		||||
option is specified,
 | 
			
		||||
.Nm
 | 
			
		||||
does not read or write anything, and simply exits with a random
 | 
			
		||||
exit value of 0 to
 | 
			
		||||
.Ar denominator Ns -1 ,
 | 
			
		||||
inclusive.
 | 
			
		||||
.It Fl r
 | 
			
		||||
The
 | 
			
		||||
.Fl r
 | 
			
		||||
option guarantees that the output is unbuffered.
 | 
			
		||||
.El
 | 
			
		||||
.Sh SEE ALSO
 | 
			
		||||
.Xr shuffle 1 ,
 | 
			
		||||
.Xr fortune 6
 | 
			
		||||
							
								
								
									
										152
									
								
								games/random/random.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								games/random/random.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,152 @@
 | 
			
		||||
/*	$NetBSD: random.c,v 1.14 2009/08/12 08:27:24 dholland Exp $	*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1994
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This code is derived from software contributed to Berkeley by
 | 
			
		||||
 * Guy Harris at Network Appliance Corp.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
#ifndef lint
 | 
			
		||||
__COPYRIGHT("@(#) Copyright (c) 1994\
 | 
			
		||||
 The Regents of the University of California.  All rights reserved.");
 | 
			
		||||
#endif /* not lint */
 | 
			
		||||
 | 
			
		||||
#ifndef lint
 | 
			
		||||
#if 0
 | 
			
		||||
static char sccsid[] = "@(#)random.c	8.6 (Berkeley) 6/1/94";
 | 
			
		||||
#else
 | 
			
		||||
__RCSID("$NetBSD: random.c,v 1.14 2009/08/12 08:27:24 dholland Exp $");
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* not lint */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
 | 
			
		||||
#include <err.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
 | 
			
		||||
static void usage(void) __dead;
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
	struct timeval tp;
 | 
			
		||||
	double denom;
 | 
			
		||||
	int ch, random_exit, selected, unbuffer_output;
 | 
			
		||||
	char *ep;
 | 
			
		||||
 | 
			
		||||
	denom = 0;
 | 
			
		||||
	random_exit = unbuffer_output = 0;
 | 
			
		||||
	while ((ch = getopt(argc, argv, "er")) != -1)
 | 
			
		||||
		switch (ch) {
 | 
			
		||||
		case 'e':
 | 
			
		||||
			random_exit = 1;
 | 
			
		||||
			break;
 | 
			
		||||
		case 'r':
 | 
			
		||||
			unbuffer_output = 1;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
		case '?':
 | 
			
		||||
			usage();
 | 
			
		||||
			/* NOTREACHED */
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	argc -= optind;
 | 
			
		||||
	argv += optind;
 | 
			
		||||
 | 
			
		||||
	switch (argc) {
 | 
			
		||||
	case 0:
 | 
			
		||||
		denom = 2;
 | 
			
		||||
		break;
 | 
			
		||||
	case 1:
 | 
			
		||||
		errno = 0;
 | 
			
		||||
		denom = strtod(*argv, &ep);
 | 
			
		||||
		if (errno == ERANGE)
 | 
			
		||||
			err(1, "%s", *argv);
 | 
			
		||||
		if (denom == 0 || *ep != '\0')
 | 
			
		||||
			errx(1, "denominator is not valid.");
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		usage(); 
 | 
			
		||||
		/* NOTREACHED */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	(void)gettimeofday(&tp, NULL);
 | 
			
		||||
	srandom((unsigned long)tp.tv_usec + tp.tv_sec + getpid());
 | 
			
		||||
 | 
			
		||||
	/* Compute a random exit status between 0 and denom - 1. */
 | 
			
		||||
	if (random_exit)
 | 
			
		||||
		return ((denom * random()) / RANDOM_MAX);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Act as a filter, randomly choosing lines of the standard input
 | 
			
		||||
	 * to write to the standard output.
 | 
			
		||||
	 */
 | 
			
		||||
	if (unbuffer_output)
 | 
			
		||||
		setbuf(stdout, NULL);
 | 
			
		||||
	
 | 
			
		||||
	/*
 | 
			
		||||
	 * Select whether to print the first line.  (Prime the pump.)
 | 
			
		||||
	 * We find a random number between 0 and denom - 1 and, if it's
 | 
			
		||||
	 * 0 (which has a 1 / denom chance of being true), we select the
 | 
			
		||||
	 * line.
 | 
			
		||||
	 */
 | 
			
		||||
	selected = (int)(denom * random() / RANDOM_MAX) == 0;
 | 
			
		||||
	while ((ch = getchar()) != EOF) {
 | 
			
		||||
		if (selected)
 | 
			
		||||
			(void)putchar(ch);
 | 
			
		||||
		if (ch == '\n') {
 | 
			
		||||
			/* End of that line.  See if we got an error. */
 | 
			
		||||
			if (ferror(stdout))
 | 
			
		||||
				err(2, "stdout");
 | 
			
		||||
 | 
			
		||||
			/* Now see if the next line is to be printed. */
 | 
			
		||||
			selected = (int)(denom * random() / RANDOM_MAX) == 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (ferror(stdin))
 | 
			
		||||
		err(2, "stdin");
 | 
			
		||||
	exit (0);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
usage(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	(void)fprintf(stderr, "usage: random [-er] [denominator]\n");
 | 
			
		||||
	exit(1);
 | 
			
		||||
}
 | 
			
		||||
@ -80,6 +80,7 @@
 | 
			
		||||
2013/12/1 12:00:00,games/pig
 | 
			
		||||
2013/12/1 12:00:00,games/ppt
 | 
			
		||||
2013/12/1 12:00:00,games/primes
 | 
			
		||||
2013/12/1 12:00:00,games/random
 | 
			
		||||
2013/12/1 12:00:00,games/wargames
 | 
			
		||||
2013/12/1 12:00:00,gnu/dist/texinfo
 | 
			
		||||
2013/12/1 12:00:00,gnu/usr.bin/texinfo
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user