Esempio n. 1
0
void binary_load(short int reg[], char data[], const unsigned int src_len)
{
	int read, i;
	short int temp[112] = { 0 };
	
	for(i = 0; i < 112; i++) {
		reg[i] = 0;
	}
	
    for(read = 0; read < (int)src_len; read++) {

		for(i = 0; i < 112; i++) {
			temp[i] = reg[i];
		}
		
		for(i = 0; i < 9; i++) {
			binary_add(reg, temp);
		}
		
		temp[0] = BCD[ctoi(data[read]) * 4];
		temp[1] = BCD[(ctoi(data[read]) * 4) + 1];
		temp[2] = BCD[(ctoi(data[read]) * 4) + 2];
		temp[3] = BCD[(ctoi(data[read]) * 4) + 3];
		for(i = 4; i < 112; i++) {
			temp[i] = 0;
		}
		
		binary_add(reg, temp);
	}
}
Esempio n. 2
0
void binary_add (node **root, int data)
{
	ASSERT(root);

	if(*root == NULL) {
		add_data(root, data);
		return;
	}

	if(data > (*root)->data)
		binary_add(&(*root)->rchild, data);
	else
		binary_add(&(*root)->lchild, data);
}
Esempio n. 3
0
int main()
{
        int tab[16] = {1, 23, 26, 31, 37, 42, 44, 49, 56, 59, 64, 69, 75, 77, 88, 91};
        int size = sizeof(tab)/4;

        int x = binary_search(tab, 5, 10, 49);   

        binary_add(tab, size, 56);
}
Esempio n. 4
0
static struct binary_info *binary_find(const char *name) {
	struct binary_info *binary;
	const char *current_name;
	unsigned i;
	char path[PATH_MAX + 1], *path_end;

	assert(name);

	/* name is required */
	if (!*name) {
		fprintf(stderr, "warning: binary unspecified in sample\n");
		return NULL;
	}

	/* do we already know this binary? */
	binary = binary_hashtab_get(name);
	if (binary) return binary;

	/* search for it */
	dprintf("searching for binary \"%.*s\" in \"%s\"\n",
		PROC_NAME_LEN, name, src_path);
	for (i = 0; i < LENGTHOF(default_binaries); i++) {
		snprintf(path, sizeof(path), "%s/%s", src_path,
			default_binaries[i]);
		current_name = binary_name(path);
		assert(current_name);
		if (*current_name) {
			/* paths not ending in slash: use if name matches */
			if (strncmp(name, current_name,
				PROC_NAME_LEN) != 0) {
				continue;
			}
		} else {
			/* paths ending in slash: look in subdir named after
			 * binary
			 */
			path_end = path + strlen(path);
			snprintf(path_end, sizeof(path) - (path_end - path),
				"%.*s/%.*s", PROC_NAME_LEN, name,
				PROC_NAME_LEN, name);
		}

		/* use access to find out whether the binary exists and is
		 * readable
		 */
		dprintf("checking whether \"%s\" exists\n", path);
		if (access(path, R_OK) < 0) continue;

		/* ok, this seems to be the one */
		return binary_add(strdup_checked(path));
	}

