mirror of
https://github.com/radareorg/radare2.git
synced 2024-11-27 23:20:40 +00:00
489 lines
5.7 KiB
C
489 lines
5.7 KiB
C
/* radare - LGPL - Copyright 2021 - pancake */
|
|
|
|
#include <r_util.h>
|
|
|
|
typedef struct {
|
|
char ch;
|
|
const char *l[3];
|
|
} SevenSegments;
|
|
|
|
// seven segment ascii-art text
|
|
static const SevenSegments ss_lc[] = {
|
|
{ '0', { " __ ",
|
|
"| /|",
|
|
"|/_|" }
|
|
},
|
|
{ '1', { " ",
|
|
" | ",
|
|
" | " }
|
|
},
|
|
{ '2', { " __ ",
|
|
" __|",
|
|
"|__ " }
|
|
},
|
|
{ '3', { " __ ",
|
|
" __|",
|
|
" __|" }
|
|
},
|
|
{ '4', { " ",
|
|
"|__|",
|
|
" |" }
|
|
},
|
|
{ '5', { " __ ",
|
|
"|__ ",
|
|
" __|" }
|
|
},
|
|
{ '6', { " __ ",
|
|
"|__ ",
|
|
"|__|" }
|
|
},
|
|
{ '7', { " __ ",
|
|
" |",
|
|
" |" }
|
|
},
|
|
{ '8', { " __ ",
|
|
"|__|",
|
|
"|__|" }
|
|
},
|
|
{ '9', { " __ ",
|
|
"|__|",
|
|
" __|" }
|
|
},
|
|
{ '$', { " __ ",
|
|
"||_ ",
|
|
" _||" }
|
|
},
|
|
{ '_', { " ",
|
|
" ",
|
|
" __ " }
|
|
},
|
|
{ '.', { " ",
|
|
" ",
|
|
" _ " }
|
|
},
|
|
{ ',', { " ",
|
|
" ",
|
|
" _ " }
|
|
},
|
|
{ '/', { " ",
|
|
" / ",
|
|
" / " }
|
|
},
|
|
{ '%', { " ",
|
|
" O/ ",
|
|
" /O " }
|
|
},
|
|
{ '=', { " ",
|
|
" __ ",
|
|
" __ " }
|
|
},
|
|
{ '"', { " __ ",
|
|
" ",
|
|
" " }
|
|
},
|
|
{ '?', { " __ ",
|
|
" _|",
|
|
" _\\ " }
|
|
},
|
|
{ '+', { " ",
|
|
" _|_",
|
|
" | " }
|
|
},
|
|
{ '-', { " ",
|
|
" __ ",
|
|
" " }
|
|
},
|
|
{ '*', { " ",
|
|
"_\\/_",
|
|
" /\\ " }
|
|
},
|
|
{ '(', { " _ ",
|
|
"| ",
|
|
"|_ " }
|
|
},
|
|
{ ')', { " _ ",
|
|
" |",
|
|
" _|" }
|
|
},
|
|
{ '[', { " _ ",
|
|
"| ",
|
|
"|_ " }
|
|
},
|
|
{ ']', { " _ ",
|
|
" |",
|
|
" _|" }
|
|
},
|
|
{ '>', { " ",
|
|
" \\ ",
|
|
" / " }
|
|
},
|
|
{ ' ', { " ",
|
|
" ",
|
|
" " }
|
|
},
|
|
{ 'a', { " _ ",
|
|
" _|",
|
|
" /_|" }
|
|
},
|
|
{ 'b', { " ",
|
|
"|_ ",
|
|
"|_\\ " }
|
|
},
|
|
{ 'c', { " ",
|
|
" __ ",
|
|
"|__ " }
|
|
},
|
|
{ 'd', { " ",
|
|
" _|",
|
|
" /_|" }
|
|
},
|
|
{ 'e', { " _ ",
|
|
"|_\\ ",
|
|
"|__ " }
|
|
},
|
|
{ 'f', { " __ ",
|
|
"|_ ",
|
|
"| " }
|
|
},
|
|
{ 'g', { " __ ",
|
|
" \\_|",
|
|
"|__|" }
|
|
},
|
|
{ 'h', { " ",
|
|
"|_ ",
|
|
"| \\ " }
|
|
},
|
|
{ 'i', { " ",
|
|
" _ ",
|
|
" | " }
|
|
},
|
|
{ 'j', { " __ ",
|
|
" | ",
|
|
"|_| " }
|
|
},
|
|
{ 'k', { " ",
|
|
"|_/ ",
|
|
"| \\ " }
|
|
},
|
|
{ 'l', { " ",
|
|
" ",
|
|
"|___" }
|
|
},
|
|
{ 'm', { " ",
|
|
" ",
|
|
"|\\/|" }
|
|
},
|
|
{ 'n', { " ",
|
|
" __ ",
|
|
"| |" }
|
|
},
|
|
{ 'o', { " ",
|
|
" __ ",
|
|
"|__|" }
|
|
},
|
|
{ 'p', { " __ ",
|
|
"|__|",
|
|
"| " }
|
|
},
|
|
{ 'q', { " __ ",
|
|
"|__|",
|
|
" \\ " }
|
|
},
|
|
{ 'r', { " __ ",
|
|
"|__|",
|
|
"| \\ " }
|
|
},
|
|
{ 's', { " ",
|
|
" _ ",
|
|
" _\\" }
|
|
},
|
|
{ 't', { " ",
|
|
"_|_ ",
|
|
" |__" }
|
|
},
|
|
{ 'u', { " ",
|
|
" ",
|
|
"|__|" }
|
|
},
|
|
{ 'v', { " ",
|
|
"| |",
|
|
" \\/ " }
|
|
},
|
|
{ 'w', { " ",
|
|
" ",
|
|
"|/\\|" }
|
|
},
|
|
{ 'x', { " ",
|
|
" \\/ ",
|
|
" /\\ " }
|
|
},
|
|
{ 'y', { " ",
|
|
" \\_|",
|
|
" _|" }
|
|
},
|
|
{ 'z', { " ",
|
|
" _ ",
|
|
" /_ " }
|
|
},
|
|
{ '\0', {0}}
|
|
};
|
|
|
|
static const SevenSegments ss[] = {
|
|
{ '0', { " __ ",
|
|
"| |",
|
|
"|__|" }
|
|
},
|
|
{ '1', { " ",
|
|
" | ",
|
|
" | " }
|
|
},
|
|
{ '2', { " __ ",
|
|
" __|",
|
|
"|__ " }
|
|
},
|
|
{ '3', { " __ ",
|
|
" __|",
|
|
" __|" }
|
|
},
|
|
{ '4', { " ",
|
|
"|__|",
|
|
" |" }
|
|
},
|
|
{ '5', { " __ ",
|
|
"|__ ",
|
|
" __|" }
|
|
},
|
|
{ '6', { " __ ",
|
|
"|__ ",
|
|
"|__|" }
|
|
},
|
|
{ '7', { " __ ",
|
|
" |",
|
|
" |" }
|
|
},
|
|
{ '8', { " __ ",
|
|
"|__|",
|
|
"|__|" }
|
|
},
|
|
{ '9', { " __ ",
|
|
"|__|",
|
|
" __|" }
|
|
},
|
|
{ '$', { " __ ",
|
|
"||_ ",
|
|
" _||" }
|
|
},
|
|
{ '_', { " ",
|
|
" ",
|
|
" __ " }
|
|
},
|
|
{ '.', { " ",
|
|
" ",
|
|
" _ " }
|
|
},
|
|
{ ',', { " ",
|
|
" ",
|
|
" _ " }
|
|
},
|
|
{ '/', { " ",
|
|
" / ",
|
|
" / " }
|
|
},
|
|
{ '%', { " ",
|
|
" O/ ",
|
|
" /O " }
|
|
},
|
|
{ '=', { " ",
|
|
" __ ",
|
|
" __ " }
|
|
},
|
|
{ '"', { " __ ",
|
|
" ",
|
|
" " }
|
|
},
|
|
{ '?', { " __ ",
|
|
" _|",
|
|
" _\\ " }
|
|
},
|
|
{ '+', { " ",
|
|
" _|_",
|
|
" | " }
|
|
},
|
|
{ '-', { " ",
|
|
" __ ",
|
|
" " }
|
|
},
|
|
{ '*', { " ",
|
|
"_\\/_",
|
|
" /\\ " }
|
|
},
|
|
{ '(', { " _ ",
|
|
"| ",
|
|
"|_ " }
|
|
},
|
|
{ ')', { " _ ",
|
|
" |",
|
|
" _|" }
|
|
},
|
|
{ '[', { " _ ",
|
|
"| ",
|
|
"|_ " }
|
|
},
|
|
{ ']', { " _ ",
|
|
" |",
|
|
" _|" }
|
|
},
|
|
{ '>', { " ",
|
|
" \\ ",
|
|
" / " }
|
|
},
|
|
{ ' ', { " ",
|
|
" ",
|
|
" " }
|
|
},
|
|
{ 'a', { " __ ",
|
|
"|__|",
|
|
"| |" }
|
|
},
|
|
{ 'b', { " ",
|
|
"|__ ",
|
|
"|__|" }
|
|
},
|
|
{ 'c', { " ",
|
|
" __ ",
|
|
"|__ " }
|
|
},
|
|
{ 'd', { " ",
|
|
" __|",
|
|
"|__|" }
|
|
},
|
|
{ 'e', { " __ ",
|
|
"|_ ",
|
|
"|__ " }
|
|
},
|
|
{ 'f', { " __ ",
|
|
"|_ ",
|
|
"| " }
|
|
},
|
|
{ 'g', { " __ ",
|
|
"| _ ",
|
|
"|__|" }
|
|
},
|
|
{ 'h', { " ",
|
|
"|__|",
|
|
"| |" }
|
|
},
|
|
{ 'i', { " ___",
|
|
" | ",
|
|
" _|_" }
|
|
},
|
|
{ 'j', { " __ ",
|
|
" | ",
|
|
"|_| " }
|
|
},
|
|
{ 'k', { " ",
|
|
"|_/ ",
|
|
"| \\ " }
|
|
},
|
|
{ 'l', { " ",
|
|
"| ",
|
|
"|__ " }
|
|
},
|
|
{ 'm', { " ",
|
|
"|\\/|",
|
|
"| |" }
|
|
},
|
|
{ 'n', { " ",
|
|
"|\\ |",
|
|
"| \\|" }
|
|
},
|
|
{ 'o', { " __ ",
|
|
"| |",
|
|
"|__|" }
|
|
},
|
|
{ 'p', { " __ ",
|
|
"|__|",
|
|
"| " }
|
|
},
|
|
{ 'q', { " __ ",
|
|
"|__|",
|
|
" \\ " }
|
|
},
|
|
{ 'r', { " __ ",
|
|
"|__|",
|
|
"| \\ " }
|
|
},
|
|
{ 's', { " __ ",
|
|
"|__ ",
|
|
" __\\" }
|
|
},
|
|
{ 't', { " ",
|
|
"_|_ ",
|
|
" |_ " }
|
|
},
|
|
{ 'u', { " ",
|
|
" ",
|
|
"|__|" }
|
|
},
|
|
{ 'v', { " ",
|
|
"| |",
|
|
" \\/ " }
|
|
},
|
|
{ 'w', { " ",
|
|
"| |",
|
|
"|/\\|" }
|
|
},
|
|
{ 'x', { " ",
|
|
" \\/ ",
|
|
" /\\ " }
|
|
},
|
|
{ 'y', { " ",
|
|
"|__|",
|
|
" __|" }
|
|
},
|
|
{ 'z', { " __ ",
|
|
" / ",
|
|
" /_ " }
|
|
},
|
|
{ '\0', {0}}
|
|
};
|
|
|
|
R_API char *r_str_ss(const char* msg, const char *nl, int cs) {
|
|
if (!nl) {
|
|
nl = "\n";
|
|
}
|
|
int i, j, n;
|
|
RStrBuf *sb = r_strbuf_new ("");
|
|
char *omsg = strdup (msg);
|
|
RList *lines = r_str_split_list (omsg, "\n", 0);
|
|
RListIter *iter;
|
|
r_list_foreach (lines, iter, msg) {
|
|
for (i = 0; i < 3; i++) {
|
|
for (n = 0; msg[n]; n++) {
|
|
char ch = tolower (msg[n]);
|
|
if (cs && ch == msg[n]) {
|
|
for (j = 0; ss_lc[j].ch; j++) {
|
|
if (ss_lc[j].ch == ch) {
|
|
r_strbuf_append (sb, ss_lc[j].l[i]);
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
for (j = 0; ss[j].ch; j++) {
|
|
if (ss[j].ch == ch) {
|
|
r_strbuf_append (sb, ss[j].l[i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
r_strbuf_append (sb, nl);
|
|
}
|
|
r_strbuf_append (sb, nl);
|
|
}
|
|
char *res = r_strbuf_drain (sb);
|
|
r_list_free (lines);
|
|
free (omsg);
|
|
return res;
|
|
}
|