int nve_18(struct zint_symbol *symbol, unsigned char source[], int length) { /* Add check digit if encoding an NVE18 symbol */ int error_number, zeroes, i, nve_check, total_sum, sourcelen; unsigned char ean128_equiv[25]; memset(ean128_equiv, 0, 25); sourcelen = length; if(sourcelen > 17) { strcpy(symbol->errtxt, "Input too long"); return ZINT_ERROR_TOO_LONG; } error_number = is_sane(NEON, source, length); if(error_number == ZINT_ERROR_INVALID_DATA) { strcpy(symbol->errtxt, "Invalid characters in data"); return error_number; } zeroes = 17 - sourcelen; strcpy((char *)ean128_equiv, "[00]"); memset(ean128_equiv + 4, '0', zeroes); strcpy((char*)ean128_equiv + 4 + zeroes, (char*)source); total_sum = 0; for(i = sourcelen - 1; i >= 0; i--) { total_sum += ctoi(source[i]); if(!(i & 1)) { total_sum += 2 * ctoi(source[i]); } } nve_check = 10 - total_sum % 10; if(nve_check == 10) { nve_check = 0; } ean128_equiv[21] = itoc(nve_check); ean128_equiv[22] = '\0'; error_number = ean_128(symbol, ean128_equiv, ustrlen(ean128_equiv)); return error_number; }
int ean_14(struct zint_symbol *symbol, unsigned char source[], int length) { /* EAN-14 - A version of EAN-128 */ int i, count, check_digit; int error_number, zeroes; unsigned char ean128_equiv[20]; if(length > 13) { strcpy(symbol->errtxt, "Input wrong length"); return ZINT_ERROR_TOO_LONG; } error_number = is_sane(NEON, source, length); if(error_number == ZINT_ERROR_INVALID_DATA) { strcpy(symbol->errtxt, "Invalid character in data"); return error_number; } zeroes = 13 - length; strcpy((char*)ean128_equiv, "[01]"); memset(ean128_equiv + 4, '0', zeroes); ustrcpy(ean128_equiv + 4 + zeroes, source); count = 0; for (i = length - 1; i >= 0; i--) { count += ctoi(source[i]); if (!(i & 1)) { count += 2 * ctoi(source[i]); } } check_digit = 10 - (count % 10); if (check_digit == 10) { check_digit = 0; } ean128_equiv[17] = itoc(check_digit); ean128_equiv[18] = '\0'; error_number = ean_128(symbol, ean128_equiv, ustrlen(ean128_equiv)); return error_number; }
int reduced_charset(struct zint_symbol *symbol, unsigned char *source, int length) { /* These are the "norm" standards which only support Latin-1 at most */ int error_number = 0; #ifndef _MSC_VER unsigned char preprocessed[length + 1]; #else unsigned char* preprocessed = (unsigned char*)_alloca(length + 1); #endif if(symbol->symbology == BARCODE_CODE16K) { symbol->whitespace_width = 16; symbol->border_width = 2; symbol->output_options = BARCODE_BIND; } if(symbol->symbology == BARCODE_ITF14) { symbol->whitespace_width = 20; symbol->border_width = 8; symbol->output_options = BARCODE_BOX; } switch(symbol->input_mode) { case DATA_MODE: case GS1_MODE: memcpy(preprocessed, source, length); preprocessed[length] = '\0'; break; case UNICODE_MODE: error_number = latin1_process(symbol, source, preprocessed, &length); if(error_number != 0) { return error_number; } break; } switch(symbol->symbology) { case BARCODE_C25MATRIX: error_number = matrix_two_of_five(symbol, preprocessed, length); break; case BARCODE_C25IND: error_number = industrial_two_of_five(symbol, preprocessed, length); break; case BARCODE_C25INTER: error_number = interleaved_two_of_five(symbol, preprocessed, length); break; case BARCODE_C25IATA: error_number = iata_two_of_five(symbol, preprocessed, length); break; case BARCODE_C25LOGIC: error_number = logic_two_of_five(symbol, preprocessed, length); break; case BARCODE_DPLEIT: error_number = dpleit(symbol, preprocessed, length); break; case BARCODE_DPIDENT: error_number = dpident(symbol, preprocessed, length); break; case BARCODE_UPCA: error_number = eanx(symbol, preprocessed, length); break; case BARCODE_UPCE: error_number = eanx(symbol, preprocessed, length); break; case BARCODE_EANX: error_number = eanx(symbol, preprocessed, length); break; case BARCODE_EAN128: error_number = ean_128(symbol, preprocessed, length); break; case BARCODE_CODE39: error_number = c39(symbol, preprocessed, length); break; case BARCODE_PZN: error_number = pharmazentral(symbol, preprocessed, length); break; case BARCODE_EXCODE39: error_number = ec39(symbol, preprocessed, length); break; case BARCODE_CODABAR: error_number = codabar(symbol, preprocessed, length); break; case BARCODE_CODE93: error_number = c93(symbol, preprocessed, length); break; case BARCODE_LOGMARS: error_number = c39(symbol, preprocessed, length); break; case BARCODE_CODE128: error_number = code_128(symbol, preprocessed, length); break; case BARCODE_CODE128B: error_number = code_128(symbol, preprocessed, length); break; case BARCODE_NVE18: error_number = nve_18(symbol, preprocessed, length); break; case BARCODE_CODE11: error_number = code_11(symbol, preprocessed, length); break; case BARCODE_MSI_PLESSEY: error_number = msi_handle(symbol, preprocessed, length); break; case BARCODE_TELEPEN: error_number = telepen(symbol, preprocessed, length); break; case BARCODE_TELEPEN_NUM: error_number = telepen_num(symbol, preprocessed, length); break; case BARCODE_PHARMA: error_number = pharma_one(symbol, preprocessed, length); break; case BARCODE_PLESSEY: error_number = plessey(symbol, preprocessed, length); break; case BARCODE_ITF14: error_number = itf14(symbol, preprocessed, length); break; case BARCODE_FLAT: error_number = flattermarken(symbol, preprocessed, length); break; case BARCODE_FIM: error_number = fim(symbol, preprocessed, length); break; case BARCODE_POSTNET: error_number = post_plot(symbol, preprocessed, length); break; case BARCODE_PLANET: error_number = planet_plot(symbol, preprocessed, length); break; case BARCODE_RM4SCC: error_number = royal_plot(symbol, preprocessed, length); break; case BARCODE_AUSPOST: error_number = australia_post(symbol, preprocessed, length); break; case BARCODE_AUSREPLY: error_number = australia_post(symbol, preprocessed, length); break; case BARCODE_AUSROUTE: error_number = australia_post(symbol, preprocessed, length); break; case BARCODE_AUSREDIRECT: error_number = australia_post(symbol, preprocessed, length); break; case BARCODE_CODE16K: error_number = code16k(symbol, preprocessed, length); break; case BARCODE_PHARMA_TWO: error_number = pharma_two(symbol, preprocessed, length); break; case BARCODE_ONECODE: error_number = imail(symbol, preprocessed, length); break; case BARCODE_ISBNX: error_number = eanx(symbol, preprocessed, length); break; case BARCODE_RSS14: error_number = rss14(symbol, preprocessed, length); break; case BARCODE_RSS14STACK: error_number = rss14(symbol, preprocessed, length); break; case BARCODE_RSS14STACK_OMNI: error_number = rss14(symbol, preprocessed, length); break; case BARCODE_RSS_LTD: error_number = rsslimited(symbol, preprocessed, length); break; case BARCODE_RSS_EXP: error_number = rssexpanded(symbol, preprocessed, length); break; case BARCODE_RSS_EXPSTACK: error_number = rssexpanded(symbol, preprocessed, length); break; case BARCODE_EANX_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_EAN128_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_RSS14_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_RSS_LTD_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_RSS_EXP_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_UPCA_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_UPCE_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_RSS14STACK_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_RSS14_OMNI_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_RSS_EXPSTACK_CC: error_number = composite(symbol, preprocessed, length); break; case BARCODE_KIX: error_number = kix_code(symbol, preprocessed, length); break; case BARCODE_CODE32: error_number = code32(symbol, preprocessed, length); break; case BARCODE_DAFT: error_number = daft_code(symbol, preprocessed, length); break; case BARCODE_EAN14: error_number = ean_14(symbol, preprocessed, length); break; case BARCODE_AZRUNE: error_number = aztec_runes(symbol, preprocessed, length); break; case BARCODE_KOREAPOST: error_number = korea_post(symbol, preprocessed, length); break; case BARCODE_HIBC_128: error_number = hibc(symbol, preprocessed, length); break; case BARCODE_HIBC_39: error_number = hibc(symbol, preprocessed, length); break; case BARCODE_HIBC_DM: error_number = hibc(symbol, preprocessed, length); break; case BARCODE_HIBC_QR: error_number = hibc(symbol, preprocessed, length); break; case BARCODE_HIBC_PDF: error_number = hibc(symbol, preprocessed, length); break; case BARCODE_HIBC_MICPDF: error_number = hibc(symbol, preprocessed, length); break; case BARCODE_HIBC_AZTEC: error_number = hibc(symbol, preprocessed, length); break; case BARCODE_JAPANPOST: error_number = japan_post(symbol, preprocessed, length); break; case BARCODE_CODE49: error_number = code_49(symbol, preprocessed, length); break; case BARCODE_CHANNEL: error_number = channel_code(symbol, preprocessed, length); break; case BARCODE_CODEONE: error_number = code_one(symbol, preprocessed, length); break; case BARCODE_DATAMATRIX: error_number = dmatrix(symbol, preprocessed, length); break; case BARCODE_PDF417: error_number = pdf417enc(symbol, preprocessed, length); break; case BARCODE_PDF417TRUNC: error_number = pdf417enc(symbol, preprocessed, length); break; case BARCODE_MICROPDF417: error_number = micro_pdf417(symbol, preprocessed, length); break; case BARCODE_MAXICODE: error_number = maxicode(symbol, preprocessed, length); break; case BARCODE_AZTEC: error_number = aztec(symbol, preprocessed, length); break; } return error_number; }