	/* not found */
	return NULL;
}
Esempio n. 5
0
int main(void){
	int A[10] = {1,0,1,0,1,0,1,1,0,1};
	int B[10] = {1,1,1,0,0,1,0,1,0,0};
	int C[11] = {0};
	int i;
	binary_add(A,B,C,10);
	for(i=0;i<11;i++){
		printf("%d ",C[i]);
	}
	printf("\n");
}
Esempio n. 6
0
int main(int argc, char **argv) {
	int opt, sprofdiff = 0;

#ifdef DEBUG
	/* disable buffering so the output mixes correctly */
	setvbuf(stdout, NULL, _IONBF, 0);
	setvbuf(stderr, NULL, _IONBF, 0);
#endif

	/* parse arguments */
	while ((opt = getopt(argc, argv, "b:dp:s:")) != -1) {
		switch (opt) {
		case 'b':
			/* additional binary specified */
			binary_add(optarg);
			break;
		case 'd':
			/* generate output for sprofdiff */
			sprofdiff = 1;
			break;
		case 'p':
			/* minimum percentage specified */
			minimum_perc = atof(optarg);
			if (minimum_perc < 0 || minimum_perc > 100) {
				fprintf(stderr, "error: cut-off percentage "
					"makes no sense: %g\n", minimum_perc);
				exit(1);
			}
			break;
		case 's':
			/* source tree directory specified */
			src_path = optarg;
			break;
		default: usage(argv[0]);
		}
	}

	/* load samples */
	if (optind >= argc) usage(argv[0]);
	for (; optind < argc; optind++) {
		struct endpoint_info *e; 
		load_trace(argv[optind]);
		for(e = endpoints; e; e = e->next)
			e->seen = 0;
	}

	/* print report */
	if (sprofdiff) {
		print_diff();
	} else {
		print_report();
	}
	return 0;
}
Esempio n. 7
0
void binary_subtract(short int accumulator[], short int input_buffer[])
{ 	/* 2's compliment subtraction */
	/* take input_buffer from accumulator and put answer in accumulator */
	int i;
	short int sub_buffer[112];
	
	for(i = 0; i < 112; i++) {
		if(input_buffer[i] == 0) {
			sub_buffer[i] = 1;
		} else {
			sub_buffer[i] = 0;
		}
	}
	binary_add(accumulator, sub_buffer);
	
	sub_buffer[0] = 1;
	
	for(i = 1; i < 112; i++) {
		sub_buffer[i] = 0;
	}
	binary_add(accumulator, sub_buffer);
}
Esempio n. 8
0
void main ()
{
	binary_add(&root, 'f');
	binary_add(&root, 'o');
	binary_add(&root, 'x');
	binary_add(&root, 'i');
	binary_add(&root, 's');
	binary_add(&root, 'v');
	binary_add(&root, 'r');
	binary_add(&root, 'y');

	preorder(root);
	inorder(root);
	postorder(root);

	node *curr = find_successor(root);
	if (curr)
		printf("Found the node %d\n", curr->data);
	else
		printf("Node not found!!\n");
}
Esempio n. 9
0
void exampleBinaryTree()
{	
	// Use pooling for efficiency, if you don't want to use pooling
	// then comment out this line.
	pool_binary(32);
	
	BinaryTree* T = newBinaryTree();
	
	//             H
	//       D          L     
	//   B     F     J     N
	// A  C  E  G  I  K  M  O
	// Insert the data into the tree
	binary_add(T, 'H'-'A', "H");
	binary_add(T, 'D'-'A', "D");
	binary_add(T, 'L'-'A', "L");
	binary_add(T, 'B'-'A', "B");
	binary_add(T, 'F'-'A', "F");
	binary_add(T, 'J'-'A', "J");
	binary_add(T, 'N'-'A', "N");
	binary_add(T, 'A'-'A', "A");
	binary_add(T, 'C'-'A', "C");
	binary_add(T, 'E'-'A', "E");
	binary_add(T, 'G'-'A', "G");
	binary_add(T, 'I'-'A', "I");
	binary_add(T, 'K'-'A', "K");
	binary_add(T, 'M'-'A', "M");
	binary_add(T, 'O'-'A', "O");

	binary_display(T, 1, &toString);

	printf("Size: %d\n", T->size);
	printf("Height: %d\n", binary_getHeight(T));

	printf("Traversals:");

	// Display the tree inorder
	printf("\n%16s: ", "In Order");
	binary_traverseInOrder(T, &process);

	printf("\n%16s: ", "Pre Order");
	binary_traversePreOrder(T, &process);

	printf("\n%16s: ", "Post Order");
	binary_traversePostOrder(T, &process);

	printf("\n%16s: ", "Breadth First");
	binary_traverseBreadth(T, &process);

	printf("\n%16s: ", "Depth First");
	binary_traverseDepth(T, &process);

	printf("\n");

	// Remove a node with 2 subtree(s)
	printf("Removing L:\n");
	binary_remove(T, 'L'-'A');
	binary_display(T, 1, &toString);
	printf("New Size: %d\n", T->size);
	// Remove a node with 0 subtree(s) = leaf
	printf("Removing A:\n");
	binary_remove(T, 'A'-'A');
	binary_display(T, 1, &toString);
	printf("New Size: %d\n", T->size);
	// Remove a node with 1 subtree(s) = left
	printf("Removing J:\n");
	binary_remove(T, 'J'-'A');
	binary_display(T, 1, &toString);
	printf("New Size: %d\n", T->size);
	// Remove a node with 1 subtree(s) = right
	printf("Removing B:\n");
	binary_remove(T, 'B'-'A');
	binary_display(T, 1, &toString);
	printf("New Size: %d\n", T->size);
	// Remove a node with 1 subtree(s) = right
	printf("Dropping N:\n");
	binary_drop(T, 'N'-'A');
	binary_display(T, 1, &toString);
	printf("New Size: %d\n", T->size);

	// Remove the bottom level
	printf("Removing bottom level:\n");
	binary_remove(T, 'E'-'A');
	binary_remove(T, 'G'-'A');
	binary_display(T, 1, &toString);
	printf("New Size: %d\n", T->size);
	printf("New Height: %d\n", binary_getHeight(T));

	// Set F to A
	printf("Setting F to E:\n");
	binary_set(T, 'F'-'A', "E");
	binary_display(T, 1, &toString);
	
	binary_clear(T);
	if (T->size == 0)
		printf("Binary Tree Cleared\n");

	// Create another tree with larger strings
	binary_add(T, 3, "Dog");
	binary_add(T, 0, "Ant");
	binary_add(T, 1, "Bat");
	binary_add(T, 2, "Camel");
	binary_add(T, 4, "Eel");
	binary_add(T, 5, "Fish");
	binary_display(T, 5, &toString);

	binary_free(T);
	
	// If you're not using pooling this can be commented out. This will
	// free all pooled nodes from memory. Always call this at the end 
	// of using any List.
	unpool_binary();
}
Esempio n. 10
0
File: imail.c Progetto: DroiDev/zint
int imail(struct zint_symbol *symbol, unsigned char source[], int length)
{
	char data_pattern[200];
	int error_number;
        int i, j, read;
        char zip[35], tracker[35], zip_adder[11], temp[2];
        short int accum[112], x_reg[112], y_reg[112];
        unsigned char byte_array[13];
        unsigned short usps_crc;
        int codeword[10];
        unsigned short characters[10];
        short int bit_pattern[13], bar_map[130];

	error_number = 0;

	if(length > 32) {
		strcpy(symbol->errtxt, "Input too long");
		return ERROR_TOO_LONG;
	}
	error_number = is_sane(SODIUM, source, length);
	if(error_number == ERROR_INVALID_DATA) {
		strcpy(symbol->errtxt, "Invalid characters in data");
		return error_number;
	}
	
        strcpy(zip, "");
        strcpy(tracker, "");

        /* separate the tracking code from the routing code */
	
	read = 0;
	j = 0;
	for(i = 0; i < length; i++) {
		if(source[i] == '-') {
			tracker[read] = '\0';
			j = 1;
			read = 0;
		} else {
			if(j == 0) {
				/* reading tracker */
				tracker[read] = source[i];
				read++;
			} else {
				/* reading zip code */
				zip[read] = source[i];
				read++;
			}
		}
	}
	if(j == 0) {
		tracker[read] = '\0';
	} else {
		zip[read] = '\0';
	}
	
	if(strlen(tracker) != 20) {
		strcpy(symbol->errtxt, "Invalid length tracking code");
		return ERROR_INVALID_DATA;
	}
	if(strlen(zip) > 11) {
		strcpy(symbol->errtxt, "Invalid ZIP code");
		return ERROR_INVALID_DATA;
	}
	
	/* *** Step 1 - Conversion of Data Fields into Binary Data *** */
	
	/* Routing code first */
	
	for(i = 0; i < 112; i++) {
		accum[i] = 0;
	}
	
	for(read = 0; read < strlen(zip); read++) {

		for(i = 0; i < 112; i++) {
			x_reg[i] = accum[i];
		}
		
		for(i = 0; i < 9; i++) {
			binary_add(accum, x_reg);
		}
		
		x_reg[0] = BCD[ctoi(zip[read]) * 4];
		x_reg[1] = BCD[(ctoi(zip[read]) * 4) + 1];
		x_reg[2] = BCD[(ctoi(zip[read]) * 4) + 2];
		x_reg[3] = BCD[(ctoi(zip[read]) * 4) + 3];
		for(i = 4; i < 112; i++) {
			x_reg[i] = 0;
		}
		
		binary_add(accum, x_reg);
	}
	
	/* add weight to routing code */
	
	for(i = 0; i < 112; i++) {
		x_reg[i] = accum[i];
	}
	
	if(strlen(zip) > 9) {
		strcpy(zip_adder, "1000100001");
	} else {
		if(strlen(zip) > 5) {
			strcpy(zip_adder, "100001");
		} else {
			if(strlen(zip) > 0) {
				strcpy(zip_adder, "1");
			} else {
				strcpy(zip_adder, "0");
			}
		}
	}
	
	for(i = 0; i < 112; i++) {
		accum[i] = 0;
	}
	
	for(read = 0; read < strlen(zip_adder); read++) {

		for(i = 0; i < 112; i++) {
			y_reg[i] = accum[i];
		}
		
		for(i = 0; i < 9; i++) {
			binary_add(accum, y_reg);
		}
		
		y_reg[0] = BCD[ctoi(zip_adder[read]) * 4];
		y_reg[1] = BCD[(ctoi(zip_adder[read]) * 4) + 1];
		y_reg[2] = BCD[(ctoi(zip_adder[read]) * 4) + 2];
		y_reg[3] = BCD[(ctoi(zip_adder[read]) * 4) + 3];
		for(i = 4; i < 112; i++) {
			y_reg[i] = 0;
		}
		
		binary_add(accum, y_reg);
	}

	binary_add(accum, x_reg);
	
	/* tracking code */

	/* multiply by 10 */
	for(i = 0; i < 112; i++) {
		y_reg[i] = accum[i];
	}
		
	for(i = 0; i < 9; i++) {
		binary_add(accum, y_reg);
	}
	
	/* add first digit of tracker */
	y_reg[0] = BCD[ctoi(tracker[0]) * 4];
	y_reg[1] = BCD[(ctoi(tracker[0]) * 4) + 1];
	y_reg[2] = BCD[(ctoi(tracker[0]) * 4) + 2];
	y_reg[3] = BCD[(ctoi(tracker[0]) * 4) + 3];
	for(i = 4; i < 112; i++) {
		y_reg[i] = 0;
	}
		
	binary_add(accum, y_reg);
	
	/* multiply by 5 */
	for(i = 0; i < 112; i++) {
		y_reg[i] = accum[i];
	}
		
	for(i = 0; i < 4; i++) {
		binary_add(accum, y_reg);
	}
	
	/* add second digit */
	y_reg[0] = BCD[ctoi(tracker[1]) * 4];
	y_reg[1] = BCD[(ctoi(tracker[1]) * 4) + 1];
	y_reg[2] = BCD[(ctoi(tracker[1]) * 4) + 2];
	y_reg[3] = BCD[(ctoi(tracker[1]) * 4) + 3];
	for(i = 4; i < 112; i++) {
		y_reg[i] = 0;
	}
	
	binary_add(accum, y_reg);
	
	/* and then the rest */

	for(read = 2; read < strlen(tracker); read++) {

		for(i = 0; i < 112; i++) {
			y_reg[i] = accum[i];
		}
		
		for(i = 0; i < 9; i++) {
			binary_add(accum, y_reg);
		}
		
		y_reg[0] = BCD[ctoi(tracker[read]) * 4];
		y_reg[1] = BCD[(ctoi(tracker[read]) * 4) + 1];
		y_reg[2] = BCD[(ctoi(tracker[read]) * 4) + 2];
		y_reg[3] = BCD[(ctoi(tracker[read]) * 4) + 3];
		for(i = 4; i < 112; i++) {
			y_reg[i] = 0;
		}
		
		binary_add(accum, y_reg);
	}

	/* printf("Binary data 1: ");
	hex_dump(accum); */
	
	/* *** Step 2 - Generation of 11-bit CRC on Binary Data *** */

	accum[103] = 0;
	accum[102] = 0;
	
	memset(byte_array, 0, 13);
	for(j = 0; j < 13; j++) {
		i = 96 - (8 * j);
		byte_array[j] = 0;
		byte_array[j] += accum[i];
		byte_array[j] += 2 * accum[i + 1];
		byte_array[j] += 4 * accum[i + 2];
		byte_array[j] += 8 * accum[i + 3];
		byte_array[j] += 16 * accum[i + 4];
		byte_array[j] += 32 * accum[i + 5];
		byte_array[j] += 64 * accum[i + 6];
		byte_array[j] += 128 * accum[i + 7];
	}
	
	usps_crc = USPS_MSB_Math_CRC11GenerateFrameCheckSequence(byte_array);
	/* printf("FCS 2: %4.4X\n", usps_crc); */
	
	/* *** Step 3 - Conversion from Binary Data to Codewords *** */
	
	/* start with codeword J which is base 636 */
	for(i = 0; i < 112; i++) {
		x_reg[i] = 0;
		y_reg[i] = 0;
	}
	
	x_reg[101] = 1;
	x_reg[98] = 1;
	x_reg[97] = 1;
	x_reg[96] = 1;
	x_reg[95] = 1;
	x_reg[94] = 1;
	
	for(i = 92; i >= 0; i--) {
		y_reg[i] = islarger(accum, x_reg);
		if(y_reg[i] == 1) {
			binary_subtract(accum, x_reg);
		}
		shiftdown(x_reg);
	}
	
	codeword[9] = (accum[9] * 512) + (accum[8] * 256) + (accum[7] * 128) + (accum[6] * 64) +
			(accum[5] * 32) + (accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) +
			(accum[1] * 2) + accum[0];
	
	/* then codewords I to B with base 1365 */
	
	for(j = 8; j > 0; j--) {
		for(i = 0; i < 112; i++) {
			accum[i] = y_reg[i];
			y_reg[i] = 0;
			x_reg[i] = 0;
		}
		x_reg[101] = 1;
		x_reg[99] = 1;
		x_reg[97] = 1;
		x_reg[95] = 1;
		x_reg[93] = 1;
		x_reg[91] = 1;
		for(i = 91; i >= 0; i--) {
			y_reg[i] = islarger(accum, x_reg);
			if(y_reg[i] == 1) {
				binary_subtract(accum, x_reg);
			}
			shiftdown(x_reg);
		}
	
		codeword[j] = (accum[10] * 1024) + (accum[9] * 512) + (accum[8] * 256) +
				(accum[7] * 128) + (accum[6] * 64) + (accum[5] * 32) +
				(accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) +
				(accum[1] * 2) + accum[0];
	}
	
	codeword[0] = (y_reg[10] * 1024) + (y_reg[9] * 512) + (y_reg[8] * 256) +
			(y_reg[7] * 128) + (y_reg[6] * 64) + (y_reg[5] * 32) +
			(y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) +
			(y_reg[1] * 2) + y_reg[0];
	
	for(i = 0; i < 8; i++) {
		if(codeword[i] == 1365) {
			codeword[i] = 0;
			codeword[i + 1]++;
		}
	}

	/* printf("Codewords  3: ");
	for(i = 0; i < 10; i++) {
		printf("%d ", codeword[i]);
	}
	printf("\n"); */
	
	/* *** Step 4 - Inserting Additional Information into Codewords *** */
	
	codeword[9] = codeword[9] * 2;
	
	if(usps_crc >= 1024) {
		codeword[0] += 659;
	}
	
	/* printf("Codewords 4b: ");
	for(i = 0; i < 10; i++) {
		printf("%d ", codeword[i]);
	}
	printf("\n"); */
	
	/* *** Step 5 - Conversion from Codewords to Characters *** */
	
	for(i = 0; i < 10; i++) {
		if(codeword[i] < 1287) {
			characters[i] = AppxD_I[codeword[i]];
		} else {
			characters[i] = AppxD_II[codeword[i] - 1287];
		}
	}
	
	/* printf("Characters 5a: ");
	for(i = 0; i < 10; i++) {
		printf("%4.4X ", characters[i]);
	}
	printf("\n"); */

	breakup(bit_pattern, usps_crc);

	for(i = 0; i < 10; i++) {
		if(bit_pattern[i] == 1) {
			characters[i] = 0x1FFF - characters[i];
		}
	}
	
	/* printf("Characters 5b: ");
	for(i = 0; i < 10; i++) {
		printf("%4.4X ", characters[i]);
	}
	printf("\n"); */

	/* *** Step 6 - Conversion from Characters to the Intelligent Mail Barcode *** */
	
	for(i = 0; i < 10; i++) {
		breakup(bit_pattern, characters[i]);
		for(j = 0; j < 13; j++) {
			bar_map[AppxD_IV[(13 * i) + j] - 1] = bit_pattern[j];
		}
	}
	
	strcpy(data_pattern, "");
	temp[1] = '\0';
	for(i = 0; i < 65; i++) {
		j = 0;
		if(bar_map[i] == 0)
			j += 1;
		if(bar_map[i + 65] == 0)
			j += 2;
		temp[0] = itoc(j);
		concat(data_pattern, temp);
	}
	
	/* Translate 4-state data pattern to symbol */
	read = 0;
	for(i = 0; i < strlen(data_pattern); i++)
	{
		if((data_pattern[i] == '1') || (data_pattern[i] == '0'))
		{
			set_module(symbol, 0, read);
		}
		set_module(symbol, 1, read);
		if((data_pattern[i] == '2') || (data_pattern[i] == '0'))
		{
			set_module(symbol, 2, read);
		}
		read += 2;
	}

	symbol->row_height[0] = 3;
	symbol->row_height[1] = 2;
	symbol->row_height[2] = 3;

	symbol->rows = 3;
	symbol->width = read - 1;
	return error_number;
}