int GetKey(keyboard_t *keyboard) { int key_pressed = 0; do { KeyPoll(keyboard); key_pressed = KeyGetPressed(keyboard); } while (!key_pressed); return key_pressed; }
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); }