static int writeASCII(QRcode *qrcode, const char *outfile, int invert) { FILE *fp; unsigned char *row; int x, y; int realwidth; char *buffer, *p; int buffer_s; char black = '#'; char white = ' '; if(invert) { black = ' '; white = '#'; } size = 1; fp = openFile(outfile); realwidth = (qrcode->width + margin * 2) * 2; buffer_s = realwidth + 2; buffer = (char *)malloc( buffer_s ); if(buffer == NULL) { fprintf(stderr, "Failed to allocate memory.\n"); exit(EXIT_FAILURE); } /* top margin */ writeASCII_margin(fp, realwidth, buffer, buffer_s, invert); /* data */ for(y=0; y<qrcode->width; y++) { row = qrcode->data+(y*qrcode->width); p = buffer; memset(p, white, margin * 2); p += margin * 2; for(x=0; x<qrcode->width; x++) { if(row[x]&0x1) { *p++ = black; *p++ = black; } else { *p++ = white; *p++ = white; } } memset(p, white, margin * 2); p += margin * 2; *p++ = '\n'; *p++ = '\0'; fputs( buffer, fp ); } /* bottom margin */ writeASCII_margin(fp, realwidth, buffer, buffer_s, invert); fclose(fp); free(buffer); return 0; }
static QRimageResultType writeASCII(QRcode *qrcode, const char *outfile, int invert) { FILE *fp; unsigned char *row; int x, y; int realwidth; char *buffer, *p; int buffer_s; char black = '#'; char white = ' '; if(invert) { black = ' '; white = '#'; } fp = fopen(outfile, "wb"); if(fp == NULL) { return QR_IMG_FAILED_CREATE_FILE; } realwidth = (qrcode->width + margin * 2) * 2; buffer_s = realwidth + 2; buffer = (char *)malloc( buffer_s ); if(buffer == NULL) { return QR_IMG_FAILED_ALLOCATE_MEMORY; } /* top margin */ writeASCII_margin(fp, realwidth, buffer, buffer_s, invert); /* data */ for(y=0; y<qrcode->width; y++) { row = qrcode->data+(y*qrcode->width); p = buffer; memset(p, white, margin * 2); p += margin * 2; for(x=0; x<qrcode->width; x++) { if(row[x]&0x1) { *p++ = black; *p++ = black; } else { *p++ = white; *p++ = white; } } memset(p, white, margin * 2); p += margin * 2; *p++ = '\n'; *p++ = '\0'; fputs( buffer, fp ); } /* bottom margin */ writeASCII_margin(fp, realwidth, buffer, buffer_s, invert); fclose(fp); free(buffer); return QR_IMG_SUCCESS; }