int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, int rotate_angle) { int error_number; error_number = 0; error_number = ZBarcode_Encode_File(symbol, filename); if(error_number != 0) { return error_number; } return ZBarcode_Buffer(symbol, rotate_angle); }
int main(int argc, char **argv) { struct zint_symbol *my_symbol; int c; int error_number; int rotate_angle; int generated; int batch_mode; error_number = 0; rotate_angle = 0; generated = 0; my_symbol = ZBarcode_Create(); my_symbol->input_mode = UNICODE_MODE; batch_mode = 0; if(argc == 1) die(help_usage); while(1) { int option_index = 0; static struct option long_options[] = { {"help", 0, 0, 'h'}, {"types", 0, 0, 't'}, {"bind", 0, 0, 0}, {"box", 0, 0, 0}, {"directeps", 0, 0, 0}, {"directpdf", 0, 0, 0}, {"directpng", 0, 0, 0}, {"directsvg", 0, 0, 0}, {"dump", 0, 0, 0}, {"barcode", 1, 0, 'b'}, {"height", 1, 0, 0}, {"whitesp", 1, 0, 'w'}, {"border", 1, 0, 0}, {"data", 1, 0, 'd'}, {"output", 1, 0, 'o'}, {"input", 1, 0, 'i'}, {"fg", 1, 0, 0}, {"bg", 1, 0, 0}, {"cols", 1, 0, 0}, {"vers", 1, 0, 0}, {"rotate", 1, 0, 0}, {"secure", 1, 0, 0}, {"reverse", 1, 0, 'r'}, {"mode", 1, 0, 0}, {"primary", 1, 0, 0}, {"scale", 1, 0, 0}, {"gs1", 0, 0, 0}, {"kanji", 0, 0, 0}, {"sjis", 0, 0, 0}, {"binary", 0, 0, 0}, {"notext", 0, 0, 0}, {"square", 0, 0, 0}, {"init", 0, 0, 0}, {"smalltext", 0, 0, 0}, {"batch", 0, 0, 0}, {0, 0, 0, 0} }; c = getopt_long(argc, argv, "htb:w:d:o:i:rcmp", long_options, &option_index); if(c == -1) break; switch(c) { case 0: if(!strcmp(long_options[option_index].name, "bind")) { my_symbol->output_options += BARCODE_BIND; } if(!strcmp(long_options[option_index].name, "box")) { my_symbol->output_options += BARCODE_BOX; } if(!strcmp(long_options[option_index].name, "init")) { my_symbol->output_options += READER_INIT; } if(!strcmp(long_options[option_index].name, "smalltext")) { my_symbol->output_options += SMALL_TEXT; } if(!strcmp(long_options[option_index].name, "directeps")) { my_symbol->output_options += BARCODE_STDOUT; strncpy(my_symbol->outfile, "dummy.eps", 10); } if(!strcmp(long_options[option_index].name, "directpdf")) { my_symbol->output_options += BARCODE_STDOUT; strncpy(my_symbol->outfile, "dummy.pdf", 10); } if(!strcmp(long_options[option_index].name, "directpng")) { my_symbol->output_options += BARCODE_STDOUT; strncpy(my_symbol->outfile, "dummy.png", 10); } if(!strcmp(long_options[option_index].name, "directsvg")) { my_symbol->output_options += BARCODE_STDOUT; strncpy(my_symbol->outfile, "dummy.svg", 10); } if(!strcmp(long_options[option_index].name, "dump")) { my_symbol->output_options += BARCODE_STDOUT; strncpy(my_symbol->outfile, "dummy.txt", 10); } if(!strcmp(long_options[option_index].name, "gs1")) { my_symbol->input_mode = GS1_MODE; } if(!strcmp(long_options[option_index].name, "kanji")) { my_symbol->input_mode = KANJI_MODE; } if(!strcmp(long_options[option_index].name, "sjis")) { my_symbol->input_mode = SJIS_MODE; } if(!strcmp(long_options[option_index].name, "binary")) { my_symbol->input_mode = DATA_MODE; } if(!strcmp(long_options[option_index].name, "fg")) { strncpy(my_symbol->fgcolour, optarg, 7); } if(!strcmp(long_options[option_index].name, "bg")) { strncpy(my_symbol->bgcolour, optarg, 7); } if(!strcmp(long_options[option_index].name, "notext")) { my_symbol->show_hrt = 0; } if(!strcmp(long_options[option_index].name, "square")) { my_symbol->option_3 = DM_SQUARE; } if(!strcmp(long_options[option_index].name, "scale")) { my_symbol->scale = (float)(atof(optarg)); if(my_symbol->scale < 0.01) { /* Zero and negative values are not permitted */ fprintf(stderr, "Invalid scale value\n"); my_symbol->scale = 1.0; } } if(!strcmp(long_options[option_index].name, "border")) { error_number = validator(NESET, optarg); if(error_number == ZERROR_INVALID_DATA) die("Invalid border width\n"); if((atoi(optarg) >= 0) && (atoi(optarg) <= 1000)) { my_symbol->border_width = atoi(optarg); } else { fprintf(stderr, "Border width out of range\n"); } } if(!strcmp(long_options[option_index].name, "height")) { error_number = validator(NESET, optarg); if(error_number == ZERROR_INVALID_DATA) die("Invalid symbol height\n"); if((atoi(optarg) >= 1) && (atoi(optarg) <= 1000)) { my_symbol->height = atoi(optarg); } else { fprintf(stderr, "Symbol height out of range\n"); } } if(!strcmp(long_options[option_index].name, "cols")) { if((atoi(optarg) >= 1) && (atoi(optarg) <= 30)) { my_symbol->option_2 = atoi(optarg); } else { fprintf(stderr, "Number of columns out of range\n"); } } if(!strcmp(long_options[option_index].name, "vers")) { if((atoi(optarg) >= 1) && (atoi(optarg) <= 40)) { my_symbol->option_2 = atoi(optarg); } else { fprintf(stderr, "Invalid QR Code version\n"); } } if(!strcmp(long_options[option_index].name, "secure")) { if((atoi(optarg) >= 1) && (atoi(optarg) <= 8)) { my_symbol->option_1 = atoi(optarg); } else { fprintf(stderr, "ECC level out of range\n"); } } if(!strcmp(long_options[option_index].name, "primary")) { if(strlen(optarg) <= 90) { strcpy(my_symbol->primary, optarg); } else { fprintf(stderr, "Primary data string too long"); } } if(!strcmp(long_options[option_index].name, "mode")) { if((optarg[0] >= '0') && (optarg[0] <= '6')) { my_symbol->option_1 = optarg[0] - '0'; } else { fprintf(stderr, "Invalid mode\n"); } } if(!strcmp(long_options[option_index].name, "rotate")) { /* Only certain inputs allowed */ error_number = validator(NESET, optarg); if(error_number == ZERROR_INVALID_DATA) die("Invalid rotation parameter\n"); switch(atoi(optarg)) { case 90: rotate_angle = 90; break; case 180: rotate_angle = 180; break; case 270: rotate_angle = 270; break; default: rotate_angle = 0; break; } } if(!strcmp(long_options[option_index].name, "batch")) { /* Switch to batch processing mode */ batch_mode = 1; } break; case 'h': die(help_usage); case 't': die(help_types); case 'b': error_number = validator(NESET, optarg); if (error_number == ZERROR_INVALID_DATA) die("Invalid barcode type\n"); my_symbol->symbology = atoi(optarg); break; case 'w': error_number = validator(NESET, optarg); if (error_number == ZERROR_INVALID_DATA) die("Invalid whitespace value\n"); if((atoi(optarg) >= 0) && (atoi(optarg) <= 1000)) { my_symbol->whitespace_width = atoi(optarg); } else { fprintf(stderr, "Whitespace value out of range"); } break; case 'd': /* we have some data! */ if(batch_mode == 0) { error_number = escape_char_process(my_symbol, (unsigned char*)optarg, strlen(optarg)); if(error_number == 0) { error_number = ZBarcode_Print(my_symbol, rotate_angle); } generated = 1; if(error_number != 0) { fprintf(stderr, "%s\n", my_symbol->errtxt); ZBarcode_Delete(my_symbol); return 1; } } else { fprintf(stderr, "Cannot define data in batch mode"); } break; case 'i': /* Take data from file */ if(batch_mode == 0) { error_number = ZBarcode_Encode_File(my_symbol, optarg); if(error_number == 0) { error_number = ZBarcode_Print(my_symbol, rotate_angle); } generated = 1; if(error_number != 0) { fprintf(stderr, "%s\n", my_symbol->errtxt); ZBarcode_Delete(my_symbol); return 1; } } else { /* Take each line of text as a separate data set */ error_number = batch_process(my_symbol, optarg); generated = 1; if(error_number != 0) { fprintf(stderr, "%s\n", my_symbol->errtxt); ZBarcode_Delete(my_symbol); return 1; } } break; case 'o': strncpy(my_symbol->outfile, optarg, 250); break; case 'r': strcpy(my_symbol->fgcolour, "ffffff"); strcpy(my_symbol->bgcolour, "000000"); break; case '?': break; default: fprintf(stderr, "?? getopt error 0%o\n", c); } } if (optind < argc) { fprintf(stderr, "Invalid option "); while (optind < argc) fprintf(stderr, "%s", argv[optind++]); fprintf(stderr, "\n"); } if(generated == 0) { fprintf(stderr, "error: No data received, no symbol generated\n"); } ZBarcode_Delete(my_symbol); return error_number; }