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); } }
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); }
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); }
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; }
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"); }
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; }
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); }
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"); }
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(); }
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; }