mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 16:34:07 +00:00
1 line
3.8 KiB
C
1 line
3.8 KiB
C
/* -*-c,save-*- */
|
||
|
||
/*
|
||
|
||
* cardpak.c - card package
|
||
|
||
* Robert Heller. Created: Sun Mar 9, 1986 17:08:04.73
|
||
|
||
* Last Mod:
|
||
|
||
*
|
||
|
||
* (c) Copyright 1986 by Robert Heller
|
||
|
||
* All Rights Reserved
|
||
|
||
*
|
||
|
||
*
|
||
|
||
*/
|
||
|
||
|
||
|
||
#include <stdio.h>
|
||
|
||
|
||
|
||
#define LOCAL static
|
||
|
||
|
||
|
||
/* #define DEBUG /* debugging */
|
||
|
||
|
||
|
||
#ifdef DEBUG
|
||
|
||
#define LOCAL /* static */
|
||
|
||
#endif
|
||
|
||
|
||
|
||
LOCAL char FULL_DECK[261],RANDOM_DECK[261],ALL_VALS[14],JUST_VALS[261],
|
||
|
||
JUST_SUITS[261];
|
||
|
||
LOCAL char ENCVALS[14];
|
||
|
||
|
||
|
||
int decktype = 0;
|
||
|
||
|
||
|
||
card_ini()
|
||
|
||
{
|
||
|
||
register char *p,c;
|
||
|
||
register int i;
|
||
|
||
|
||
|
||
if (decktype == 0) { /* standard deck */
|
||
|
||
for (p=FULL_DECK,c='a';c<='z';p++,c++) *p = c;
|
||
|
||
for (c='A';c<='Z';c++,p++) *p = c;
|
||
|
||
}
|
||
|
||
else if (decktype = 1) { /* blackjack - five decks */
|
||
|
||
for (p=FULL_DECK,i=0;i<5;i++) {
|
||
|
||
for (c='a';c<='z';p++,c++) *p = c;
|
||
|
||
for (c='A';c<='Z';c++,p++) *p = c;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
else if (decktype = 2) { /* pinocle */
|
||
|
||
p = FULL_DECK;
|
||
|
||
for (c='a';c<='x';c++,p++) *p = c;
|
||
|
||
for (c='A';c<='X';c++,p++) *p = c;
|
||
|
||
}
|
||
|
||
else {
|
||
|
||
fprintf(stderr,"cardpak: bad deck type %d\n",decktype);
|
||
|
||
abort(decktype);
|
||
|
||
}
|
||
|
||
*p = '\0';
|
||
|
||
if (decktype == 0 || decktype == 1)
|
||
|
||
for (p=ALL_VALS,c='A';c<='M';p++,c++) *p = c;
|
||
|
||
else for (p=ALL_VALS,c='A';c<='F';p++,c++) *p = c;
|
||
|
||
*p = '\0';
|
||
|
||
if (decktype == 0) dupl(ALL_VALS,4,JUST_VALS);
|
||
|
||
else if (decktype == 1) dupl(ALL_VALS,20,JUST_VALS);
|
||
|
||
else dupl(ALL_VALS,8,JUST_VALS);
|
||
|
||
if (decktype == 0 || decktype == 1) strcpy(ENCVALS,"234567890JQKA");
|
||
|
||
else strcpy(ENCVALS,"9JQK0A");
|
||
|
||
p = JUST_SUITS;
|
||
|
||
if (decktype == 0 || decktype == 1) {
|
||
|
||
dupl("C",13,p);
|
||
|
||
p += 13;
|
||
|
||
dupl("D",13,p);
|
||
|
||
p += 13;
|
||
|
||
dupl("H",13,p);
|
||
|
||
p += 13;
|
||
|
||
dupl("S",13,p);
|
||
|
||
p += 13;
|
||
|
||
if (decktype == 1) {
|
||
|
||
for (i=0;i<4;i++) {
|
||
|
||
strncpy(p,JUST_SUITS,52);
|
||
|
||
p += 52;
|
||
|
||
}
|
||
|
||
*p = '\0';
|
||
|
||
}
|
||
|
||
}
|
||
|
||
else {
|
||
|
||
for (i=0;i<2;i++) {
|
||
|
||
dupl("C",6,p);
|
||
|
||
p += 6;
|
||
|
||
dupl("D",6,p);
|
||
|
||
p += 6;
|
||
|
||
dupl("H",6,p);
|
||
|
||
p += 6;
|
||
|
||
dupl("S",6,p);
|
||
|
||
p += 6;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
RANDOM_DECK[0] = '\0';
|
||
|
||
}
|
||
|
||
rhand(k,buff,flag)
|
||
|
||
register int k,flag;
|
||
|
||
register char *buff;
|
||
|
||
{
|
||
|
||
if (flag) rpermutate(FULL_DECK,RANDOM_DECK);
|
||
|
||
if (strlen(RANDOM_DECK) < k) return(FALSE);
|
||
|
||
strncpy(buff,RANDOM_DECK,k);
|
||
|
||
buff[k] = '\0';
|
||
|
||
strcpy(RANDOM_DECK,&RANDOM_DECK[k]);
|
||
|
||
return(TRUE);
|
||
|
||
}
|
||
|
||
suits(h,out)
|
||
|
||
register char *h,*out;
|
||
|
||
{
|
||
|
||
replace(h,FULL_DECK,JUST_SUITS,out);
|
||
|
||
}
|
||
|
||
vals(h,out)
|
||
|
||
register char *h,*out;
|
||
|
||
{
|
||
|
||
replace(h,FULL_DECK,JUST_VALS,out);
|
||
|
||
}
|
||
|
||
display(h,out)
|
||
|
||
register char *h,*out;
|
||
|
||
{
|
||
|
||
char VALS[54],SUITS[54];
|
||
|
||
register char *v,*s,*o;
|
||
|
||
|
||
|
||
vals(h,VALS);
|
||
|
||
/* abcdefghijklm
|
||
|
||
nopqrstuvwxyz
|
||
|
||
ABCDEFGHIJKLM
|
||
|
||
NOPQRSTUVWXYZ */
|
||
|
||
if (decktype == 0 || decktype == 1)
|
||
|
||
replace(VALS,ALL_VALS,"23456789TJQKA",VALS);
|
||
|
||
else
|
||
|
||
replace(VALS,ALL_VALS,"9JQKTA",VALS);
|
||
|
||
suits(h,SUITS);
|
||
|
||
for (v=VALS,s=SUITS,o=out;*v != '\0';v++,s++) {
|
||
|
||
if (*v == 'T') {
|
||
|
||
*o++ = '1'; *o++ = '0';
|
||
|
||
}
|
||
|
||
else *o++ = *v;
|
||
|
||
*o++ = *s;
|
||
|
||
*o++ = ' ';
|
||
|
||
}
|
||
|
||
*o = '\0';
|
||
|
||
}
|
||
|
||
enchand(h,ench)
|
||
|
||
register char *h;
|
||
|
||
char *ench;
|
||
|
||
{
|
||
|
||
register char v,s,*sbase,*vbase;
|
||
|
||
char *strchr();
|
||
|
||
|
||
|
||
while (*h != '\0') {
|
||
|
||
#ifdef DEBUG
|
||
|
||
printf("***In enchand(): h=%s\n",h);
|
||
|
||
#endif
|
||
|
||
if (*h == '1') h++;
|
||
|
||
v = *h++; s = *h++;
|
||
|
||
#ifdef DEBUG
|
||
|
||
printf("*** v=%c, s=%c\n",v,s);
|
||
|
||
#endif
|
||
|
||
sbase = strchr(JUST_SUITS,s);
|
||
|
||
vbase = strchr(ENCVALS,v);
|
||
|
||
if (vbase == 0L || sbase == 0L) return(0);
|
||
|
||
*ench++ = FULL_DECK[(sbase-JUST_SUITS) + (vbase - ENCVALS)];
|
||
|
||
#ifdef DEBUG
|
||
|
||
printf("*** card=%c\n",*(ench-1));
|
||
|
||
#endif
|
||
|
||
while (*h <= ' ' && *h > '\0') h++;
|
||
|
||
}
|
||
|
||
*ench = '\0';
|
||
|
||
return(1);
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|