R_API void r_print_code(RPrint *p, ut64 addr, ut8 *buf, int len, char lang) { int i, w = p->cols*0.7; switch (lang) { case '?': eprintf ("Valid print code formats are: C and Python\n"); break; case 'P': case 'p': p->printf ("import struct\nbuf = struct.pack (\"%dB\", ", len); for (i=0; !p->interrupt && i<len; i++) { if (!(i%w)) p->printf ("\n"); r_print_cursor (p, i, 1); p->printf ("0x%02x%c", buf[i], (i+1<len)?',':')'); r_print_cursor (p, i, 0); } p->printf ("\n"); break; default: p->printf ("#define _BUFFER_SIZE %d\n", len); p->printf ("unsigned char buffer[%d] = {", len); p->interrupt = 0; for (i=0; !p->interrupt && i<len; i++) { if (!(i%w)) p->printf ("\n "); r_print_cursor (p, i, 1); p->printf ("0x%02x, ", buf[i]); r_print_cursor (p, i, 0); } p->printf ("};\n"); } }
R_API void r_print_code(RPrint *p, ut64 addr, ut8 *buf, int len) { int i, w = p->cols*0.7; p->printf ("#define _BUFFER_SIZE %d\n", len); p->printf ("unsigned char buffer[%d] = {", len); p->interrupt = 0; for (i=0; !p->interrupt && i<len; i++) { if (!(i%w)) p->printf ("\n "); r_print_cursor (p, i, 1); p->printf ("0x%02x, ", buf[i]); r_print_cursor (p, i, 0); } p->printf ("};\n"); }
R_API void r_print_byte(RPrint *p, const char *fmt, int idx, ut8 ch) { ut8 rch = ch; if (!IS_PRINTABLE (ch) && fmt[0]=='%'&&fmt[1]=='c') rch = '.'; r_print_cursor (p, idx, 1); //if (p->flags & R_PRINT_FLAGS_CURSOR && idx == p->cur) { if (p->flags & R_PRINT_FLAGS_COLOR) { char *pre = NULL; switch (ch) { case 0x00: pre = Color_GREEN; break; case 0x7F: pre = Color_YELLOW; break; case 0xFF: pre = Color_RED; break; default: if (IS_PRINTABLE (ch)) pre = Color_MAGENTA; } if (pre) p->printf (pre); p->printf (fmt, rch); if (pre) p->printf (Color_RESET); } else p->printf (fmt, rch); r_print_cursor (p, idx, 0); }
R_API int r_print_string(RPrint *p, ut64 seek, const ut8 *buf, int len, int wide, int zeroend, int urlencode) { int i; //if (p->flags & R_PRINT_FLAGS_OFFSET) // r_print_addr(p, seek); p->interrupt = 0; for (i=0; !p->interrupt && i<len; i++) { if (zeroend && buf[i]=='\0') break; r_print_cursor (p, i, 1); if (urlencode) { // TODO: some ascii can be bypassed here p->printf ("%%%02x", buf[i]); } else { if (buf[i]=='\n' || IS_PRINTABLE (buf[i])) p->printf ("%c", buf[i]); else p->printf ("\\x%02x", buf[i]); } r_print_cursor (p, i, 0); if (wide) i++; } p->printf ("\n"); return i; }