Beispiel #1
0
void set_marker_at_loc (char * value, unsigned int x, unsigned int y)
{
   unsigned int i;
   if ((i = which_marker(x, y)) < MAX_MARKERS) {
      strcpy(gmap.markers[i].name, value);
   } else {
      new_marker(value, x, y);
      map_change (x, y); map_change (x + 1, y);
      map_change (x, y - 1); map_change (x + 1, y - 1);
   }
}
Beispiel #2
0
void remove_marker (unsigned int x, unsigned int y)
{
   int i;
   if ((i = which_marker(x, y)) < MAX_MARKERS) {
      for (; i < gmap.num_markers; i++) {
         gmap.markers[i].x = gmap.markers[i + 1].x;
         gmap.markers[i].y = gmap.markers[i + 1].y;
         strcpy(gmap.markers[i].name, gmap.markers[i + 1].name);
      }
      gmap.num_markers--;
   }
   map_change (x, y);
   map_change (x + 1, y);
   map_change (x, y - 1);
   map_change (x + 1, y - 1);
}
Beispiel #3
0
void set_tile_at (unsigned int tile, unsigned int x, unsigned int y,
                  unsigned int layer)
{
   if (x >= (unsigned int) gmap.xsize)
      x = gmap.xsize - 1;
   if (y >= (unsigned int) gmap.ysize)
      y = gmap.ysize - 1;
   unsigned int i = (y * gmap.xsize) + x;
   switch (layer) {
   case LAYER_1_FLAG:
      map[i] = tile;
      break;
   case LAYER_2_FLAG:
      b_map[i] = tile;
      break;
   case LAYER_3_FLAG:
      f_map[i] = tile;
      break;
   case SHADOW_FLAG:
      sh_map[i] = tile;
      break;
   case ENTITIES_FLAG:
   default:
      break;
   }
   map_change(x, y);
}
Beispiel #4
0
void set_obstacle_at (unsigned int obstacle, unsigned int x, unsigned int y)
{
   int i;
   i = y * gmap.xsize + x;

   if (obstacle <= MAX_OBSTACLES)
      o_map[i] = obstacle;
   else if (obstacle == OBSTACLES_CYCLE)
      o_map[i] = (o_map[i] + 1) % (MAX_OBSTACLES + 1);
   map_change(x, y);
}
Beispiel #5
0
/* Set the zone. ZONES_UP means increase by one.
 * ZONES_DOWN means decrease by one.*/
