mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-09 15:52:33 +00:00
![pancake](/assets/img/avatar_default.png)
Initial implementation of anal hints (ah?) Use anal hints in core/disasm. Needs more work New data structure StrHT (string hashtable) Simplify core/libs.c with cpp macros Added r_cons_color() wip function for ansi256 consoles RPrint no longer depends on r_cons Sort 'a?' help commands Add support for named print formats with pf$ command Add support for 64 bit string pointers in 'pf' ('S') Add r_print_mute and r_print_format_length functions Bump r2 nodejs bindings version number Merge r_print into r_util
+--------+ | r_cons | +--------+ r_cons_fb r_cons_frame r_cons_frame_add r_cons_frame_del struct r_cons_frame_t { int w, h; // should be the same as text|draw->w and text|draw->h int rw, rh; struct r_cons_buffer_t *text; struct r_cons_buffer_t *draw; struct }; struct r_cons_buffer_t { int alpha; /* ' ' chars in buffers are not written */ int w, h; ut8 *buf; }; struct r_cons_t { struct r_cons_buffer_t *b; int w, h; struct list_head frames; }; struct r_cons_frame_t *r_cons_frame_new(int x, int y, int w, int h) { struct r_cons_frame_t *f = R_NEW(struct r_cons_frame_t); f->text = r_cons_buffer_new(w, h); f->draw = r_cons_buffer_new(w, h); f->w = w; f->h = h; return f; } void r_cons_frame_add(struct r_cons_t *cons, struct r_cons_frame_t *f, int head) { if (head) list_add(&(f->list), &cons->frames); else list_add_tail(&(f->list), &cons->frames); } int r_cons_frame_render(struct r_cons_frame_t *frame, struct r_cons_buffer_t *buf) { /* foreach pixel resolve matching frame (Z-ordered) and draw */ } /* <{:api-prefix r_cons_}> */ /* <{:doc Draws a line between two points in a buffer}> */ /* <{:api int,buffer_line,int,int,int,int}> */ void r_cons_buffer_line(struct r_cons_buffer_t *buf, int x0, int y0, int x1, int y1) { /* XXX PURE SHIT */ char onechars[9] = { '.', '_',',', '\\', '|','/', '\'', '^','\'', }; double x = x0; double y = y0; double xi = x1-x0; double yi = y1-y0; for(;x<x1;x++) { r_cons_buffer_putch(buf, x, y, '.'); x+=xi; } } /* buffers */ struct r_cons_buffer *r_cons_buffer_new(int w, int h) { struct r_cons_buffer_t *buf = R_NEW(struct r_cons_buffer_t); if (w<1) w=1; if (h<1) h=1; buf->rw = buf->w = w; buf->rh = buf->h = h; buf->buf = (ut8*)malloc(w*h); return buf; } int r_cons_buffer_set_size(struct r_cons_buffer *buf, int w, int h) { struct r_cons_buffer_t *buf = R_NEW(struct r_cons_buffer_t); if (w<1) w=1; if (h<1) h=1; if (w>buf->rw) { /* must resize internal buffer */ buf->rw = w; buf->buf = (ut8*) realloc(buf->buf, w*h); } buf->rw = buf->w = w; buf->rh = buf->h = h; buf->buf = (ut8*)malloc(w*h); return buf; }