xref: /original-bsd/games/ching/cno/ching.cno.c (revision f95533f0)
1 /*
2  * Copyright (c) 1988 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Guy Harris.
7  *
8  * %sccs.include.redist.c%
9  */
10 
11 #ifndef lint
12 char copyright[] =
13 "@(#) Copyright (c) 1988 The Regents of the University of California.\n\
14  All rights reserved.\n";
15 #endif /* not lint */
16 
17 #ifndef lint
18 static char sccsid[] = "@(#)ching.cno.c	5.3 (Berkeley) 06/01/90";
19 #endif /* not lint */
20 
21 /*
22  * cno - Read a question, cast a change, and output the line values to the
23  * standard output for processing by "phx".
24  */
25 #include <stdio.h>
26 #include "ching.h"
27 
28 long	now;		/* current time */
29 
30 unsigned seed;		/* seed for random number generator */
31 unsigned getrand();
32 
33 char	*change();
34 char	string[6+1];	/* where the actual change string is put */
35 
36 int	table[2][2][2] = {
37 	{ { OYIN,  YYANG,}, { YYANG, YYIN,} },
38 	{ { YYANG, YYIN,},  { YYIN,  OYANG,} },
39 };
40 
41 main()
42 {
43 	FILE *logf;
44 
45 	time(&now);
46 	seed = (int)now + getquest() + getgid() + getuid() + getpid();	/* randomize */
47 	printf("%s\n", change());
48 }
49 
50 /*
51  * Hash the question by adding all the characters together.
52  */
53 int
54 getquest()
55 {
56 	int result;
57 	register int c;
58 
59 	result = 0;
60 	while ((c = getchar()) != EOF)
61 		result += c;
62 	return(result);
63 }
64 
65 /*
66  * Get a set of six lines making up a change.
67  */
68 char *
69 change()
70 {
71 	register int i;
72 
73 	for (i = 0; i < 6; i++)
74 		string[i] = table[getrnum()&01][getrnum()&01][getrnum()&01] + '0';
75 	string[i] = '\0';
76 	return(string);
77 }
78 
79 /*
80  * Get a number more random than what getrand() gives.
81  */
82 getrnum()
83 {
84 	return((getrand())>>(getrand()%17));
85 }
86 
87 /*
88  * Get a random number.
89  */
90 unsigned
91 getrand()
92 {
93 	return(seed = (seed*13077) + 6925);
94 }
95