radare2/libr/core/log.c
pancake 3bfa61946e Cleaner pvj, fix tinype load, and honor 'ao N's help
Fix TinyPE loading
'ao' arg is now number of opcodes, not bytes
'pvj' output is now cleaner
Random refactorings
2013-02-11 10:51:45 +01:00

71 lines
1.6 KiB
C

/* radare - LGPL - Copyright 2009-2013 - pancake */
#include <r_core.h>
R_API int r_core_log_list(RCore *core, int n, int nth, char fmt) {
int printed = 0;
int count = 0, i, idx, id = core->log->first;
RStrpool *sp = core->log->sp;
char *str = sp->str;
if (fmt=='j') r_cons_printf ("[");
for (i=idx=0; str && *str; i++, id++) {
if ((n&&n<=id)||!n) {
switch (fmt) {
case 'j':r_cons_printf ("%s[%d,\"%s\"]",
printed?",":"",id, str); break;
case '*':r_cons_printf ("\"l %s\"\n", str); break;
default: r_cons_printf ("%d %s\n", id, str); break;
}
printed++;
if (nth && printed >= nth) break;
}
str = r_strpool_next (sp, idx);
if (!str) break;
idx = r_strpool_get_index (sp, str);
count++;
}
if (fmt == 'j')
r_cons_printf ("]\n");
return count;
}
R_API RCoreLog *r_core_log_new () {
RCoreLog *log = R_NEW0 (RCoreLog);
r_core_log_init (log);
return log;
}
R_API void r_core_log_init (RCoreLog *log) {
log->first = 1;
log->last = 1;
log->sp = r_strpool_new (0);
}
R_API void r_core_log_free(RCoreLog *log) {
r_strpool_free (log->sp);
free (log);
}
R_API void r_core_log_add(RCore *core, const char *msg) {
r_strpool_append (core->log->sp, msg);
core->log->last++;
}
R_API void r_core_log_del(RCore *core, int n) {
int idx;
char *s;
if (n>0) {
if (n > core->log->last)
n = core->log->last;
idx = n-core->log->first;
if (idx<0) return;
core->log->first += idx+1;
s = r_strpool_get_i (core->log->sp, idx);
r_strpool_slice (core->log->sp, idx);
} else {
core->log->first = core->log->last;
r_strpool_empty (core->log->sp);
}
}