home *** CD-ROM | disk | FTP | other *** search
/ Ultimate Game Collection / XULTI.ISO / 420 / wak.c < prev    next >
C/C++ Source or Header  |  1996-04-05  |  7KB  |  260 lines

  1. /***************************************************************************
  2.                                        W A K
  3.                               WORD "TACHISTOSCOPE"
  4.  
  5.                                      M\Cooper
  6.                                3425 Chestnut Ridge Rd.
  7.                              Grantsville, MD 21536-9801
  8.                            -------------------------------
  9.                            E-mail: thegrendel@gcc.cc.md.us
  10.  
  11. ****************************************************************************/
  12.  
  13.  
  14. #include <stdio.h>
  15. #include <time.h>
  16. #include <conio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <graphics.h>
  20. #include <ctype.h>
  21. #include <dos.h>
  22. #include "scrn2.h"
  23. #include "wak.h"
  24.  
  25.  
  26. void main( int argc, char **argv )
  27. {
  28.    char Filename [FILENAMELEN ],
  29.         av = 'X';
  30.    struct Stats stats;
  31.    struct Parameters dParams;
  32.  
  33.       randomize();
  34.       opening_screen();
  35.  
  36.  
  37.       if( argc > MIN_ARG_CNT )
  38.          av = *( *(argv + 1) );
  39.  
  40.       if( av == DEFAULT1 || av == DEFAULT2 )
  41.              {
  42.              dParams = set_defaults();
  43.              strcpy( Filename, dParams.filename );
  44.              }
  45.        else
  46.          { 
  47.          dParams = param_screen();
  48.          strcpy( Filename, dParams.filename );
  49.          }
  50.  
  51.       if( dParams.cdnscr )
  52.          countdown_screen();
  53.  
  54.       graphics_setup( WHITE );
  55.       top_display();
  56.       bottom_display();
  57.  
  58.       stats = getword( dParams );
  59.  
  60.       exit__( stats );
  61. }
  62.  
  63. void display_word( char *word )
  64. {
  65.  
  66.       settextstyle( SANS_SERIF_FONT, HORIZ_DIR, TEXT_SIZE );
  67.       settextjustify( CENTER_TEXT, TOP_TEXT );
  68.  
  69.       setcolor( LIGHTRED );
  70.       outtextxy( X_COORD, Y_COORD, word );
  71.  
  72.       return;
  73. }
  74.  
  75.  
  76. void erase( char *txt, int fontname, int fontsize, int xcoord, int ycoord )
  77. {
  78.  
  79.       settextstyle( fontname, HORIZ_DIR, fontsize );
  80.       settextjustify( CENTER_TEXT, TOP_TEXT );
  81. //                    ===========
  82.       setcolor( BACKGROUND_COLOR ); //BLUE for debug
  83.       outtextxy( xcoord, ycoord, txt );
  84.  
  85.       return;
  86. }
  87.  
  88. void exit__( struct Stats st )
  89. {
  90.    float freq;
  91.  
  92.       closegraph();
  93.  
  94.       printf( "\nSTATISTICS FOR THIS RUN\n" );
  95.       printf( "\nYou looked at %ld words.", st.wds );
  96.       printf( "\nTime elapsed is %d:", st.minutes );
  97.       printf( "%02d.", st.seconds );
  98.  
  99.       printf( "\n\nThe final \"time delay constant\" was %d/1000 sec.",
  100.               st.interval );
  101.       freq = (float)st.wds / (float)st.total_seconds;
  102.       printf( "\nInitial display speed setting was %4.2f \"speed units\".",
  103.               st.requested_freq );
  104.       printf( "\n*Final* display speed setting was %4.2f \"speed units\".",
  105.               st.frequency );
  106.       printf( "\nThe final display =frequency= was %4.2f words/second.\n\n", 
  107.                freq );
  108.  
  109.       exit( QUIT );
  110. }
  111.  
  112.  
  113. struct Stats getword( struct Parameters params )
  114. {
  115.    char word [MAXWORDLEN],
  116.         ch;
  117.    FILE *wfp;      
  118.    struct Stats statistics;
  119.    time_t starting_time;
  120.  
  121.       statistics.wds = 0L;
  122.       statistics.interval = FREQ2PERIOD / params.frequency;
  123.       statistics.total_seconds = 0;
  124.       statistics.requested_freq = params.frequency;
  125.       starting_time = time( NULL ); //Start clock.
  126.  
  127.       wfp = fopen( params.filename, "r" );
  128.  
  129.       
  130.  
  131.       while( !feof( wfp)
  132.              && statistics.wds < params.maxwords
  133.              && statistics.total_seconds < params.maxtime )   //ZZZ
  134.          {
  135.          if( kbhit() )
  136.             {
  137.             ch = getch();
  138.  
  139.             if( ch == ESC )
  140.                 break;
  141.             if( ch == 'f' && statistics.interval > INCREMENT )
  142.                statistics.interval -= INCREMENT;
  143.             if( ch == 'F' && statistics.interval > BIG_INCREMENT )
  144.                statistics.interval -= BIG_INCREMENT;
  145.             if( ch == 's' && statistics.interval < MAXINTERVAL )
  146.                statistics.interval += INCREMENT;
  147.             if( ch == 'S' && statistics.interval < MAXINTERVAL )
  148.                statistics.interval += BIG_INCREMENT;
  149.  
  150.             statistics.frequency = FREQ2PERIOD / statistics.interval;
  151.             }    
  152.  
  153.          fgets( word, MAXWORDLEN - 1, wfp);
  154.          strupr( word );          //Convert to u/c
  155.          display_word( word );
  156.          delay( statistics.interval );       //How long to display word
  157.          erase( word, SANS_SERIF_FONT, TEXT_SIZE, X_COORD, Y_COORD );
  158.          statistics.frequency = FREQ2PERIOD / statistics.interval;
  159.          statistics.total_seconds = time( NULL) - starting_time;
  160.          statistics.minutes = statistics.total_seconds / 60;
  161.          statistics.seconds = statistics.total_seconds % 60;
  162.          statistics.wds++;
  163.  
  164.          top_stats( statistics );
  165.          }
  166.  
  167.       fclose( wfp );
  168.  
  169.       return( statistics );
  170. }
  171.  
  172.  
  173. void top_display()
  174. {
  175.       setcolor( TOP_COLOR );
  176.       line( TX1, TY1, TX2, TY2 );
  177.  
  178.       settextstyle( TRIPLEX_FONT, HORIZ_DIR, SMALL_TEXT_SIZE );
  179.       settextjustify( LEFT_TEXT, TOP_TEXT );
  180.  
  181.       outtextxy( TMX, TMY, TMWORD );
  182.       outtextxy( TRX, TRY, TRWORD );
  183.  
  184.       return;
  185. }
  186.  
  187. void bottom_display()
  188. {
  189.       setcolor( BOTTOM_COLOR );
  190.       line( BX1, BY1, BX2, BY2 );
  191.  
  192.       settextstyle( TRIPLEX_FONT, HORIZ_DIR, SMALL_TEXT_SIZE );
  193.       settextjustify( LEFT_TEXT, TOP_TEXT );
  194.  
  195.       outtextxy( BLX, BLY, LWORD );
  196.       outtextxy( BMX, BMY, MWORD );
  197.       outtextxy( BRX, BRY, RWORD );
  198.  
  199.       return;
  200. }
  201.  
  202. char *top_stats( struct Stats topstats )
  203. {
  204.    static char words      [NUMLEN],
  205.           frequency       [NUMLEN],
  206.           time            [NUMLEN];
  207.  
  208.    static float prev_freq;
  209.    static time_t prev_time;
  210.  
  211.       if( topstats.wds ) //If number of words > 0, only...
  212.          {
  213.          erase( words,
  214.                 TRIPLEX_FONT, SMALL_TEXT_SIZE, TMX - TOFFSET, TMY );
  215.          if( topstats.frequency != prev_freq )
  216.             erase( frequency,
  217.                 TRIPLEX_FONT, SMALL_TEXT_SIZE, TRX - TOFFSET - TROFFSET, TMY );
  218.  
  219.          if( topstats.total_seconds != prev_time )
  220.             {
  221.             if( topstats.total_seconds > 1 && ( topstats.seconds % 10 ) )
  222.                erase( time + 4,
  223.                       TRIPLEX_FONT, SMALL_TEXT_SIZE, TLX + TCOMPOFFSET, TLY );
  224.             else
  225.                erase( time,
  226.                       TRIPLEX_FONT, SMALL_TEXT_SIZE, TLX, TLY );
  227.             }
  228.  
  229.          setcolor( TOP_COLOR ); 
  230.  
  231.          settextstyle( TRIPLEX_FONT, HORIZ_DIR, SMALL_TEXT_SIZE );
  232.          settextjustify( CENTER_TEXT, TOP_TEXT );
  233.  
  234.          sprintf( words, "%ld", topstats.wds );
  235.          outtextxy( TMX - TOFFSET, TMY, words );
  236.  
  237.          if( topstats.frequency != prev_freq )
  238.             {
  239.             sprintf( frequency, "%3.2f", topstats.frequency );
  240.             outtextxy( TRX - TOFFSET - TROFFSET, TRY, frequency );
  241.             }
  242.  
  243.          if( topstats.total_seconds != prev_time )
  244.             {
  245.             sprintf( time, "%02d:%02d", topstats.minutes, topstats.seconds );
  246.  
  247.             if( topstats.total_seconds > 1 && ( topstats.seconds % 10 ) )
  248.                outtextxy( TLX + TCOMPOFFSET, TLY, time + 4 );
  249.             else
  250.                outtextxy( TLX, TLY, time );
  251.             }
  252.  
  253.          }
  254.  
  255.       prev_freq = topstats.frequency;
  256.       prev_time = topstats. total_seconds;
  257.  
  258.       return ( words );
  259. }
  260.