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; }
char * encode_t4 (int k_param, char *inbuf, int eolnskip) { bit_string ref_line; /* Reference line */ bit_string t4_line; /* Output encoded line */ bit_string code_line; /* Line we are codeing */ short i,j; /* Loop variable */ int run_buf [LINEBUF], run_buf2 [LINEBUF]; if (a3Width) forcesize = 2432; if (b4Width) forcesize = 2048; if (standardwidth) forcesize = 1728; if (k_param > 1) twoDimensional = 1; ref_line.run_top = run_buf; code_line.run_top = run_buf2; code_line.dbuf_top = inbuf; t4_line.dbuf_top = malloc ((unsigned int)((PIC_LINESIZE * NUMLINES) + 28)); set_input (&code_line); set_output (&t4_line); /* Repeat this loop once for every input line expected */ for (i = 0; i < NUMLINES; i++) { if (code_line.run_top == run_buf) { /*swap buffers*/ ref_line.run_top = run_buf; code_line.run_top = run_buf2; } else { ref_line.run_top = run_buf2; code_line.run_top = run_buf; } /* reset pointers */ code_line.run_pos = code_line.run_top; ref_line.run_pos = ref_line.run_top; /* fill buffer for coding line */ get_runs (&code_line); code_line.run_pos = code_line.run_top; put_eoln (&t4_line); if (k_param > 1) { if (i % k_param == 0) { set_bit (&t4_line); /* tag bit, 1-d line follows */ code_one (&code_line, &t4_line); } else { clr_bit (&t4_line); /* tag bit, 2-d line follows */ code_two (&ref_line, &code_line, &t4_line); } } else code_one (&code_line, &t4_line); /* skip any extra eoln bit in orig data */ for (j = 0; j < eolnskip; j++) get_bit (&code_line); } /* now finish with 6 EOL's, as per T.4 */ for (i = 0; i < 5; ++i) { put_eoln (&t4_line); if (k_param > 1) set_bit (&t4_line); } /* flush buffers, write preamble */ flush_output (&t4_line); return (t4_line.dbuf_top); }