void set_zone_at (unsigned int zone, unsigned int x, unsigned int y)
{
   int i;
   i = y * gmap.xsize + x;

   if (zone < MAX_ZONES)
      z_map[i] = zone;
   else if (zone == ZONES_UP)
      z_map[i] = (z_map[i] + 1) % MAX_ZONES;
   else if (zone == ZONES_DOWN)
      z_map[i] = (z_map[i] - 1) % MAX_ZONES;
   map_change(x, y);
}
Beispiel #6
0
int main(int argc, char **argv) {

	int i, j, count = 0, encode_result_length, first_num, second_num, elecount, rows, personal_number = DEFAULT_PERSONAL_NUMBER, c;
	int date_len, verbose = 0, keyphrase_len;
	char t;

	int *date = DEFAULT_DATE;
	date_len = 6;
	int *random_ig = DEFAULT_RANDOM;


	/*Initialize the pointers that we'll need later */
	int *temp, *first_app_res, *assign_res, *header_checker, *first, *second;
	int *encode_result, *transpose_select, *new_header, *chain_res, *append_res, *sub_result;
	int **pseudo_random, **transpose_res, **second_num_trans, **final_res, **inter_trans, **message_matrix;

	char *key_phrase = DEFAULT_KEYPHRASE;
	keyphrase_len = strlen(key_phrase);
	
	char *message = DEFAULT_MESSAGE;


	while ((c = getopt_long(argc, argv, "d:p:k:m:v", longopts, NULL)) != -1)
        	switch (c) {
			case 'd':
				date_len = strlen(optarg);
				date = malloc(sizeof(int) * date_len);
				i = 0;
				while(i < strlen(optarg)) {
					t = optarg[i];
					if(t == 0) {
						fprintf (stderr, "--date must be in the form DDMMYYYY.\n");
						return -1;
					}
					date[i++] = atoi(&t);
				}

			break;

		        case 'p':
				personal_number = atoi(optarg);

				if(personal_number > 16) {
					fprintf (stderr, "--personal must be < 16 strictly.\n");
					return -1;
				}
		        break;
	
			case 'k':
				key_phrase = optarg;
				if(strlen(key_phrase) < 20) fprintf (stderr, "--personal must be < 16 strictly.\n");
				if(strlen(key_phrase) % 2 != 0) fprintf (stderr, "--personal must be divisible by two.\n");
				keyphrase_len = strlen(key_phrase);
			break;

			case 'm':
				message = optarg;
			break;

			case 'v':
				verbose = 1;
			break;

	                case '?':
             			if (optopt == 'k' || optopt == 'm' || optopt == 'd' || optopt == 'p')
					fprintf (stderr, "Option -%c requires an argument.\n", optopt);
			        else if (isprint (optopt))
					fprintf (stderr, "Unknown option `-%c'.\n", optopt);
             			else
			                fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt);
                                return -1;
			default:
				abort();
				return -1;
        }



	sub_result = modular_subtraction_digit(random_ig, date, 5);

	if(verbose == 1) {

		printf("\n1. Subtraction result:\n");

		for(i = 0; i < 5; i++) 
			printf("%d ", sub_result[i]);

		printf("\n \n");

	}

	first = assign_char(key_phrase, 0, keyphrase_len / 2, 65); 
	second = assign_char(key_phrase, keyphrase_len / 2, 10, 65); 


	if(verbose == 1) {

		printf("2. First character assigned result:\n");

		for(i = 0; i < keyphrase_len / 2; i++) 
			printf("%d ", first[i]);

		printf("\n\n");


		printf("3. Second character assigned result:\n");

		for(i = 0; i < keyphrase_len / 2; i++) 
			printf("%d ", second[i]);

		printf("\n\n");

	}

	chain_res = chain_addition(sub_result, 5);

	if(verbose == 1) {

		printf("4. Chain addition result for the subtraction performed earlier:\n");

		for(i = 0; i < 5; i++) 
			printf("%d ", chain_res[i]);

		printf("\n\n");

	}

	append_res = join(sub_result, 5, chain_res, 5);

	if(verbose == 1) {

		printf("5. Joining both 1 and 4, we get:\n");

		for(i = 0; i < 10; i++) 
			printf("%d ", append_res[i]);

		printf("\n\n");

	}
	
	free(sub_result);
	free(chain_res);
	
	first_app_res = modular_addition_digit(first, append_res, 10);

	if(verbose == 1) {

		printf("6. Adding 2 and 5 modularly, we get:\n");

		for(i = 0; i < 10; i++) 
			printf("%d ", first_app_res[i]);

		printf("\n\n");

	}	

	assign_res = map_change(second, first_app_res, 10);

	if(verbose == 1) {

		printf("7. Mapping 6 according to 3, we get:\n");

		for(i = 0; i < 10; i++) 
			printf("%d ", assign_res[i]);

		printf("\n\n");

	}	


	free(first_app_res);
	
	pseudo_random = malloc(sizeof(int*) * 5);

	temp = assign_res;
	for(i = 0; i < 5; i++) {
		temp=chain_addition(temp,10);
		pseudo_random[i]=temp;
	}

	if(verbose == 1) {

		printf("8. Performing chain addition on 7, we get:\n");

		for(i = 0; i < 5; i++) {
			for(j = 0; j <10; j++) {
				printf("%d ", pseudo_random[i][j]);
			}
			printf("\n");
		}

		printf("\n");
	}
	

	header_checker = assign_int(pseudo_random[4], 0, 10);

	if(verbose == 1) {

		printf("8. The header for our checkerboard that we use is:\n");

		for(i = 0; i < 10; i++) {
			printf("%d ", header_checker[i]);
		}

		printf("\n\n");
	}

	encode_result = encode(message, header_checker, strlen(message));

	encode_result_length = get_encode_message_length(encode_result);

	if(verbose == 1) {

		printf("8. The encoded message is:\n");

		for(i = 0; i < encode_result_length; i++) {
			printf("%d ", encode_result[i]);
		}

		printf("\n\n");

		printf("9. The message's length is: %d\n", encode_result_length);

		printf("\n\n");

	}

	first_num = personal_number + pseudo_random[4][8];
	second_num = personal_number + pseudo_random[4][9];

	if(verbose == 1) {

		printf("10. The first and second number are: %d %d\n", first_num, second_num);

		printf("\n\n");

	}
	
	transpose_res = transpose(assign_res, pseudo_random, 10, 5);

	if(verbose == 1) {

		printf("11. The transpose of 8 wrt 7 is:\n");

		for(i = 0; i < 10; i++) {
			for(j = 0; j < 5; j++) 
				printf("%d ", transpose_res[i][j]);
			printf("\n");
		}

		printf("\n\n");

	}
	
	free(temp);
	
	transpose_select = malloc(sizeof(int) * (first_num + second_num));

	for(i = 0; i < 10; i++) {
		for(j = 0; j < 5; j++) {
			transpose_select[count++] = transpose_res[i][j];
			if (count == (first_num + second_num)) break;
		}
			if (count == (first_num + second_num)) break;
	}


	if(verbose == 1) {

		printf("12. The %d elements of 11 are:\n", first_num + second_num);

		for(i = 0; i < first_num + second_num; i++) {
			printf("%d ", transpose_select[i]);
		}

		printf("\n\n");

	}
	
	message_matrix = get_matrix(encode_result, encode_result_length, first_num);
	free(encode_result);

	elecount = encode_result_length + ((5 - (encode_result_length % 5)) % 5);
	rows = elecount / first_num;
	if(encode_result_length % first_num !=  0) rows =rows + 1;


	if(verbose == 1) {

		printf("13. Our message in 8 as a matrix is:\n");

		for(i = 0; i < rows; i++) {
			for(j = 0; j < first_num; j++) 
				printf("%d ", message_matrix[i][j]);
			printf("\n");
		}

		printf("\n\n");

	}
	

	
	inter_trans = transpose(transpose_select, message_matrix, first_num, rows);

	if(verbose == 1) {

		printf("14. Transpose of 13 using the first %d elements of 12 is:\n", first_num);

		for(i = 0; i < first_num; i++) {
			for(j = 0; j < rows; j++) 
				printf("%d ", inter_trans[i][j]);
			printf("\n");
		}

		printf("\n\n");

	}

	new_header = copy(transpose_select, first_num, first_num + second_num);

	if(verbose == 1) {

		printf("15. The last %d elements of 12 are:\n", second_num);

		for(i = first_num; i < first_num + second_num; i++) {
			printf("%d ", transpose_select[i]);
		}

		printf("\n\n");

	}

	second_num_trans = get_matrix_filled(inter_trans, first_num, rows, elecount, new_header, second_num);


	rows = elecount / second_num;
	if(encode_result_length % second_num !=  0) rows =rows + 1;

	if(verbose == 1) {

		printf("14. Filling in the matrix using the %d elements of 15 is:\n", second_num);

		for(i = 0; i < rows; i++) {
			for(j = 0; j < second_num; j++) 
				printf("%d ", second_num_trans[i][j]);
			printf("\n");
		}

		printf("\n\n");

	}


	final_res = transpose(new_header, second_num_trans, second_num, rows);
	free(new_header);
	
	elecount = 1;

	date[date_len - 1] = (date[date_len - 1] == 0) ? 10: date[date_len - 1];

	if(verbose == 1) {

		printf("16. The result is:\n");

	}
	
	for(i = 0; i < second_num; i++) {
		for(j = 0; j < rows; j++) {
			if(final_res[i][j] != -1) {
				printf("%d ", final_res[i][j]); 
				elecount++;	
				if(((elecount) % date[date_len - 1]) == 0) {
					elecount = 1; 
					printf("\n");
				}				
			}
		}
	}

	printf("\n");

	return 0;
}