ftp.nice.ch/pub/next/games/card/Cribbage.1.1.s.tar.gz#/Cribbage/Cribbage-1.1/io.c

This is io.c in view mode; [Download] [Up]

/*
 * Copyright (c) 1980 Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that this notice is preserved and that due credit is given
 * to the University of California at Berkeley. The name of the University
 * may not be used to endorse or promote products derived from this
 * software without specific prior written permission. This software
 * is provided ``as is'' without express or implied warranty.
 */

#ifndef lint
static char sccsid[] = "@(#)io.c	5.3 (Berkeley) 3/10/88";
#endif /* not lint */

#define IO_C

# include	<stdio.h>
# include	<string.h>
# include	<ctype.h>
# include	<stdarg.h>
# include	"deck.h"
# include	"cribbage.h"

# include	"gui.h"
# include	"LocalizableStrings.h"


#ifndef TRUE
#	define		TRUE		1
#	define		FALSE		0
#endif

static void	doadd( const char *, va_list ap );


char		*rankname[ RANKS ]	= { "ACE", "TWO", "THREE", "FOUR",
					    "FIVE", "SIX", "SEVEN", "EIGHT",
					    "NINE", "TEN", "JACK", "QUEEN",
					    "KING" };

char            *rankchar[ RANKS ]      = { "A", "2", "3", "4", "5", "6", "7",
					    "8", "9", "T", "J", "Q", "K" };

char            *suitname[ SUITS ]      = { "SPADES", "HEARTS", "DIAMONDS",
					    "CLUBS" };

char            *suitchar[ SUITS ]      = { "S", "H", "D", "C" };



/*
 * msgcard:
 *	Call msgcrd in one of two forms
 */
BOOLEAN msgcard( CARD c, BOOLEAN brief )
{
	if (brief)
		return msgcrd(c, TRUE, (char *) NULL, TRUE);
	else
		return msgcrd(c, FALSE, " of ", FALSE);
}



/*
 * msgcrd:
 *	Print the value of a card in ascii
 */
BOOLEAN msgcrd( CARD c, BOOLEAN brfrank, char *mid, BOOLEAN brfsuit )
{
	const char	*l_rank, *l_suit, *l_mid = NULL;
	
	if (c.rank == EMPTY || c.suit == EMPTY)
	    return FALSE;
	    
	if (brfrank)
	    l_rank = NXLocalizedString(rankchar[c.rank],NULL,-);
	else
	    l_rank = NXLocalizedString(rankname[c.rank],NULL,-);
	if (brfsuit)
	    l_suit = NXLocalizedString(suitchar[c.suit],NULL,-);
	else
	    l_suit = NXLocalizedString(suitname[c.suit],NULL,-);
	    
	if (mid) {
	    l_mid = NXLocalizedString(mid,NULL,-);
	    if (l_mid[0] == '~') /* swap rank and suit */
		addmsg ("%s%s%s", l_suit, l_mid+1, l_rank);
	    else
		addmsg ("%s%s%s", l_rank, l_mid, l_suit);
	} else {
		addmsg ("%s%s", l_rank, l_suit);
	}
	
	return TRUE;
}


/*
 * msg:
 *	Display a message at the top of the screen.
 */
char		Msgbuf[BUFSIZ] = { '\0' };

int		Mpos = 0;

static int	Newpos = 0;

void msg( const char *fmt, ... )
{
    va_list ap;
    
    va_start( ap, fmt );
    doadd( fmt, ap );
    va_end( ap );
    endmsg();
}

/*
 * addmsg:
 *	Add things to the current message
 */
void addmsg( const char *fmt, ... )
{
    va_list ap;
    
    va_start( ap, fmt );
    doadd( fmt, ap );
    va_end( ap );
}

/*
 * endmsg:
 *	Display a new msg.
 */

void endmsg()
{
    /*
     * All messages should start with uppercase
     */
    if (islower(Msgbuf[0]) && Msgbuf[1] != ')')
	Msgbuf[0] = toupper(Msgbuf[0]);
    gui_msg(Msgbuf);
    Newpos = 0;
}

/*
 * doadd:
 *	Perform an add onto the message buffer
 */
/*void doadd( char *fmt, va_list ap )*/
static void doadd( const char *fmt, va_list ap )
{
    /*
     * Do the printf into Msgbuf
     */
    vsprintf( Msgbuf+Newpos, fmt, ap );
    Newpos = strlen(Msgbuf);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.