ado@elsie.UUCP (Arthur David Olson) (03/20/85)
#include "stdio.h"
#ifndef BUFSIZ
#define BUFSIZ 1024
#endif
#define RANKCOUNT 13
char leader[] = "A234567891JQK";
int ihave[RANKCOUNT];
int uhave[RANKCOUNT];
char * begins(string, beginning)
char * string;
char * beginning;
{
while (*beginning != '\0')
if (*string++ != *beginning++)
return 0;
return string;
}
main(argc, argv)
int argc;
char * argv[];
{
char * cp;
int i;
int result;
int didpro;
int itoufids[2];
int utoifids[2];
char buf[BUFSIZ];
char outbuf[4];
if (pipe(itoufids) != 0 || pipe(utoifids) != 0)
return 2;
switch (fork()) {
case 0: /* child */
if (close(0) == 0 && close(1) == 0 &&
dup(itoufids[0]) == 0 && dup(utoifids[1]) == 1)
execl("/usr/games/fish", "fish", 0);
case -1:
return 2;
}
close(utoifids[1]);
didpro = 0;
while ((i = getit(buf, utoifids[0], itoufids[1])) > 0) {
if (argc == 1)
printf("%s", buf);
if (begins(buf, "instructions?")) {
write(itoufids[1], "n\n", 2);
if (argc == 1)
printf("n\n");
}
if (cp = begins(buf, "your hand is: ")) {
for (i = 0; i < RANKCOUNT; ++i)
ihave[i] = 0;
for ( ; *cp != '+' && *cp != '\0'; ++cp)
for (i = 0; i < RANKCOUNT; ++i)
if (*cp == leader[i])
ihave[i] = 1;
}
if (begins(buf + 1, "ou ask me for: ")) {
cp = outbuf;
if (didpro == 0) {
*cp++ = 'p';
didpro = 1;
} else if ((i = which()) >= 0) {
uhave[i] = 0;
if ((*cp++ = leader[i]) == '1')
*cp++ = '0';
}
*cp++ = '\n';
*cp = '\0';
write(itoufids[1], outbuf, cp - outbuf);
if (argc == 1)
printf(outbuf);
}
if (cp = begins(buf, "I ask you for: "))
for (i = 0; i < RANKCOUNT; ++i)
if (*cp == leader[i])
uhave[i] = 1;
if (cp = begins(buf, "Your books: "))
result = (strlen(cp) - 1) / 2;
}
if (i < 0)
return 2;
if (argc != 1)
printf("%d\n", result);
return result <= RANKCOUNT / 2;
}
int lasti;
int which()
{
int i;
for (i = 0; i < RANKCOUNT; ++i)
if (ihave[i] && uhave[i])
return lasti = i;
for (i = 0; i < RANKCOUNT; ++i)
if (ihave[lasti = (lasti + 1) % RANKCOUNT])
return lasti;
return -1;
}
int unread;
char mybuf[BUFSIZ + 1];
char * saveptr = mybuf;
#define WHATLEN strlen("what?\n")
int getit(buf, in, out)
char * buf;
{
char * cp;
int i;
cp = buf;
for ( ; ; ) {
if (*saveptr == '\0') {
unread = unread - WHATLEN;
i = 0;
while (unread <= BUFSIZ) {
mybuf[i++] = 'n';
mybuf[i++] = '\n';
unread = unread + WHATLEN;
}
write(out, mybuf, i);
i = read(in, mybuf, BUFSIZ);
if (i <= 0)
return i;
mybuf[i] = '\0';
saveptr = mybuf;
}
if ((*cp++ = *saveptr++) == '\n') {
*cp = '\0';
if (strcmp(buf, "what?\n") != 0)
return cp - buf;
unread = unread - WHATLEN;
cp = buf;
continue;
}
*cp = '\0';
if (begins(buf + 1, "ou ask me for: "))
return cp - buf;
}
}twb@mhuxh.UUCP (twb) (03/20/85)
> #include "stdio.h" > > #ifndef BUFSIZ > #define BUFSIZ 1024 > #endif > > #define RANKCOUNT 13 > > char leader[] = "A234567891JQK"; > int ihave[RANKCOUNT]; > int uhave[RANKCOUNT]; > > char * begins(string, beginning) > char * string; > char * beginning; > { > while (*beginning != '\0') > if (*string++ != *beginning++) > return 0; > return string; > } > > main(argc, argv) > int argc; > char * argv[]; > { > char * cp; > int i; > int result; > int didpro; > int itoufids[2]; > int utoifids[2]; > char buf[BUFSIZ]; > char outbuf[4]; > > if (pipe(itoufids) != 0 || pipe(utoifids) != 0) > return 2; > switch (fork()) { > case 0: /* child */ > if (close(0) == 0 && close(1) == 0 && > dup(itoufids[0]) == 0 && dup(utoifids[1]) == 1) > execl("/usr/games/fish", "fish", 0); > case -1: > return 2; > } > close(utoifids[1]); > didpro = 0; > while ((i = getit(buf, utoifids[0], itoufids[1])) > 0) { > if (argc == 1) > printf("%s", buf); > if (begins(buf, "instructions?")) { > write(itoufids[1], "n\n", 2); > if (argc == 1) > printf("n\n"); > } > if (cp = begins(buf, "your hand is: ")) { > for (i = 0; i < RANKCOUNT; ++i) > ihave[i] = 0; > for ( ; *cp != '+' && *cp != '\0'; ++cp) > for (i = 0; i < RANKCOUNT; ++i) > if (*cp == leader[i]) > ihave[i] = 1; > } > if (begins(buf + 1, "ou ask me for: ")) { > cp = outbuf; > if (didpro == 0) { > *cp++ = 'p'; > didpro = 1; > } else if ((i = which()) >= 0) { > uhave[i] = 0; > if ((*cp++ = leader[i]) == '1') > *cp++ = '0'; > } > *cp++ = '\n'; > *cp = '\0'; > write(itoufids[1], outbuf, cp - outbuf); > if (argc == 1) > printf(outbuf); > } > if (cp = begins(buf, "I ask you for: ")) > for (i = 0; i < RANKCOUNT; ++i) > if (*cp == leader[i]) > uhave[i] = 1; > if (cp = begins(buf, "Your books: ")) > result = (strlen(cp) - 1) / 2; > } > if (i < 0) > return 2; > if (argc != 1) > printf("%d\n", result); > return result <= RANKCOUNT / 2; > } > > int lasti; > > int which() > { > int i; > > for (i = 0; i < RANKCOUNT; ++i) > if (ihave[i] && uhave[i]) > return lasti = i; > for (i = 0; i < RANKCOUNT; ++i) > if (ihave[lasti = (lasti + 1) % RANKCOUNT]) > return lasti; > return -1; > } > > int unread; > char mybuf[BUFSIZ + 1]; > char * saveptr = mybuf; > > #define WHATLEN strlen("what?\n") > > int getit(buf, in, out) > char * buf; > { > char * cp; > int i; > > cp = buf; > for ( ; ; ) { > if (*saveptr == '\0') { > unread = unread - WHATLEN; > i = 0; > while (unread <= BUFSIZ) { > mybuf[i++] = 'n'; > mybuf[i++] = '\n'; > unread = unread + WHATLEN; > } > write(out, mybuf, i); > i = read(in, mybuf, BUFSIZ); > if (i <= 0) > return i; > mybuf[i] = '\0'; > saveptr = mybuf; > } > if ((*cp++ = *saveptr++) == '\n') { > *cp = '\0'; > if (strcmp(buf, "what?\n") != 0) > return cp - buf; > unread = unread - WHATLEN; > cp = buf; > continue; > } > *cp = '\0'; > if (begins(buf + 1, "ou ask me for: ")) > return cp - buf; > } > } How is this program used?? What does it do ? - Play go-fish (or does it chop, grind and liquify the bones?) Hmmmmmmmmmm, That's good bass!!
cmoore@amdimage.UUCP (chris moore) (03/23/85)
> > #include "stdio.h" ....... > > } > > How is this program used?? > What does it do ? - Play go-fish (or does it chop, grind and liquify > the bones?) > Hmmmmmmmmmm, That's good bass!! Did you HAVE to quote the whole #$&#% source again? -- "My system is so slow we don't use 'who' anymore - it's faster to walk around the building and count the users." Chris Moore (408) 749-4692 UUCP: {ucbvax,decwrl,ihnp4,allegra}!amdcad!amdimage!cmoore