static int biniku_get(FILE *fi) { uint a, p = 0; READ(&a, 4); if(fseek(fi, a * 4 + 4, SEEK_SET)) return -1; for(;;) { LODSB; p++; switch(biniku_code(a)) { case 1: // offset case 2: // int READ(&a, 4); p += 4; break; case 3: // string if(a != 0x0A) break; printf("%05i ", p); for(;;) { LODSB; p++; if(!a) break; text_putc(a); } putchar('\n'); break; } } return 0; }
static void promia_str(uint p, uint *l, uint *mc, uchar *ms, uint ns) { uint a, i; i = mc[p]; if(!i) return; if(i < 0x10 || i >= ns) { printf("# error, str 0x%08X\n", i); return; } if(i > *l) printf("# skip 0x%08X\n", *l); printf("%06i ", p); while(i < ns) { a = ms[i++]; if(!a) break; text_putc(a); } putchar('\n'); if(!ms[i]) i++; if(i > *l) *l = i; }
static int kogado_get(FILE *fi) { uint a, i, n, t[13]; READ(t, 0x34); if(memcmp(t, "SR01", 4)) return -1; if(fseek(fi, t[10], SEEK_SET)) return -1; for(i = 0; i < t[12]; i++) { if(fread(&a, 1, 2, fi) != 2) break; n = (ushort)a; if(n < 2) break; n -= 2; printf("%03i ", i); if(n) do { LODSB; if(!a && n < 3) break; text_putc(a); } while(--n); if(n == 2) LODSB; putchar('\n'); } return 0; }
/*----------------------------------------------------------------------------- Name : noprocess_and_write Purpose : read data from "fd" and WITHOUT Esc sentence interpretation and convert it (if font_path!=NULL) and put it on stdout Inputs : <> Outputs : <> Return : <> -----------------------------------------------------------------------------*/ static void noprocess_and_write(void) { int c; char * qrbuf; int size, idx; int ver, level, mode, casesensitivity; debug("NOT processing esc sentence.",NULL); while ((c = utf8_get_code()) >= 0) { if (cancel_flag) break; switch (state) { case PROCESSING_TAG: if (c == '.') { state = QRCODE_READING_VER0; qrbuf = malloc((size = 1024) + 1); idx = 0; if (!qrbuf) state = PROCESSING_IDLE; break; } /* fall out */ state = PROCESSING_IDLE; break; default: case PROCESSING_IDLE: if (c == ESC) { tag_index = 0; state = PROCESSING_TAG; } else if (font_path != NULL) text_putc(c); else fputc(c,stdout); break; case QRCODE_READING_VER0: ver = level = mode = casesensitivity = 0; if ((c = fromascii(c)) == -1) { state = PROCESSING_IDLE; break; } else { ver = c * 10; state = QRCODE_READING_VER1; } break; case QRCODE_READING_VER1: if ((c = fromascii(c)) == -1) { state = PROCESSING_IDLE; break; } else { ver += c; state = QRCODE_READING_LEVEL; } break; case QRCODE_READING_LEVEL: if ((c = fromascii(c)) == -1) { state = PROCESSING_IDLE; break; } else { level = c; state = QRCODE_READING_MODE; } break; case QRCODE_READING_MODE: if ((c = fromascii(c)) == -1) { state = PROCESSING_IDLE; break; } else { mode = c; state = QRCODE_READING_CASE_SENSITIVITY; } break; case QRCODE_READING_CASE_SENSITIVITY: if ((c = fromascii(c)) == -1) { state = PROCESSING_IDLE; break; } else { casesensitivity = c; state = QRCODE_READING_DATA; } break; case QRCODE_READING_DATA: if (c == ESC) { char * qr_data; int qrlen; command_t cmd; qrbuf[idx] = 0; fprintf(stderr,"DEBUG: %s() ver = %i, level = %i, mode = %i, case = %i\n", __func__, ver, level, mode, casesensitivity); if (cmd_mrs_qrcode(ver, level, mode, casesensitivity, qrbuf, &qr_data, &qrlen, &cmd) == APS_OK) { write_command(1, &cmd, qr_data, qrlen); fflush(stdout); free(qr_data); } free(qrbuf); state = PROCESSING_IDLE; } #if 0 { int i, j, k, x, bcnt, len; QRcode *qrcode; unsigned char * p, cb; #if 1 qrbuf[idx] = 0; qrcode = QRcode_encodeString(qrbuf, 0, QR_ECLEVEL_L, QR_MODE_8, 0); if (!qrcode) { state = PROCESSING_IDLE; break; } //p = malloc(len = ((qrcode->width + 7) / 8) * 8); len = (qrcode->width + 7) / 8; p = malloc(len * qrcode->width); memset(p, 0x5a, 10 * len * qrcode->width); for (idx = x = i = 0; i < qrcode->width; i ++) { for (bcnt = cb = j = 0; j < qrcode->width; j ++, x ++) { cb <<= 1; if (qrcode->data[x] & 1) cb |= 0x80 >> 7; if (++ bcnt == 8) { p[idx ++] = cb; cb = 0; bcnt = 0; } } if (bcnt) { cb <<= 8 - bcnt; p[idx ++] = cb; } } command_t cmd; cmd.size = 4; cmd.buf[0] = GS; cmd.buf[1] = 'k'; cmd.buf[2] = 8; cmd.buf[3] = qrcode->width; #endif //write_command(0, &cmd, p, idx); write_command(1, &cmd, p, idx); fflush(stdout); QRcode_free(qrcode); free(qrbuf); free(p); state = PROCESSING_IDLE; } #endif else { if (idx == size) { qrbuf = realloc(qrbuf, (size *= 2) + 1); if (!qrbuf) { state = PROCESSING_IDLE; break; } } qrbuf[idx ++] = c; } break; } }
/*----------------------------------------------------------------------------- Name : process_and_write Purpose : read data from "fd" and WITH Esc sentence interpretation and convert it (if font_path!=NULL) and put it on stdout Inputs : <> Outputs : <> Return : <> -----------------------------------------------------------------------------*/ static void process_and_write(void) { int c; debug("Processing esc sentence.",NULL); while ((c = utf8_get_code()) >= 0) { if (cancel_flag) break; switch (state) { case PROCESSING_IDLE: if (c == '<') { tag_index = 0; state = PROCESSING_TAG; } else if (font_path != NULL) text_putc(c); else fputc(c,stdout); break; default: case PROCESSING_TAG: if (c=='>') { int n; tag_buf[tag_index] = 0; n = tag_to_char(); if (n==-1) printf("<%s>",tag_buf); else fputc(n,stdout); state = PROCESSING_IDLE; } else if (c=='<') { /*reset tag index in case of '<<LF>'*/ fputc('<',stdout); tag_index = 0; } else { if (tag_index==TAG_BUFSIZE) { tag_buf[tag_index] = 0; printf("<%s",tag_buf); state = PROCESSING_IDLE; } else { tag_buf[tag_index] = c; tag_index++; } } break; } } }