QRcode *QRcode_encodeString(const char *string, int version, QRecLevel level, QRencodeMode hint, int casesensitive) { QRinput *input; QRcode *code; int ret; if(hint != QR_MODE_8 && hint != QR_MODE_KANJI) { errno = EINVAL; return NULL; } input = QRinput_new2(version, level); if(input == NULL) return NULL; ret = Split_splitStringToQRinput(string, input, hint, casesensitive); if(ret < 0) { QRinput_free(input); return NULL; } code = QRcode_encodeInput(input); QRinput_free(input); return code; }
void draw_structuredQRcodeFromText(int argc, char **argv) { QRinput_Struct *s; QRinput *input; int i, ret; s = QRinput_Struct_new(); if(s == NULL) { fprintf(stderr, "Failed to allocate memory.\n"); exit(1); } for(i=0; i<argc; i++) { input = QRinput_new2(version, level); if(input == NULL) { fprintf(stderr, "Failed to allocate memory.\n"); exit(1); } if(eightbit) { ret = QRinput_append(input, QR_MODE_8, strlen(argv[i]), (unsigned char *)argv[i]); } else { ret = Split_splitStringToQRinput(argv[i], input, hint, casesensitive); } if(ret < 0) { perror("Encoding the input string"); exit(1); } ret = QRinput_Struct_appendInput(s, input); if(ret < 0) { perror("Encoding the input string"); exit(1); } } ret = QRinput_Struct_insertStructuredAppendHeaders(s); if(ret < 0) { fprintf(stderr, "Too many inputs.\n"); } draw_structuredQRcode(s); QRinput_Struct_free(s); }
void view_simple(const char *str) { QRinput *input; int ret; input = QRinput_new2(version, level); if(input == NULL) { fprintf(stderr, "Memory allocation error.\n"); exit(1); } if(eightbit) { ret = QRinput_append(input, QR_MODE_8, strlen(str), (unsigned char *)str); } else { ret = Split_splitStringToQRinput(str, input, hint, casesensitive); } if(ret < 0) { perror("Encoding the input string"); exit(1); } view(0, input); QRinput_free(input); }
void test_encode_an(int num) { int ret; int len; len = fillANData(); QRcode *qrcode; QRdata *qrdata; FILE *fp; char buf[256]; qrcode = QRcode_encodeString((char *)data, 0, num % 4, QR_MODE_8, num % 2); if(qrcode == NULL) { if(errno == ERANGE) return; perror("test_encode_an aborted at QRcode_encodeString():"); printf("Length: %d\n", len); printf("Level: %d\n", num % 4); return; } qrdata = QRcode_decode(qrcode); if(qrdata == NULL) { printf("#%d: Failed to decode this code.\n", num); QRcode_free(qrcode); return; } if(qrdata->size != len) { printf("#%d: length mismatched (orig: %d, decoded: %d)\n", num, len, qrdata->size); } ret = memcmp(qrdata->data, data, len); if(ret != 0) { unsigned char *frame, *p; int x,y, c; QRinput *input; QRcode *origcode; BitStream *bstream; int spec[5]; printf("#%d: data mismatched.\n", num); printf("Version: %d\n", qrcode->version); QRspec_getEccSpec(qrcode->version, num%4, spec); printf("DataLength: %d\n", QRspec_rsDataLength(spec)); printf("BlockNum1: %d\n", QRspec_rsBlockNum1(spec)); printf("BlockNum: %d\n", QRspec_rsBlockNum(spec)); printf("DataCodes1: %d\n", QRspec_rsDataCodes1(spec)); snprintf(buf, 256, "monkey-orig-%d.dat", num); fp = fopen(buf, "w"); fputs((char *)data, fp); fclose(fp); snprintf(buf, 256, "monkey-result-%d.dat", num); fp = fopen(buf, "w"); fputs((char *)qrdata->data, fp); fclose(fp); snprintf(buf, 256, "monkey-result-unmasked-%d.dat", num); fp = fopen(buf, "w"); frame = QRcode_unmask(qrcode); p = frame; for(y=0; y<qrcode->width; y++) { for(x=0; x<qrcode->width; x++) { fputc((*p&1)?'1':'0', fp); p++; } fputc('\n', fp); } fclose(fp); free(frame); snprintf(buf, 256, "monkey-orig-unmasked-%d.dat", num); fp = fopen(buf, "w"); input = QRinput_new2(0, num % 4); Split_splitStringToQRinput((char *)data, input, QR_MODE_8, num % 2); origcode = QRcode_encodeMask(input, -2); p = origcode->data; for(y=0; y<origcode->width; y++) { for(x=0; x<origcode->width; x++) { fputc((*p&1)?'1':'0', fp); p++; } fputc('\n', fp); } fclose(fp); QRcode_free(origcode); snprintf(buf, 256, "monkey-orig-bits-%d.dat", num); fp = fopen(buf, "w"); bstream = QRinput_mergeBitStream(input); c = 0; for(x=0; x<bstream->length; x++) { fputc((bstream->data[x]&1)?'1':'0', fp); if((x & 7) == 7) { fputc(' ', fp); c++; } if((x & 63) == 63) { fprintf(fp, "%d\n", c); } } fclose(fp); QRinput_free(input); BitStream_free(bstream); snprintf(buf, 256, "monkey-result-bits-%d.dat", num); fp = fopen(buf, "w"); p = QRcode_extractBits(qrcode, &y); c = 0; for(x=0; x<y; x++) { fputc((p[x]&1)?'1':'0', fp); if((x & 7) == 7) { fputc(' ', fp); c++; } if((x & 63) == 63) { fprintf(fp, "%d\n", c); } } fclose(fp); free(p); } QRdata_free(qrdata); QRcode_free(qrcode); }
void test_split_structure(int num) { QRinput *input; QRinput_Struct *s; QRcode_List *codes, *list; QRinput_InputList *il; int version; QRecLevel level; int c, i, ret; version = (int)drand(40) + 1; level = (QRecLevel)drand(4); fill8bitString(); input = QRinput_new2(version, level); if(input == NULL) { perror("test_split_structure aborted at QRinput_new2():"); return; } ret = Split_splitStringToQRinput((char *)data, input, QR_MODE_KANJI, 1); if(ret < 0) { perror("test_split_structure aborted at Split_splitStringToQRinput():"); QRinput_free(input); return; } s = QRinput_splitQRinputToStruct(input); if(s == NULL) { if(errno != 0 && errno != ERANGE) { perror("test_split_structure aborted at QRinput_splitQRinputToStruct():"); } QRinput_free(input); return; } il = s->head; i = 0; while(il != NULL) { if(il->input->version != version) { printf("Test: version %d, level %c\n", version, levelChar[level]); printf("wrong version number.\n"); printQRinputInfo(il->input); exit(1); } i++; il = il->next; } codes = QRcode_encodeInputStructured(s); if(codes == NULL) { perror("test_split_structure aborted at QRcode_encodeInputStructured():"); QRinput_free(input); QRinput_Struct_free(s); return; } list = codes; il = s->head; c = 0; while(list != NULL) { if(list->code->version != version) { printf("#%d: data mismatched.\n", num); printf("Test: version %d, level %c\n", version, levelChar[level]); printf("code #%d\n", c); printf("Version mismatch: %d should be %d\n", list->code->version, version); printf("max bits: %d\n", QRspec_getDataLength(version, level) * 8 - 20); printQRinputInfo(il->input); printQRinput(input); exit(1); } list = list->next; il = il->next; c++; } QRinput_free(input); QRinput_Struct_free(s); QRcode_List_free(codes); }