コード例 #1
0
ファイル: Deck.cpp プロジェクト: Daleth7/BlackJack
void Deck::shuffle(){
    Deck_t new_deck(0);
    while(m_deck.size() > 0){
        auto iter(m_deck.begin());
        advance(iter, m_gen() % m_deck.size());
        new_deck.push_front(*iter);
        m_deck.erase(iter);
    }
    m_deck = new_deck;
}
コード例 #2
0
END_TEST

START_TEST (a_deck_with_21_cards_is_not_busted)
{
  Deck *sut = new_deck();
  Card* card1 = new_card(1, 10);
  Card* card2 = new_card(2, 11);
  deck_push_card(sut,card1);
  deck_push_card(sut,card2);
  ck_assert_msg (is_busted(sut) == 0, 
         "Deck with 21 Cards Is Not Busted");
}
コード例 #3
0
END_TEST

START_TEST (should_be_able_to_tell_if_a_busted_deck_has_busted)
{
  Deck *sut = new_deck();
  Card* card1 = new_card(1, 11);
  Card* card2 = new_card(2, 12);
  deck_push_card(sut,card1);
  deck_push_card(sut,card2);
  ck_assert_msg (is_busted(sut) == 1, 
         "23 Point Deck Should Bust");
}
コード例 #4
0
ファイル: serve_client.c プロジェクト: lipecki/server_test
// from UDP made simple at https://www.abc.se/~m6695/udp.html
int main(int argc, char *argv[]) {
	

	struct sockaddr_in si_me, si_oth,si_other[4];
	int s, sockFd[4];
	socklen_t slen=sizeof(struct sockaddr_in);
	ssize_t len;
	FILE *fd;

	fd = fopen("/var/tmp/serve_client","w");
	char buf[BUFLEN]={"start"};
	char *trick[4];
	FF_trick(trick);

	//Game initiation, shuffling and dealing.
	Card sorted_deck[52];
	Card shuffled_deck[52];
	char *deck[52];
	new_deck(sorted_deck);
	shuffle_deck(sorted_deck,shuffled_deck);
	convert_card_struct(shuffled_deck,deck,buf);
	Game *game = malloc(sizeof(Game));
	memcpy(game->deck,deck,sizeof(deck));
	for (int k = 0; k < 4; k++) memcpy(game->buffer[k],buf, sizeof(buf));
	for (int k = 0; k < 4; k++) printf("Shuffled deck: \n%s\n\n",game->buffer[k]);

	//get communication going
	if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
		diep("socket");
	printf("socket open\n");
	memset((char *) &si_me, 0, sizeof(si_me));
	si_me.sin_family = AF_INET;
	si_me.sin_port = htons(GAMEPORT);
	si_me.sin_addr.s_addr = htonl(INADDR_ANY);
	if (bind(s, (struct sockaddr *) &si_me, sizeof(si_me))==-1)
		diep("bind");
	printf("bound\n");

	//Player initiation
	int counter[4];
	for(int i=0;i<4;i++){
		counter[i] = i;
	}

	pthread_t players[4];
	for(int i=0;i<4;i++){
		pthread_t tmp=0;
		players[i] = tmp;
	}
	//Player thread arguments are initiated
	Player player[4];
	for(int i=0;i<4;i++){
		memset((char *) &si_other[i], 0, sizeof(si_other[i]));
		Player tmp={i,&s,game,&si_me,&si_other[i]};
		memcpy(&player[i], (void *) &tmp, sizeof(tmp));
	}
	//deal cards into each player's game buffer
	for (int k = 0; k < 4; k++) {
		sprintf(player[k].game->buffer[k],"%s;",game->deck[k]);
		for(int j=4;j<52;j+=4) {
			strcat(player[k].game->buffer[k], game->deck[(j+k)]);
			strcat(player[k].game->buffer[k],";");
		}
		printf("Player %d game buffer: %s\n",k,player[k].game->buffer[k]);
	}
	for (int k = 0; k < 4; k++)printf("Player %d game buffer: %s\n",k,player[k].game->buffer[k]);

	//deal cards into player hands
	for (int k = 0; k < 4; k++) {
		for(int j=0;j<52;j+=4) {
			player[k].game->hands[k][j/4] = malloc(3);
			strcpy(player[k].game->hands[k][j/4], game->deck[(j+k)]);
		}
	}
	/* print hands
	for (int k = 0; k < 4; k++) {
		printf("Player %d game hand: ", k);
		for (int l = 0; l < 13; l++) {
			printf("%s ", player[k].game->hands[k][l]);
		}
		printf("\n");
	}*/


	int j=0,connected=0;
	void *buffer = (void *) strdup(buf);
	bool connections[]={false,false,false,false};
	char *this_is_my_pos[4];

	do{
		printf("inet: %s\tsocket descriptor: %d\n\n",
		       inet_ntoa(player[j].si_other->sin_addr),
				 player[j].sockfd);
		if((len = recvfrom(s, buffer, BUFLEN, 0, &si_oth, &slen)) == -1) diep("recvfrom()");

		//check given position
		separate_strings(buffer,";",this_is_my_pos,4);
		if((j=find_DD(this_is_my_pos,4))== -1) printf("not a new connection\n");
		if(j < 4 && j >= 0 && !connections[j]){
			//In preparation for threads
			sockFd[j]= s;
			player[j].sockfd = &sockFd[j];
			strcpy(si_other[j].sin_zero,si_oth.sin_zero);
			si_other[j].sin_addr.s_addr=si_oth.sin_addr.s_addr;
			si_other[j].sin_port=si_oth.sin_port;
			si_other[j].sin_family=si_oth.sin_family;
			player[j].si_other = &si_other[j];

			printf("pthread to addr: %d\n",si_oth.sin_addr.s_addr);
			//pthread_create(&players[j],NULL,&player_waits_or_plays,(void *) &player[j]);

			//Signal that four clients are connected
			connections[j]=true;
			connected += 1;
		} else perror("not a new connection\n");


		printf("Received packet from IP-address: %s: Port: %d\nPosition: %d\nData: %s\nLength: %d\n",
		       inet_ntoa(si_oth.sin_addr), ntohs(si_oth.sin_port),
		       j,
		       (char *) buffer,(int) len);
		//strängen delas upp i fyra
		separate_strings(buffer,";",trick,4);
		printf("received split into: %s",trick[0]);
		for(int i=1;i<4;i++) printf(" %s",trick[i]);

		//skicka första handen
		printf("\nSending packet: \n%s\nto player %d\n", game->buffer[j],j);
		if (sendto(s, game->buffer[j], 200, 0, (struct sockaddr *) &si_oth,  slen)==-1)
			diep("sendto()");

	} while (connected<4);

	int starter=0;
	// Här börjar spelet, första handen har skickats till klienterna. Vem börjar?
	starter=who_starts(game->hands);
	int winner=-1;

	printf("player %d starts\n", starter);
	EE_trick(trick,starter);
	printf("Winner: %d\n", winner=check_winner(trick,starter));
	EE_trick(trick,starter);
	EE_trick(game->trick,starter);

	// Lägg nu sticket i fyra buffertar, en till varje spelare (overkill!)
	for (int m = 0; m < 4; m++) {
		for (int k = 0; k < 4; k++) {
			if (!k) sprintf(player[m].game->buffer[m], "%s;", trick[0]);
			else {
				strcat(game->buffer[m], trick[k]);
				strcat(game->buffer[m], ";");
			}
			printf("Game buffer: %s\n", game->buffer[m]);
		}
	}
	for (int k = 0; k < 4; k++)printf("Player %d game buffer: %s\n",k,player[k].game->buffer[k]);

	for (int l = 0; l < 4; l++) {
		if ((len = recvfrom(s, buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1)
			diep("recvfrom()");
		if (si_other[l].sin_addr.s_addr == si_oth.sin_addr.s_addr) {
			if (sendto(s, game->buffer[l], sizeof(game->buffer[l]), 0, (struct sockaddr *) &si_other[l],
				   slen) == -1)
				diep("sendto()");
			printf("Skickar %s till spelare %d\n",game->buffer[l], player[l].pos);
		}
	}

	/*for (int l = 0; l < 4; l) {
		if((len = recvfrom(s, buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1) diep("recvfrom()");
	}*/
	int o=0;
	do{
		if((len = recvfrom(s, buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1) diep("recvfrom()");
		printf("from addr: %d\n",si_oth.sin_addr.s_addr);
		if ((strstr(buffer,"00"))) {
			for (int m = 0; m < 4; m++) {
				sprintf(player[m].game->buffer[m], "%s;", buffer);
				printf("Buffer written: %s\n", buffer);
			}
			for (int l = 0; l < 4; l++) {
				if (si_other[l].sin_addr.s_addr == si_oth.sin_addr.s_addr) {
					if (sendto(s, game->buffer[l], sizeof(game->buffer[l]), 0,
						   (struct sockaddr *) &si_other[l],
						   slen) == -1)
						diep("sendto()");
					printf("Skickar %s till spelare %d\n", buffer, player[l].pos);
					//pthread_create(&players[l], NULL, &player_waits_or_plays, (void *) &player[l]);
				}

			}
		}
	} while (!(strstr(buffer,"00")));
	void *new_buffer;
	void *best_buffer;
	new_buffer = malloc(40);
	best_buffer = malloc(40);
	int FFs=0, best_count=4;
	// så länge första handen spelas vill vi jämföra skickade händer med mottagna händer
	while(strstr(buffer, "00") && strstr(buffer,"FF")){
		if((len = recvfrom(s, new_buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1) diep("recvfrom()");
		//Vill du ha hela din hand igen?
		if(strstr((char*) new_buffer, "DD")){
			for (int i = 0; i < 4; i++) {
				if(si_oth.sin_addr.s_addr==player[i].si_other->sin_addr.s_addr){
					if (sendto(s, game->hands[i],
						   sizeof(game->hands[i]), 0,
						   (struct sockaddr *) &si_other[i],
						   slen) == -1) diep("sendto()");
					// inga onödiga loopar!
					break;
				}
			}
			//tillbaka till att ta emot igen!
			continue;
		}
		else if((strcmp((char *) buffer, (char *) new_buffer)) && !(strstr(new_buffer, "EE"))) {
			printf("Gammalt stick: %s\nUppdaterat stick: %s",(char*) buffer, (char*) new_buffer);
			char *tmp = strdup(new_buffer);
			if((FFs= count_FF(tmp)) < best_count) best_count = FFs;
			else continue;		// skriv inte över sticket om det inte nästa kort spelats
			strcpy((char*)buffer, new_buffer);
			split((char*) buffer,';',game->trick);


			//bufferten måste återställas efter split()
			strcpy((char*)buffer, new_buffer);
			printf("\nkontroll av pekare: : \n");
			for (int i = 0; i < 4; i++) printf("trick %d: %s\n",i,game->trick[i]);
			for (int i = 0; i < 4; i++) printf("trick %d: %s\n",i,game->trick[i]);

			for (int l = 0; l < 4; l++){
				strcpy(game->buffer[l],new_buffer);
				if (sendto(s, game->buffer[l], sizeof(game->buffer[l]), 0,
					   (struct sockaddr *) &si_other[l], slen) == -1)
					diep("sendto()");
				else printf("Precis skickat %s till spelare %d\n",game->buffer[l], player[l].pos);
			}
		}
	}
	assert(!strstr(game->buffer[0],"FF"));
	split(game->buffer[0],';',trick);
	//Ta reda på vem som vann sticket
	//int winner=-1;
	printf("Winner: %d\n", winner=check_winner(trick,starter));
	// Jag räknar med att klienten ställer frågor om sticket
	EE_trick(trick,winner);
	EE_trick(game->trick,winner);

	// Förmodligen börjar en do-while-loop här som kör så länge


	// Switch-sats beroende på



	/*while(strcmp(buffer,"quit")){
		printf("buffer: %s \n",player[j].game->buffer);
		if ((len = recvfrom(s, buffer, BUFLEN, 0, &si_oth, &slen)) == -1) diep("recvfrom()");
		printf("Received packet from %s:%d\nData: %s\nLength: %d\n",
		       inet_ntoa(si_oth.sin_addr), ntohs(si_oth.sin_port), (char *) buffer,len);
	*/	//counter[j] = pthread_create(&players[j], NULL, &player_waits_or_plays, (void *) &player[j]);
		//pthread_join((players[j]),NULL);

	printf("\nclient data: %s \n",buffer);
	separate_strings(buffer,";",trick,4);
	printf("received split into: %s",trick[0]);
	for(int i=1;i<4;i++) printf(" %s",trick[i]);
	printf("\n");
	/*	//Receive data and start game threads for each client
		for(int j=0;j<4;j++) {
			if ((len = recvfrom(player[j].sockfd, player[j].game->buffer, BUFLEN, 0, &si_other[i], &slen)) == -1) diep("recvfrom()");
			counter[j++] = pthread_create(&players[j], NULL, &player_waits_or_plays, (void *) &player[j]);
			printf("Received packet from %s:%d\nData: %s\nLength: %d\n",
			       inet_ntoa(si_other[i].sin_addr), ntohs(si_other[i].sin_port), (char *) buffer,len);
		}

 // Jag försöker föra över detta till trådarna--------------------//
		char cards_to_send[40];
		i=0;
		sprintf(cards_to_send,"%s;",player[i].game->deck[player[i].pos]);
		for(int j=4;j<52;j+=4) {
			strcat(cards_to_send, player[i].game->deck[player[i].pos+j]);
			strcat(cards_to_send,";");
		}
		printf("Sending packet2: \n%s\n", cards_to_send);
		if (sendto(s, cards_to_send, 40, 0, (struct sockaddr *) &si_other[i],  slen)==-1)
			diep("sendto()");
	int k=0;
*/
    	close(s);
    	return 0;
}
コード例 #5
0
ファイル: main.c プロジェクト: anichno/SchoolCode
/*
 * Description: The main driver function for this program.
 * Input:       Command line arguments
 * Result:      EXIT_SUCCESS or EXIT_FAILURE
 * PRE:         None.
 * POST:        The appropriate encryption/decryption function will be called.
 */
int main( int argc, char** argv )
{
  if( argc == 1 ) // Program was executed with no arguments, so show usage.
  {
    show_usage( argv[ 0 ] );
  }
  else if( strcasecmp( argv[ 1 ], "-e" ) == 0 ) // Encrypt
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }

    //pontifex -e deck.txt plaintext.txt ciphertext.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    printf( "Reading in plaintext...\n" );
    char* plaintext = read_filetext( argv[ 3 ] );
    printf( "Encrypting...\n" );
    char* ciphertext = encode_message( plaintext, deck );
    write_filetext( ciphertext, argv[ 4 ] );
  }
  else if( strcasecmp( argv[ 1 ], "-d" ) == 0 ) // Decrypt
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }

    //pontifex -d deck.txt ciphertext.txt decrypted.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    printf( "Reading in ciphertext...\n" );
    char* ciphertext = read_filetext( argv[ 3 ] );
    printf( "Decrypting...\n" );
    char* plaintext = decode_message( ciphertext, deck );
    write_filetext( plaintext, argv[ 4 ] );
  }
  else if( strcasecmp( argv[ 1 ], "-a" ) == 0 ) // Create a new deck with all cards in ascending order
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Creating a new deck with cards in ascending order...\n" );
    fflush( stdout );

    //pontifex -a deck.txt
    card_ptr deck = new_deck();
    write_deck_to_file( deck, argv[ 2 ] );
  }
  else if( strcasecmp( argv[ 1 ], "-r" ) == 0 ) // Create a new, randomly shuffled deck
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Creating a new, randomly shuffled deck...\n" );

    //pontifex -r deck.txt
    card_ptr deck = new_deck();
    deck = shuffle_deck( deck );
    write_deck_to_file( deck, argv[ 2 ] );
  }
  else if( strcasecmp( argv[ 1 ], "-k" ) == 0 ) // Show key sequence
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Showing key sequence generated by deck in given file...\n" );

    //pontifex -k deck.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    char* keystream = generate_keystream( deck, 8 );
    int i;
    for( i = 0; i < 8; i++ )
    {
      int key = keystream[ i ] - 64;
      printf( "%d ", key );
    }
    printf( "\n" );
  }
  else if( strcasecmp( argv[ 1 ], "-f" ) == 0 ) // Test reading a deck from a file
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Testing reading deck from a file...\n" );

    //pontifex -f deck.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    show_deck( deck );
  }
  else if( strcasecmp( argv[ 1 ], "-m" ) == 0 ) // Test move joker steps
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Testing move joker steps with deck in given file...\n" );

    //pontifex -m deck.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );

    card_ptr currentCard = deck;
    while( currentCard->number != JOKER_A )
    {
      currentCard = currentCard->next;
    }
    deck = swap_joker1( deck, currentCard );

    currentCard = deck;
    while( currentCard->number != JOKER_B )
    {
      currentCard = currentCard->next;
    }
    deck = swap_joker2( deck, currentCard );

    show_deck( deck );
  }
  else if( strcasecmp( argv[ 1 ], "-t" ) == 0 ) // Test triple cut step
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Testing triple cut step with deck in given file...\n" );

    //pontifex -t deck.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    deck = triple_cut( deck );
    show_deck( deck );
  }
  else if( strcasecmp( argv[ 1 ], "-c" ) == 0 ) // Test count cut step
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Testing count cut step with deck in given file...\n" );

    //pontifex -c deck.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    deck = count_cut( deck );
    show_deck( deck );
  }
  else if( strcasecmp( argv[ 1 ], "-p" ) == 0 ) // Test entire pontifex algorithm
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Testing all pontifex steps with deck in given file...\n" );

    //pontifex -p deck.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    //	Step 1, find joker A
    card_ptr currentCard = deck;
    while( currentCard->number != JOKER_A )
    {
      currentCard = currentCard->next;
    }
    deck = swap_joker1( deck, currentCard );

    printf( "Step 1:\n" );
    show_deck( deck );

    //	Step 2, find joker B
    currentCard = deck;
    while( currentCard->number != JOKER_B )
    {
      currentCard = currentCard->next;
    }
    deck = swap_joker2( deck, currentCard );

    printf( "Step 2:\n" );
    show_deck( deck );

    //	Step 3, do triple cut
    deck = triple_cut( deck );

    printf( "Step 3:\n" );
    show_deck( deck );

    //	Step 4, do count cut
    deck = count_cut( deck );

    printf( "Step 4:\n" );
    show_deck( deck );

    //	Step 5, find output card
    int streamval = get_output_card( deck );

    printf( "Step 5:\n" );
    printf( "%i\n", streamval );
  }
  else if( strcasecmp( argv[ 1 ], "-o" ) == 0 ) // Test output card step
  {
    if( argv[ 2 ] == NULL )
    {
      show_usage( argv[ 0 ] );
      return EXIT_FAILURE;
    }
    printf( "Testing find output card step with deck in given file...\n" );

    //pontifex -o deck.txt
    printf( "Reading in deck...\n" );
    card_ptr deck = read_deck_from_file( argv[ 2 ] );
    printf( "Output card: %i\n", get_output_card( deck ) );
  }
  else
  {
    printf( "Invalid flag: %s\n", argv[ 1 ] );
    show_usage( argv[ 0 ] );
    return EXIT_FAILURE;
  }

  printf( "Done\n" );
  return EXIT_SUCCESS;
}
コード例 #6
0
ファイル: si_parse_ops.c プロジェクト: sfaroult/slide_index
extern int process_pptx(char *pptx_file) {
  // Returns the number of slides, -1 in case of severe failure
  // (if the file doesn't exist, 0 is returned)
  mz_bool            status;
  mz_zip_archive     zip_archive;
  char              *xml_slide;
  size_t             xml_sz;
  char              *p;
  char              *q;
  char              *s;
  char              *t;
  int                i;
  int                deckid;
  int                maxslide = 0;
  int                notenum;
  int                slidenum = 0;
  int                slideid;
  char               xmlrel[FILENAME_MAX];
  short              kw;
  short              level;

  memset(&zip_archive, 0, sizeof(zip_archive));
  status = mz_zip_reader_init_file(&zip_archive, pptx_file, 0);
  if (!status) {
    fprintf(stderr, "Cannot read %s!\n", pptx_file);
  } else {
    deckid = new_deck(pptx_file);
    // Get and print information about each file in the archive.
    for (i = 0; i < (int)mz_zip_reader_get_num_files(&zip_archive); i++) {
      mz_zip_archive_file_stat file_stat;
      if (!mz_zip_reader_file_stat(&zip_archive, i, &file_stat)) {
         fprintf(stderr, "mz_zip_reader_file_stat() failed!\n");
         mz_zip_reader_end(&zip_archive);
         return -1;
      }
      if (!mz_zip_reader_is_file_a_directory(&zip_archive, i)) {
        if ((strncmp(file_stat.m_filename, "ppt/notesSlides/", 16) == 0)
            && strncmp(file_stat.m_filename, "ppt/notesSlides/_rels/", 22)) {
          // Notes
          //
          // *** ACHTUNG ***
          // Note numbers don't match the corresponding slide number,
          // that would be too easy. You have to dig into "_rels"
          //
          if (!sscanf(&(file_stat.m_filename[26]), "%d", &notenum)) {
            fprintf(stderr, "Failed to extract note num from %s\n",
                            &(file_stat.m_filename[16]));
            return -1;
          }
          sprintf(xmlrel,
                  "ppt/notesSlides/_rels/notesSlide%d.xml.rels",
                  notenum);
          if ((xml_slide =
                (char *)mz_zip_reader_extract_file_to_heap(&zip_archive,
                       (const char *)xmlrel,
                       &xml_sz, (mz_uint)0)) != (char *)NULL) {
            // Try to find the b****y slide number
            if ((p = strstr(xml_slide, "Target=\"../slides/slide"))
                     != NULL) {
              if (!sscanf(&(p[23]), "%d", &slidenum)) {
                fprintf(stderr, "Failed to extract slidenum from %s\n",
                        &(p[36]));
                return -1;
              }
            }
            free(xml_slide);
          }
          if (slidenum) {
            if (slidenum > maxslide) {
              maxslide = slidenum;
            }
            slideid = new_slide(deckid, slidenum);
            xml_sz = 0;
            if ((xml_slide =
                    (char *)mz_zip_reader_extract_file_to_heap(&zip_archive,
                           (const char *)file_stat.m_filename,
                           &xml_sz, (mz_uint)0)) != (char *)NULL) {
              if (get_mode() & OPT_TAGS) {
                // Exclusively look for indexing words in the notes
                q = xml_slide;
                level = 0;
                while ((p = strchr(q, '[')) != (char *)NULL) {
                  level++;
                  do {
                    p++;
                  } while (isspace(*p));
                  q = p + 1;
                  while (*q && ((*q != ']') || (level > 1))) {
                    switch (*q) {
                      case '[':
                           level++;
                           break;
                      case ']':
                           level--;
                           break;
                      default:
                           break;
                    }
                    q++;
                  }
                  if (*q == ']') {
                    *q = '\0';
                    if (get_sep() == ';') {
                      // Replace HTML entities if there are any
                      replace_entities(p);
                    }
                    while ((s = strchr(p, get_sep())) != (char *)NULL) {
                      *s++ = '\0';
                      if (*p == get_kw()) {
                        p++;
                        kw = 1;
                      } else {
                        if (autokw()) {
                          kw = lowercase_word(p);
                        } else {
                          kw = 0;
                        }
                      } 
                      if ((t = cleanup(p)) != (char *)NULL) {
                        new_word_as_is(t, slideid, 'T', kw);
                        free(t);
                      }
                      p = s;
                      while (isspace(*p)) {
                        p++;
                      }
                    }
                    if (*p == get_kw()) {
                      p++;
                      kw = 1;
                    } else {
                      if (autokw()) {
                        kw = lowercase_word(p);
                      } else {
                        kw = 0;
                      }
                    } 
                    if ((t = cleanup(p)) != (char *)NULL) {
                      new_word_as_is(t, slideid, 'T', kw);
                      free(t);
                    }
                    p = 1 + q;
                  } else {
                    break;
                  }
                }
              } else {
                // Analyze text
                analyze_text(slideid, xml_slide, 'N');
              }
              free(xml_slide);
            } else {
              fprintf(stderr, "Extract flopped\n");
              return -1;
            }
          }
        }
        // We look at regular slides even if we are only interested
        // in tags to check that we aren't missing any slide without
        // notes and that our tag count is correct
        if ((strncmp(file_stat.m_filename, "ppt/slides/", 11) == 0)
            && strncmp(file_stat.m_filename, "ppt/slides/_rels/", 17)) {
          // Regular slide
          if (!sscanf(&(file_stat.m_filename[16]), "%d", &slidenum)) {
            fprintf(stderr, "Failed to extract num from %s\n",
                            &(file_stat.m_filename[11]));
            return -1;
          }
          if (slidenum > maxslide) {
            maxslide = slidenum;
          }
          slideid = new_slide(deckid, slidenum);
          if (!(get_mode() & OPT_TAGS)) {
            xml_sz = 0;
            if ((xml_slide =
                 (char *)mz_zip_reader_extract_file_to_heap(&zip_archive,
                           (const char *)file_stat.m_filename,
                           &xml_sz, (mz_uint)0)) != (char *)NULL) {
              // Analyze text
              analyze_text(slideid, xml_slide, 'S');
              // Analyze images 
              analyze_pic(slideid, xml_slide);
              free(xml_slide);
            } else {
              fprintf(stderr, "Extract flopped\n");
              return -1;
            }
          }
        }
      }
    }
    // Close the archive, freeing any resources it was using
    mz_zip_reader_end(&zip_archive);
  }
  return maxslide;
}
コード例 #7
0
ファイル: game.c プロジェクト: ricardoleitee/LCOM
int load_cards() {

	//Load all paths from images for each card and store them in char * arrays

	const char * card_path1[] = { "/usr/src/drivers/proj/images/image_b1.mg",
			"/usr/src/drivers/proj/images/image_b2.mg",
			"/usr/src/drivers/proj/images/image_b3.mg",
			"/usr/src/drivers/proj/images/image_b4.mg",
			"/usr/src/drivers/proj/images/image_b5.mg",
			"/usr/src/drivers/proj/images/image_b6.mg",
			"/usr/src/drivers/proj/images/image_1a.mg",
			"/usr/src/drivers/proj/images/image_1aa.mg",
			"/usr/src/drivers/proj/images/image_1aaa.mg",
			"/usr/src/drivers/proj/images/image_1b.mg",
			"/usr/src/drivers/proj/images/image_1c.mg" };

	const char * card_path2[] = { "/usr/src/drivers/proj/images/image_b1.mg",
			"/usr/src/drivers/proj/images/image_b2.mg",
			"/usr/src/drivers/proj/images/image_b3.mg",
			"/usr/src/drivers/proj/images/image_b4.mg",
			"/usr/src/drivers/proj/images/image_b5.mg",
			"/usr/src/drivers/proj/images/image_b6.mg",
			"/usr/src/drivers/proj/images/image_2a.mg",
			"/usr/src/drivers/proj/images/image_2aa.mg",
			"/usr/src/drivers/proj/images/image_2aaa.mg",
			"/usr/src/drivers/proj/images/image_2b.mg",
			"/usr/src/drivers/proj/images/image_2c.mg" };

	const char * card_path3[] = { "/usr/src/drivers/proj/images/image_b1.mg",
			"/usr/src/drivers/proj/images/image_b2.mg",
			"/usr/src/drivers/proj/images/image_b3.mg",
			"/usr/src/drivers/proj/images/image_b4.mg",
			"/usr/src/drivers/proj/images/image_b5.mg",
			"/usr/src/drivers/proj/images/image_b6.mg",
			"/usr/src/drivers/proj/images/image_3a.mg",
			"/usr/src/drivers/proj/images/image_3aa.mg",
			"/usr/src/drivers/proj/images/image_3aaa.mg",
			"/usr/src/drivers/proj/images/image_3b.mg",
			"/usr/src/drivers/proj/images/image_3c.mg" };

	const char * card_path4[] = { "/usr/src/drivers/proj/images/image_b1.mg",
			"/usr/src/drivers/proj/images/image_b2.mg",
			"/usr/src/drivers/proj/images/image_b3.mg",
			"/usr/src/drivers/proj/images/image_b4.mg",
			"/usr/src/drivers/proj/images/image_b5.mg",
			"/usr/src/drivers/proj/images/image_b6.mg",
			"/usr/src/drivers/proj/images/image_4a.mg",
			"/usr/src/drivers/proj/images/image_4aa.mg",
			"/usr/src/drivers/proj/images/image_4aaa.mg",
			"/usr/src/drivers/proj/images/image_4b.mg",
			"/usr/src/drivers/proj/images/image_4c.mg" };

	const char * card_path5[] = { "/usr/src/drivers/proj/images/image_b1.mg",
			"/usr/src/drivers/proj/images/image_b2.mg",
			"/usr/src/drivers/proj/images/image_b3.mg",
			"/usr/src/drivers/proj/images/image_b4.mg",
			"/usr/src/drivers/proj/images/image_b5.mg",
			"/usr/src/drivers/proj/images/image_b6.mg",
			"/usr/src/drivers/proj/images/image_5a.mg",
			"/usr/src/drivers/proj/images/image_5aa.mg",
			"/usr/src/drivers/proj/images/image_5aaa.mg",
			"/usr/src/drivers/proj/images/image_5b.mg",
			"/usr/src/drivers/proj/images/image_5c.mg" };

	//Create all cards
	new_card(&a1, 150, 220, card_path1, 0, 0, 1);
	new_card(&a2, 150, 220, card_path2, 0, 0, 2);
	new_card(&a3, 150, 220, card_path3, 0, 0, 3);
	new_card(&a4, 150, 220, card_path4, 0, 0, 4);
	new_card(&a5, 150, 220, card_path5, 0, 0, 5);
	new_card(&a6, 150, 220, card_path1, 0, 0, 1);
	new_card(&a7, 150, 220, card_path2, 0, 0, 2);
	new_card(&a8, 150, 220, card_path3, 0, 0, 3);
	new_card(&a9, 150, 220, card_path4, 0, 0, 4);
	new_card(&a10, 150, 220, card_path5, 0, 0, 5);

	card * cards[] = { &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, &a9, &a10 };

	//Create cards positions
	int xpos[10] = { 50, 240, 430, 620, 810, 50, 240, 430, 620, 810 };
	int ypos[10] = { 155, 155, 155, 155, 155, 415, 415, 415, 415, 415 };

	//Create new deck
	new_deck(&d1, 10, cards, 3, xpos, ypos);
}