Example #1
0
int GetKey(keyboard_t *keyboard)
{
	int key_pressed = 0;
	do
	{
		KeyPoll(keyboard);
		key_pressed = KeyGetPressed(keyboard);
	} while (!key_pressed);
	return key_pressed;
}
Example #2
0
int main( int argc, char* argv[] )
{

    sem_t *sem;
    char sem_str[20];

    char str[40]; // general purpose string

    strcpy( sem_str, argv[1] );

    sem = sem_open( sem_str, O_CREAT );
    if ( sem == SEM_FAILED ) {
        perror( "keypoll semaphore" );
        exit(1);
    }

    CursorOff( sem );

    sem_wait( sem );

    sprintf( str, "\033[%d;%dH", 1, 1 );
    write( OUT, str, strlen(str) );
    sprintf( str, "Pick a character from the alphabet" );
    write( OUT, str, strlen(str) );

    sprintf( str, "\033[%d;%dH", 2, 2 );
    write( OUT, str, strlen(str) );
    sprintf( str, "5 seconds !!" );
    write( OUT, str, strlen(str) );

    sem_post( sem );

    int i;
    int j = 5;
    char ch;
    // increase keypoll sensitivity -- check 4 times a second
    for ( i = 20; i > 0; i-- ) {
        if ( (i % 5) == 0 ) {
            PutChar( 2, 2, j + 48, sem );
            j--;
        }
        usleep( USEC );
        ch = KeyPoll();
        if ( ch != ' ' && (int)ch > 64 && (int)ch < 123 ) {
            if ( (int)ch > 90 ) {
                ch = (char)((int)ch - 32); // make it a capital letter
            }
            break;
        }
    }

    sprintf( str, "\033[%d;%dH", 2, 2 ); // will position cursor
    if ( ch == ' ' ) {
      // i'll pick for you

        // be more random
        srand( time(NULL) * getpid() );
        ch = (char) (rand() % 26) + 64;

        char sentence[40];
        sprintf( sentence, "0 seconds !! I've picked for you:" );
        sem_wait( sem );

        write( OUT, str, strlen(str) ); // position cursor
        write( OUT, sentence, strlen(sentence) );

        sem_post( sem );

        sprintf( str, "\033[%d;%dH", 2, (strlen(sentence) + 3) );
        char space = ' ';

        sem_wait( sem );
        for ( i = 0; i < 15; i++ ) {
            write( OUT, str, strlen(str) );
            write( OUT, &space, 1 );

            usleep( USEC * 2 );

            write( OUT, str, strlen(str) );
            write( OUT, &ch, 1 );

            usleep( USEC * 2 );
        }
        sem_post( sem );
    } else {
      // you picked
        char sentence[40];
        sprintf( sentence, "0 seconds !! You've picked:" );
        sem_wait( sem );

        write( OUT, str, strlen(str) ); // position cursor
        write( OUT, sentence, strlen(sentence) );

        sem_post( sem );

        sprintf( str, "\033[%d;%dH", 2, (strlen(sentence) + 3) );
        char space = ' ';

        sem_wait( sem );
        for ( i = 0; i < 7; i++ ) {
           
            write( OUT, str, strlen(str) );
            write( OUT, &space, 1 );

            usleep( USEC * 2 );
           
            write( OUT, str, strlen(str) ); 
            write( OUT, &ch, 1 );

            usleep( USEC * 2 );
        }
        sem_post( sem );
    }
    usleep( USEC * 10 );
    exit ((int)ch);
}