X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fblue.c;h=0f15d01dce81958668ec971753a0760b697dbe94;hp=4f7335132bbaa4bb4e94b85fe6c3b814dabdc811;hb=82a087c4c47679fcfa59bb6d7bdbe587355ba3f6;hpb=0eb88fc5281804773e2a0c7a488a4452463535ce diff --git a/test/blue.c b/test/blue.c index 4f733513..0f15d01d 100644 --- a/test/blue.c +++ b/test/blue.c @@ -1,3 +1,30 @@ +/**************************************************************************** + * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ /***************************************************************************** * * * B l u e M o o n * @@ -13,17 +40,13 @@ * results, use the ncurses(3) library. On non-Intel machines, SVr4 curses is * just as good. * - * $Id: blue.c,v 1.18 1999/01/17 00:11:56 tom Exp $ + * $Id: blue.c,v 1.29 2006/05/20 15:38:18 tom Exp $ */ #include -#include -#include #include -#include - #define NOCARD (-1) #define ACE 0 @@ -55,7 +78,7 @@ static int deck[PACK_SIZE]; static int grid[GRID_LENGTH]; /* card layout grid */ static int freeptr[4]; /* free card space pointers */ -static int deal_number=0; +static int deal_number = 0; static chtype ranks[SUIT_LENGTH][2] = { @@ -94,7 +117,7 @@ static chtype letters[4] = OR_COLORS('c', BLACK_ON_WHITE), /* clubs */ }; -#if defined(__i386__) +#if defined(__i386__) && defined(A_ALTCHARSET) && HAVE_TIGETSTR static chtype glyphs[] = { PC_COLORS('\003', RED_ON_WHITE), /* hearts */ @@ -102,79 +125,82 @@ static chtype glyphs[] = PC_COLORS('\004', RED_ON_WHITE), /* diamonds */ PC_COLORS('\005', BLACK_ON_WHITE), /* clubs */ }; +#define USE_CP437 1 +#else +#define USE_CP437 0 #endif /* __i386__ */ static chtype *suits = letters; /* this may change to glyphs below */ -static RETSIGTYPE die(int onsig) +static RETSIGTYPE +die(int onsig) { (void) signal(onsig, SIG_IGN); endwin(); - exit(EXIT_SUCCESS); + ExitProgram(EXIT_SUCCESS); } -static void init_vars(void) +static void +init_vars(void) { int i; deck_size = PACK_SIZE; - for (i=0; i < PACK_SIZE; i++) - deck[i]=i; + for (i = 0; i < PACK_SIZE; i++) + deck[i] = i; for (i = 0; i < 4; i++) - freeptr[i]=i * GRID_WIDTH; + freeptr[i] = i * GRID_WIDTH; } -static void shuffle(int size) +static void +shuffle(int size) { - int i,j,numswaps,swapnum,temp; + int i, j, numswaps, swapnum, temp; - numswaps=size*10; /* an arbitrary figure */ + numswaps = size * 10; /* an arbitrary figure */ - for (swapnum=0;swapnum=PACK_SIZE)) - return(NOCARD); - for(i = 0; i < GRID_LENGTH; i++) + if ((card < 0) || (card >= PACK_SIZE)) + return (NOCARD); + for (i = 0; i < GRID_LENGTH; i++) if (grid[i] == card) return i; - return(NOCARD); + return (NOCARD); } -static void movecard(int src, int dst) +static void +movecard(int src, int dst) { - grid[dst]=grid[src]; - grid[src]=NOCARD; + grid[dst] = grid[src]; + grid[src] = NOCARD; - move( BASEROW + (dst / GRID_WIDTH)*2+2, (dst % GRID_WIDTH)*5 + 1); + move(BASEROW + (dst / GRID_WIDTH) * 2 + 2, (dst % GRID_WIDTH) * 5 + 1); printcard(grid[dst]); - move( BASEROW + (src / GRID_WIDTH)*2+2, (src % GRID_WIDTH)*5 + 1); + move(BASEROW + (src / GRID_WIDTH) * 2 + 2, (src % GRID_WIDTH) * 5 + 1); printcard(grid[src]); refresh(); } -static void play_game(void) +static void +play_game(void) { - int dead=0, i, j; + int dead = 0, i, j; char c; int selection[4], card; - while (dead<4) - { - dead=0; - for (i=0;i<4;i++) - { - card=grid[freeptr[i]-1]; + while (dead < 4) { + dead = 0; + for (i = 0; i < 4; i++) { + card = grid[freeptr[i] - 1]; - if ( ((card % SUIT_LENGTH)==KING) + if (((card % SUIT_LENGTH) == KING) || - (card==NOCARD) ) - selection[i]=NOCARD; + (card == NOCARD)) + selection[i] = NOCARD; else - selection[i]=find(card+1); + selection[i] = find(card + 1); - if (selection[i]==NOCARD) + if (selection[i] == NOCARD) dead++; }; - if (dead < 4) - { - char live[NSUITS+1], *lp = live; - - for (i=0;i<4;i++) - { - if (selection[i] != NOCARD) - { - move(BASEROW + (selection[i] / GRID_WIDTH)*2+3, - (selection[i] % GRID_WIDTH)*5); - (void)printw(" %c ", *lp++ = 'a' + i); + if (dead < 4) { + char live[NSUITS + 1], *lp = live; + + for (i = 0; i < 4; i++) { + if (selection[i] != NOCARD) { + move(BASEROW + (selection[i] / GRID_WIDTH) * 2 + 3, + (selection[i] % GRID_WIDTH) * 5); + (void) printw(" %c ", *lp++ = 'a' + i); } }; *lp = '\0'; - if (strlen(live) == 1) - { - move(PROMPTROW,0); - (void)printw( - "Making forced moves... "); + if (strlen(live) == 1) { + move(PROMPTROW, 0); + (void) printw( + "Making forced moves... "); refresh(); (void) sleep(1); c = live[0]; - } - else - { - char buf[BUFSIZ]; + } else { + char buf[BUFSIZ]; - (void)sprintf(buf, - "Type [%s] to move, r to redraw, q or INTR to quit: ", - live); + (void) sprintf(buf, + "Type [%s] to move, r to redraw, q or INTR to quit: ", + live); do { - move(PROMPTROW,0); + move(PROMPTROW, 0); (void) addstr(buf); - move(PROMPTROW, (int)strlen(buf)); + move(PROMPTROW, (int) strlen(buf)); clrtoeol(); (void) addch(' '); } while - (((c = getch())<'a' || c>'d') && (c!='r') && (c!='q')); + (((c = getch()) < 'a' || c > 'd') && (c != 'r') && (c != 'q')); } for (j = 0; j < 4; j++) - if (selection[j]!=NOCARD) - { - move(BASEROW + (selection[j] / GRID_WIDTH)*2+3, - (selection[j] % GRID_WIDTH)*5); - (void)printw(" "); + if (selection[j] != NOCARD) { + move(BASEROW + (selection[j] / GRID_WIDTH) * 2 + 3, + (selection[j] % GRID_WIDTH) * 5); + (void) printw(" "); } if (c == 'r') display_cards(deal_number); else if (c == 'q') die(SIGINT); - else - { - i = c-'a'; + else { + i = c - 'a'; if (selection[i] == NOCARD) beep(); - else - { + else { movecard(selection[i], freeptr[i]); - freeptr[i]=selection[i]; + freeptr[i] = selection[i]; } } } @@ -334,94 +353,97 @@ static void play_game(void) move(PROMPTROW, 0); standout(); - (void)printw("Finished deal %d - type any character to continue...", deal_number); + (void) printw("Finished deal %d - type any character to continue...", deal_number); standend(); (void) getch(); } -static int collect_discards(void) +static int +collect_discards(void) { - int row, col, cardno=0, finish, gridno; - - for (row=HEARTS;row<=CLUBS;row++) - { - finish=0; - for (col=1;col