void test_struct_semilong(void) { QRcode_List *codes, *list; const char *str = "asdfasdfasdfasdfasdfASDFASDASDFASDFAsdfasdfasdfasdASDFASDFADSADadsfasdf"; int num, size; testStart("Testing semi-long structured-append symbols"); codes = QRcode_encodeString8bitStructured(str, 1, QR_ECLEVEL_L); list = codes; num = 0; while(list != NULL) { num++; assert_equal(list->code->version, 1, "version number is %d (1 expected)\n", list->code->version); list = list->next; } size = QRcode_List_size(codes); assert_equal(num, size, "QRcode_List_size returns wrong size?"); QRcode_List_free(codes); codes = QRcode_encodeStringStructured(str, 1, QR_ECLEVEL_L, QR_MODE_8, 1); list = codes; num = 0; while(list != NULL) { num++; assert_equal(list->code->version, 1, "version number is %d (1 expected)\n", list->code->version); list = list->next; } size = QRcode_List_size(codes); assert_equal(num, size, "QRcode_List_size returns wrong size?"); QRcode_List_free(codes); testFinish(); }
static QRcode_List *encodeStructured(const unsigned char *intext, int length) { QRcode_List *list; if(eightbit) { list = QRcode_encodeDataStructured(length, intext, version, level); } else { list = QRcode_encodeStringStructured((char *)intext, version, level, hint, casesensitive); } return list; }
static QRcode_List *encodeStructured(const char *intext) { QRcode_List *list; if(eightbit) { list = QRcode_encodeString8bitStructured(intext, version, level); } else { list = QRcode_encodeStringStructured(intext, version, level, hint, casesensitive); } return list; }
void orcqrencode(char *ctx) { int version; int level; int hint; int size; int margin; int i; int doEncodeStructured; char buf[MAX_DATA_SIZE]; char buf2[MAX_DATA_SIZE]; char qrfile[SIZE_QRFILE]; char qrfile_suffix[SIZE_QRFILE + 10]; char *p; QRcode *code; QRcode_List *head, *entry; OPENLOG; if((p = strchr(CTX(ctx, OFFSET_INFILE), ' ')) != NULL) *p = '\0'; if((p = strchr(CTX(ctx, OFFSET_QRFILE), ' ')) != NULL) *p = '\0'; memset(CTX(ctx, OFFSET_RET_CODE), QRENCODE_OK, SIZE_RET_CODE); if(euc2sjis(CTX(ctx, OFFSET_INFILE), buf) != 0){ memset(CTX(ctx, OFFSET_RET_CODE), CHAR_CONV_ERROR, SIZE_RET_CODE); return; } hint = ctx_string2int(ctx, OFFSET_HINT, SIZE_HINT); if (hint < 2) { if(parse_csv(buf, buf2) !=0){ memset(CTX(ctx, OFFSET_RET_CODE), KANA_CONV_ERROR, SIZE_RET_CODE); return; } } else { lf2crlf(buf,buf2); } snprintf(qrfile, SIZE_QRFILE, "%s", CTX(ctx, OFFSET_QRFILE)); version = ctx_string2int(ctx, OFFSET_VERSION, SIZE_VERSION); if(version <= 0 || version > 40){ memset(CTX(ctx, OFFSET_RET_CODE), PARAM_ERROR, SIZE_RET_CODE); return; } switch(*CTX(ctx, OFFSET_LEVEL)){ case 'L': level = QR_ECLEVEL_L; break; case 'M': level = QR_ECLEVEL_M; break; case 'Q': level = QR_ECLEVEL_Q; break; case 'H': level = QR_ECLEVEL_H; break; default: level = QR_ECLEVEL_L; } p = strrchr(qrfile, '.'); if(p != NULL)*p = '\0'; doEncodeStructured = ctx_string2int(ctx, OFFSET_STRUCTURED, SIZE_STRUCTURED); hint = (hint % 2) == 0 ? QR_MODE_KANJI : QR_MODE_8; size = ctx_string2int(ctx, OFFSET_PIXEL, SIZE_PIXEL); margin = ctx_string2int(ctx, OFFSET_MARGIN, SIZE_MARGIN); code = QRcode_encodeString(buf2, version, level, hint, 1); if (code != NULL) { if (code->version <= version) { snprintf(qrfile_suffix, sizeof(qrfile_suffix), "%s_%02d.png", qrfile, 1); if(writePNG(code, qrfile_suffix, size, margin) != 0){ memset(CTX(ctx, OFFSET_RET_CODE), WRITE_PNG_ERROR, SIZE_RET_CODE); QRcode_free(code); return; } SYSLOG("write single image"); sprintf(buf, "%02d" , code->version); memcpy(CTX(ctx, OFFSET_RET_VERSION), buf, SIZE_RET_VERSION); sprintf(buf, "%02d" , 1); memcpy(CTX(ctx, OFFSET_RET_SYMBOLS), "01", SIZE_RET_SYMBOLS); QRcode_free(code); return; } QRcode_free(code); } if (doEncodeStructured) { head = QRcode_encodeStringStructured(buf2, version, level, hint ,1); if(head) { entry = head; i = 0; while(entry != NULL) { code = entry->code; snprintf(qrfile_suffix, sizeof(qrfile_suffix), "%s_%02d.png", qrfile, i + 1); if(writePNG(code, qrfile_suffix, size, margin) != 0){ memset(CTX(ctx, OFFSET_RET_CODE), WRITE_PNG_ERROR, SIZE_RET_CODE); break; } entry = entry->next; i++; } SYSLOG("write multi images"); QRcode_List_free(entry); } else { memset(CTX(ctx, OFFSET_RET_CODE), QRENCODE_ERROR, SIZE_RET_CODE); return; } sprintf(buf, "%02d" , head->code->version); memcpy(CTX(ctx, OFFSET_RET_VERSION), buf, SIZE_RET_VERSION); sprintf(buf, "%02d" , i); memcpy(CTX(ctx, OFFSET_RET_SYMBOLS), buf, SIZE_RET_SYMBOLS); QRcode_List_free(head); } #if 1 print_ctx(ctx); #endif SYSLOG("end"); return; }