Category : Linux Files
Archive   : CHESSCLK.ZIP
Filename : CHESSCLK.CPP

 
Output of file : CHESSCLK.CPP contained in archive : CHESSCLK.ZIP
/****************************** Chess clock program ************************
Full-featured chess clock: Digital displays of time
Move counter
White and Black clocks separately settable
Times from 1 minute to 99 hours
Low-time warning (optional)
Flashing "tick" indicator (optional)
****************************************************************************/


#include
#include
#include
#include
#include
#include
#include "oscr.hpp"
#include "chessclk.hpp"

void main()
{
randomize();
opening_screen();
play();
}

void CountdownTimer::clock_on()
{
time_t prev_sec;
int ch;

if( p == WHITE_ )
text_color = LIGHTBLUE;
else
text_color = DARKGRAY;

setcolor( text_color );
settextstyle( TRIPLEX_FONT, HORIZ_DIR, 5 );
settextjustify( LEFT_TEXT, TOP_TEXT );

startn_t = time ( NULL ); //Click on stopwatch.
gotoxy( 60 * p + 1, 14 );

outtextxy( NAME_POS * p, 100, player [p] );
display_time(); //Otherwise initial time not displayed...

while( !( ch = kbhit() ) )
{
prev_sec = seconds;
if( running_flag) //Is this 2nd or later lap?
interval_t = time( NULL ) - startn_t;
else
interval_t = time( NULL ) - start_t;
running_t = total_seconds - interval_t;
convert( running_t );

if( seconds - prev_sec )
{
display_time();

if( !seconds )
if( minutes == warning )
if( !hours )
if( time_warning_flag )
blatt();

if( visual_ticking_flag ) // Show blinking box ticks?
{
setfillstyle( random ( PATTERNS ), random ( COLORS ) );
setcolor ( random ( COLORS ) );
setlinestyle( SOLID_LINE, 0xFFF, NORM_WIDTH );
bar( X_C - RADIUS, Y_C - RADIUS,
X_C + RADIUS, Y_C + RADIUS );
}
}

if( timeout() )
exit_();
}

ch = getch();
if( ch == ESC )
exit__(); // Quit.

total_seconds = hours * 3600 + minutes * 60 + seconds;
running_flag = ON; // Remember that clock was already running.

return;

}

void CountdownTimer::display_moves()
{
char buf[ 5 ];
static char ebuf[ 5 ];

if( moves > 1 )
{
setcolor( WHITE );
settextstyle( TRIPLEX_FONT, HORIZ_DIR, 1 );
settextjustify( CENTER_TEXT, TOP_TEXT );
outtextxy( MOVES_X, MOVES_Y, ebuf );
}

sprintf( buf, "%003d", moves );
sprintf( ebuf, buf );
setcolor( LIGHTRED );
settextstyle( TRIPLEX_FONT, HORIZ_DIR, 1 );
settextjustify( CENTER_TEXT, TOP_TEXT );
outtextxy( MOVES_X, MOVES_Y, buf );

return;
}

void graphics_setup( int background_color )
{
int grdriver = VGA,
grmode = VGAHI;

registerfarbgidriver( EGAVGA_driver_far );
registerfarbgifont( gothic_font_far );
registerfarbgifont( triplex_font_far );
initgraph( &grdriver, &grmode, "" );
setbkcolor( background_color );


}

void exit__()
{
closegraph();
exit( QUIT );
}

/***************Routine to erase old numbers*************/
void CountdownTimer::erase_numbers()
{
setcolor ( WHITE );

if( seconds == 59 )
outtextxy( p * BLK_TIME, Y_TIMEPOS, line_clear );
else
if( seconds == 9 || seconds == 19 || seconds == 29
|| seconds == 39 || seconds == 49 )
outtextxy( p * BLK_TIME + POS1_OFFSET, Y_TIMEPOS,
line_clear + 6 );
else
outtextxy( p * BLK_TIME + POS_OFFSET, Y_TIMEPOS,
line_clear + 7 );

return;

}


