radare2/libr/util/sstext.c
2022-10-13 21:21:34 +02:00

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;
}