void Action_answerer::question(Question_data data) { queue.enqueue(data); if (queue.count() == 1) { display_question(); } }
static void callback(void *arg, int status, int timeouts, unsigned char *abuf, int alen) { char *name = (char *) arg; int id, qr, opcode, aa, tc, rd, ra, rcode; unsigned int qdcount, ancount, nscount, arcount, i; const unsigned char *aptr; (void) timeouts; /* Display the query name if given. */ if (name) printf("Answer for query %s:\n", name); /* Display an error message if there was an error, but only stop if * we actually didn't get an answer buffer. */ if (status != ARES_SUCCESS) { printf("%s\n", ares_strerror(status)); if (!abuf) return; } /* Won't happen, but check anyway, for safety. */ if (alen < HFIXEDSZ) return; /* Parse the answer header. */ id = DNS_HEADER_QID(abuf); qr = DNS_HEADER_QR(abuf); opcode = DNS_HEADER_OPCODE(abuf); aa = DNS_HEADER_AA(abuf); tc = DNS_HEADER_TC(abuf); rd = DNS_HEADER_RD(abuf); ra = DNS_HEADER_RA(abuf); rcode = DNS_HEADER_RCODE(abuf); qdcount = DNS_HEADER_QDCOUNT(abuf); ancount = DNS_HEADER_ANCOUNT(abuf); nscount = DNS_HEADER_NSCOUNT(abuf); arcount = DNS_HEADER_ARCOUNT(abuf); /* Display the answer header. */ printf("id: %d\n", id); printf("flags: %s%s%s%s%s\n", qr ? "qr " : "", aa ? "aa " : "", tc ? "tc " : "", rd ? "rd " : "", ra ? "ra " : ""); printf("opcode: %d %s\n", opcode, opcodes[opcode]); printf("rcode: %d %s\n", rcode, rcodes[rcode]); printf("qdcount: %d\n", qdcount); printf("ancount: %d\n", ancount); printf("nscount: %d\n", nscount); printf("arcount: %d\n", arcount); /* Display the questions. */ printf("Questions:\n"); aptr = abuf + HFIXEDSZ; for (i = 0; i < qdcount; i++) { aptr = display_question(aptr, abuf, alen); if (aptr == NULL) return; } /* Display the answers. */ printf("Answers:\n"); for (i = 0; i < ancount; i++) { aptr = display_rr(aptr, abuf, alen); if (aptr == NULL) return; } /* Display the NS records. */ printf("NS records:\n"); for (i = 0; i < nscount; i++) { aptr = display_rr(aptr, abuf, alen); if (aptr == NULL) return; } /* Display the additional records. */ printf("Additional records:\n"); for (i = 0; i < arcount; i++) { aptr = display_rr(aptr, abuf, alen); if (aptr == NULL) return; } }
int main(int argc, char *argv[]) { // An array of 4 players, may need to be a pointer if you want it set dynamically player players[NUM_PLAYERS]; // Input buffer and and commands //char buffer[BUFFER_LEN] = { 0 }; // Display the game introduction and initialize the questions initialize_game(); // Prompt for players names printf("This is Jeopardy \n"); // initialize each of the players in the array for(int i = 0; i < 4; i++) { players[i].score = 0; printf("Enter player name: "); scanf("%s", (char *) &players[i].name); } // Perform an infinite loop getting command input from users until game ends //while (fgets(buffer, BUFFER_LEN, stdin) != NULL) while(!answered_status()) { system("clear"); char selected_player[MAX_LEN] = ""; char selected_category[MAX_LEN] = ""; int selected_val = 0; do { if(strcmp(selected_player, "") != 0) printf("The player %s was not found", selected_player); printf("Enter first player's name: "); scanf("%s", (char *) &selected_player); } while(!player_exists(players, 4, selected_player)); do { if(selected_val != 0) printf("Invalid selection"); printf("Enter category: "); getchar(); fgets((char *) selected_category, MAX_LEN, stdin); strtok(selected_category, "\n"); printf("Enter: "); scanf("%d", (int *) &selected_val); } while(already_answered(selected_category, selected_val)); system("clear"); display_question(selected_category, selected_val); char *answer[MAX_LEN] = {0}; getchar(); fgets((char *) answer, MAX_LEN, stdin); char *tokenize_answer; tokenize((char *) answer, &tokenize_answer); if(tokenize_answer == NULL) printf("Try again"); else if(valid_answer(selected_category, selected_val, tokenize_answer)) { printf("Correct Answer!"); printf("%s gains %d points \n", selected_player, selected_val); update_score(players, 4, selected_player, selected_val); } else { printf("Wrong Answer!"); int num = get_question_number(selected_category, selected_val); printf("Correct answer was: %s", questions[num].answer); } track_answered(selected_category, selected_val); // Call functansions from the questions and players source files // Execute the game until all questions are answered // Display the final results and exit } show_results(players, 4); getchar(); return EXIT_SUCCESS; }
void dns_detail_callback(void *arg, int status, int timeouts, unsigned char *abuf, int alen) { int id, qr, opcode, aa, tc, rd, ra, rcode; unsigned int qdcount, ancount, nscount, arcount, i; const unsigned char *aptr; dns_resp_t *response = (dns_resp_t *) arg; clearstrbuffer(response->msgbuf); response->msgstatus = status; /* * Display an error message if there was an error, but only stop if * we actually didn't get an answer buffer. */ switch (status) { case ARES_SUCCESS: break; case ARES_ENODATA: addtobuffer(response->msgbuf, "No data returned from server\n"); if (!abuf) return; break; case ARES_EFORMERR: addtobuffer(response->msgbuf, "Server could not understand query\n"); if (!abuf) return; break; case ARES_ESERVFAIL: addtobuffer(response->msgbuf, "Server failed\n"); if (!abuf) return; break; case ARES_ENOTFOUND: addtobuffer(response->msgbuf, "Name not found\n"); if (!abuf) return; break; case ARES_ENOTIMP: addtobuffer(response->msgbuf, "Not implemented\n"); if (!abuf) return; break; case ARES_EREFUSED: addtobuffer(response->msgbuf, "Server refused query\n"); if (!abuf) return; break; case ARES_EBADNAME: addtobuffer(response->msgbuf, "Invalid name in query\n"); if (!abuf) return; break; case ARES_ETIMEOUT: addtobuffer(response->msgbuf, "Timeout\n"); if (!abuf) return; break; case ARES_ECONNREFUSED: addtobuffer(response->msgbuf, "Server unavailable\n"); if (!abuf) return; break; case ARES_ENOMEM: addtobuffer(response->msgbuf, "Out of memory\n"); if (!abuf) return; break; case ARES_EDESTRUCTION: addtobuffer(response->msgbuf, "Timeout (channel destroyed)\n"); if (!abuf) return; break; default: addtobuffer(response->msgbuf, "Undocumented ARES return code\n"); if (!abuf) return; break; } /* Won't happen, but check anyway, for safety. */ if (alen < HFIXEDSZ) return; /* Parse the answer header. */ id = DNS_HEADER_QID(abuf); qr = DNS_HEADER_QR(abuf); opcode = DNS_HEADER_OPCODE(abuf); aa = DNS_HEADER_AA(abuf); tc = DNS_HEADER_TC(abuf); rd = DNS_HEADER_RD(abuf); ra = DNS_HEADER_RA(abuf); rcode = DNS_HEADER_RCODE(abuf); qdcount = DNS_HEADER_QDCOUNT(abuf); ancount = DNS_HEADER_ANCOUNT(abuf); nscount = DNS_HEADER_NSCOUNT(abuf); arcount = DNS_HEADER_ARCOUNT(abuf); /* Display the answer header. */ sprintf(msg, "id: %d\n", id); addtobuffer(response->msgbuf, msg); sprintf(msg, "flags: %s%s%s%s%s\n", qr ? "qr " : "", aa ? "aa " : "", tc ? "tc " : "", rd ? "rd " : "", ra ? "ra " : ""); addtobuffer(response->msgbuf, msg); sprintf(msg, "opcode: %s\n", opcodes[opcode]); addtobuffer(response->msgbuf, msg); sprintf(msg, "rcode: %s\n", rcodes[rcode]); addtobuffer(response->msgbuf, msg); /* Display the questions. */ addtobuffer(response->msgbuf, "Questions:\n"); aptr = abuf + HFIXEDSZ; for (i = 0; i < qdcount; i++) { aptr = display_question(aptr, abuf, alen, response); if (aptr == NULL) return; } /* Display the answers. */ addtobuffer(response->msgbuf, "Answers:\n"); for (i = 0; i < ancount; i++) { aptr = display_rr(aptr, abuf, alen, response); if (aptr == NULL) return; } /* Display the NS records. */ addtobuffer(response->msgbuf, "NS records:\n"); for (i = 0; i < nscount; i++) { aptr = display_rr(aptr, abuf, alen, response); if (aptr == NULL) return; } /* Display the additional records. */ addtobuffer(response->msgbuf, "Additional records:\n"); for (i = 0; i < arcount; i++) { aptr = display_rr(aptr, abuf, alen, response); if (aptr == NULL) return; } return; }
int main(int argc, char *argv[]) { srand(time(NULL)); // An array of 4 players, may need to be a pointer if you want it set dynamically player players[4]; // Input buffer and and commands char buffer[BUFFER_LEN] = { 0 }; // Display the game introduction and prompt for players namesc printf("Welcome to Jeopardy: CSCI-3020 Edition! \n \n"); // initialize each of the players in the array for (int i = 0; i < 4; i++){ printf("Enter the name of player %d. \n", i); scanf("%s", players[i].name); printf("\n"); players[i].score = 0; } initialize_game(); int *turnOrder = (int*)malloc(4*sizeof(int)); generateTurnOrder(turnOrder); printf("Turn Order: \n"); printf("--------------- \n"); for (int i = 0; i <= 3; i++){ printf("%d \n", turnOrder[i]); } printf("---------------\n"); player selectedPlayer; char *category = (char*)calloc(256,sizeof(char)); int value; // Perform an infinite loop getting command input from users until game ends while (fgets(buffer, BUFFER_LEN, stdin) != NULL) { for(int i = 0; i < 4; i++){ selectedPlayer = players[turnOrder[i] - 1]; printf("%s's turn. \n", selectedPlayer.name); display_categories(); printf("\nSelect a category: \n"); scanf("%s", category); printf("\nSelect a value: \n"); scanf("%d", &value); display_question(category, value); } // Call functions from the questions and players source files // Execute the game until all questions are answered // Display the final results and exit } free(turnOrder); return EXIT_SUCCESS; }