void play()
{
int hrs,
min;
char inputstr[ MAXLEN ],
inp;

clrscr();

textcolor ( LIGHTCYAN );
cprintf( "\n WHITE hours: " );
gets( inputstr );
hrs = atoi( inputstr );
cprintf( " WHITE minutes: " );
gets( inputstr );
min = atoi( inputstr );
CountdownTimer t1( hrs, min, WHITE_ );

textcolor( RED );
cprintf( "\n BLACK hours: " );
gets( inputstr );
hrs = atoi( inputstr );
cprintf( " BLACK minutes: " );
gets( inputstr );
min = atoi( inputstr );
CountdownTimer t2( hrs, min, BLACK_ );

textcolor( YELLOW );
cprintf( "\n\n Enable flashing clock ticks? " );
inp = getche();
if( inp == 'y' || inp == 'Y' )
t1.visual_ticking_flag = t2.visual_ticking_flag = ON;
else
t1.visual_ticking_flag = t2.visual_ticking_flag = OFF;

cprintf( "\n Enable time warning? " );
inp = getche();
if( inp == 'y' || inp == 'Y' )
{
t1.time_warning_flag = t2.time_warning_flag = ON;
cprintf( " At how many minutes? " );
gets( inputstr );
t1.warning = t2.warning = atoi( inputstr );
}
else
t1.time_warning_flag = t2.time_warning_flag = OFF;

textcolor( GREEN | BLINK );
_setcursortype( _NOCURSOR );
printf( "\n\n\n\n\n\n\n\n\n\n\n\n" );
cprintf( " PRESS A KEY TO BEGIN" );
while ( !getch() );

graphics_setup( WHITE );

t1.initialize_clock();
t1.moves++;
t1.display_moves();
t1.clock_on();
t2.initialize_clock();
t2.clock_on();

while ( PLAY )
{
t1.moves++;
t1.display_moves();
t1.clock_on();
t2.clock_on();
}

} // End play()


void opening_screen()
{
char topline[] = "Chess Clock",
by_line[] = "by",
name_line[] = "M\\Cooper",
endline[] = "PRESS A KEY";

graphics_setup( CYAN );
settextstyle( GOTHIC_FONT, HORIZ_DIR, HEADLINE_SIZE );
settextjustify( CENTER_TEXT, CENTER_TEXT );
setcolor( MAGENTA );
outtextxy( TOPX, TOPY, topline );

settextstyle( TRIPLEX_FONT, HORIZ_DIR, BY_LINE_SIZE );
setcolor( BLUE );
outtextxy( BY_LINE_X, BY_LINE_Y, by_line );

setfillstyle( BAR_PATTERN, BAR_COLOR );
bar3d( BAR_LEFT, BAR_TOP, BAR_RIGHT, BAR_BOTTOM, BAR_DEPTH, BAR_TOPFLAG );

setfillstyle( PIE_PATTERN, PIE_COLOR );
pieslice( PIE1_X, PIE_Y, PIE_STARTANGLE, PIE_ENDANGLE, PIE_RADIUS );
pieslice( PIE2_X, PIE_Y, PIE_STARTANGLE, PIE_ENDANGLE, PIE_RADIUS );
circle( PIE1_X, PIE_Y, CIRC_RAD );
circle( PIE2_X, PIE_Y, CIRC_RAD );
line( LINE1_X, LINE_Y1, LINE1_X, LINE_Y2 );
line( LINE2_X, LINE_Y1, LINE2_X, LINE2_Y2 );
setfillstyle( PIE_PATTERN, WHITE );
bar( B1_LEFT, B1_TOP, B1_RIGHT, B_BOTTOM );
bar( B2_LEFT, B2_TOP, B2_RIGHT, B_BOTTOM );


settextstyle( TRIPLEX_FONT, HORIZ_DIR, NAME_LINE_SIZE );
setcolor( BLUE );
outtextxy( NAME_LINE_X, NAME_LINE_Y, name_line );

sleep( DELAY );

settextstyle( TRIPLEX_FONT, HORIZ_DIR, ENDLINE_SIZE );
setcolor( RED );
outtextxy( ENDLINE_X, ENDLINE_Y, endline );

getch();
closegraph();

return;
}




  3 Responses to “Category : Linux Files
Archive   : CHESSCLK.ZIP
Filename : CHESSCLK.CPP

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/