122 lines
3.1 KiB
C
122 lines
3.1 KiB
C
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
|
|
void md_putchar(char c) {
|
|
if (mdcontrol.socket == -1) {
|
|
putchar(c);
|
|
} else {
|
|
send(mdcontrol.socket, &c, 1, 0);
|
|
}
|
|
}
|
|
|
|
void md_printcode(char *code) {
|
|
char *part;
|
|
int bright = 0;
|
|
int colour = 0;
|
|
int bgcolour = 0;
|
|
char codebuffer[10];
|
|
|
|
part = strtok(code, ' ');
|
|
if (part != NULL) {
|
|
if (strcmp(part, "bright") == 0) {
|
|
bright = 1;
|
|
} else if (strcmp(part, "black") == 0) {
|
|
colour = 0;
|
|
} else if (strcmp(part, "red") == 0) {
|
|
colour = 1;
|
|
} else if (strcmp(part, "green") == 0) {
|
|
colour = 2;
|
|
} else if (strcmp(part, "yellow") == 0) {
|
|
colour = 3;
|
|
} else if (strcmp(part, "blue") == 0) {
|
|
colour = 4;
|
|
} else if (strcmp(part, "magenta") == 0) {
|
|
colour = 5;
|
|
} else if (strcmp(part, "cyan") == 0) {
|
|
colour = 6;
|
|
} else if (strcmp(part, "white") == 0) {
|
|
colour = 7;
|
|
}
|
|
part = strtok(NULL, ' ');
|
|
if (part != NULL) {
|
|
if (bright == 0) {
|
|
bgcolour = colour;
|
|
colour = 0;
|
|
}
|
|
if (strcmp(part, "bright") == 0) {
|
|
bright = 1;
|
|
part = strtok(NULL, ' ');
|
|
}
|
|
if (part != NULL) {
|
|
|
|
if (strcmp(part, "black") == 0) {
|
|
colour = 0;
|
|
} else if (strcmp(part, "red") == 0) {
|
|
colour = 1;
|
|
} else if (strcmp(part, "green") == 0) {
|
|
colour = 2;
|
|
} else if (strcmp(part, "yellow") == 0) {
|
|
colour = 3;
|
|
} else if (strcmp(part, "blue") == 0) {
|
|
colour = 4;
|
|
} else if (strcmp(part, "magenta") == 0) {
|
|
colour = 5;
|
|
} else if (strcmp(part, "cyan") == 0) {
|
|
colour = 6;
|
|
} else if (strcmp(part, "white") == 0) {
|
|
colour = 7;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
snprintf(codebuffer, 10, "\027[%d;4%d;3%dm", bright, bgcolour, colour);
|
|
|
|
for (i=0;i<10;i++) {
|
|
md_putchar(codebuffer[i]);
|
|
}
|
|
}
|
|
|
|
void md_printf(const char *fmt, ...) {
|
|
char buffer[4096];
|
|
char codebuf[128];
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
vsnprintf(buffer, sizeof buffer, fmt, ap);
|
|
va_end(ap)
|
|
|
|
char *ptr;
|
|
char *cbptr;
|
|
ptr = buffer;
|
|
while (*ptr != '\0') {
|
|
if (*ptr == '`') {
|
|
ptr++;
|
|
if (*ptr == '`') {
|
|
md_putchar('`');
|
|
ptr++;
|
|
continue;
|
|
} else if (*ptr == '\0') {
|
|
break;
|
|
}
|
|
cbptr = codebuf;
|
|
while(*ptr != '`' && *ptr != '\0' && cbptr - codebuf < 127) {
|
|
*cbptr = *ptr;
|
|
ptr++;
|
|
cbptr++;
|
|
*cbptr = '\0';
|
|
}
|
|
|
|
md_printcode(codebuf);
|
|
|
|
if (*ptr == '\0') {
|
|
break;
|
|
}
|
|
ptr++;
|
|
continue;
|
|
}
|
|
md_putchar(*ptr);
|
|
ptr++;
|
|
}
|
|
}
|