#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <stddef.h>
#define MAXCHAR 32767
#define COLOR_RED "\x1b[31m"
#define COLOR_GREEN "\x1b[32m"
#define COLOR_YELLOW "\x1b[33m"
#define COLOR_BLUE "\x1b[34m"
#define COLOR_MAGENTA "\x1b[35m"
#define COLOR_CYAN "\x1b[36m"
#define COLOR_WHITE "\x1b[37m"
#define COLOR_BRIGHT "\033[01m"
#define COLOR_UNDERLINE "\033[04m"
#define COLOR_RESET "\x1b[0m"
struct cser { const char *regi;
const char *uj;
};
struct cser csere[] = {
{"error", COLOR_RED COLOR_BRIGHT "error" COLOR_RESET}, {"Error", COLOR_RED COLOR_BRIGHT "Error" COLOR_RESET}, {"broken", COLOR_RED COLOR_BRIGHT "broken" COLOR_RESET}, {"Broken", COLOR_RED COLOR_BRIGHT "Broken" COLOR_RESET}, {"ERROR", COLOR_RED COLOR_BRIGHT "ERROR" COLOR_RESET}, {"hiba", COLOR_RED COLOR_BRIGHT "hiba" COLOR_RESET}, {"Hiba", COLOR_RED COLOR_BRIGHT "Hiba" COLOR_RESET}, {"HIBA", COLOR_RED COLOR_BRIGHT "HIBA" COLOR_RESET},
{"MISSING", COLOR_RED COLOR_BRIGHT "MISSING" COLOR_RESET}, {"Missing", COLOR_RED COLOR_BRIGHT "Missing" COLOR_RESET}, {"missing", COLOR_RED COLOR_BRIGHT "missing" COLOR_RESET}, {"failure", COLOR_RED COLOR_BRIGHT "failure" COLOR_RESET}, {"Failure", COLOR_RED COLOR_BRIGHT "Failure" COLOR_RESET},
{"FAILURE", COLOR_RED COLOR_BRIGHT "FAILURE" COLOR_RESET}, {"bad", COLOR_RED COLOR_BRIGHT "bad" COLOR_RESET},
{"Bad", COLOR_RED COLOR_BRIGHT "Bad" COLOR_RESET}, {"BAD", COLOR_RED COLOR_BRIGHT "BAD" COLOR_RESET},
{"File exists", COLOR_RED COLOR_BRIGHT "File exists" COLOR_RESET},
{"ln: failed to create symbolic link", COLOR_RED COLOR_BRIGHT "ln: failed to create symbolic link" COLOR_RESET},
{"executing", COLOR_RED "executing" COLOR_RESET},
{"rm ", COLOR_RED COLOR_BRIGHT COLOR_UNDERLINE "rm " COLOR_RESET}, {"warning", COLOR_MAGENTA "warning" COLOR_RESET},
{"Warning", COLOR_MAGENTA "Warning" COLOR_RESET}, {"WARNING", COLOR_MAGENTA "WARNING" COLOR_RESET}, {"unknown", COLOR_MAGENTA "unknown" COLOR_RESET}, {"Unknown", COLOR_MAGENTA "Unknown" COLOR_RESET}, {"UNKNOWN", COLOR_MAGENTA "UNKNOWN" COLOR_RESET}, {"invalid", COLOR_MAGENTA "invalid" COLOR_RESET}, {"Invalid", COLOR_MAGENTA "Invalid" COLOR_RESET}, {"INVALID", COLOR_MAGENTA "INVALID" COLOR_RESET}, {"gcc ", COLOR_YELLOW "gcc " COLOR_RESET},
{"g++ ", COLOR_YELLOW "g++ " COLOR_RESET}, {"ld ", COLOR_YELLOW "ld " COLOR_RESET}, {" CC ", COLOR_YELLOW " CC " COLOR_RESET}, {"CC ", COLOR_YELLOW "CC " COLOR_RESET}, {"\tCC", COLOR_YELLOW "\tCC" COLOR_RESET},
{"checking ", COLOR_YELLOW "checking " COLOR_RESET}, {"check ", COLOR_YELLOW "check " COLOR_RESET},
{"Checking ", COLOR_YELLOW "Checking " COLOR_RESET}, {"Check ", COLOR_YELLOW "Check " COLOR_RESET},
{" yes", COLOR_BLUE COLOR_BRIGHT " yes" COLOR_RESET}, {"\tyes", COLOR_BLUE COLOR_BRIGHT "\tyes" COLOR_RESET}, {" Yes", COLOR_BLUE COLOR_BRIGHT " Yes" COLOR_RESET},
{"succeeded", COLOR_BLUE COLOR_BRIGHT "succeeded" COLOR_RESET}, {"Succeeded", COLOR_BLUE COLOR_BRIGHT "Succeeded" COLOR_RESET}, {"SUCCEEDED", COLOR_BLUE COLOR_BRIGHT "SUCCEEDED" COLOR_RESET}, {"\tYes", COLOR_BLUE COLOR_BRIGHT "\tYes" COLOR_RESET},
{"Symlinking", COLOR_YELLOW COLOR_BRIGHT "Symlinking" COLOR_RESET}, {"install", COLOR_YELLOW COLOR_BRIGHT "install" COLOR_RESET},
{"Install", COLOR_YELLOW COLOR_BRIGHT "Install" COLOR_RESET}, {"INSTALL", COLOR_YELLOW COLOR_BRIGHT "INSTALL" COLOR_RESET}, {"linking", COLOR_YELLOW COLOR_BRIGHT "linking" COLOR_RESET}, {"ln -s", COLOR_YELLOW COLOR_BRIGHT "ln -s" COLOR_RESET}, {"Linking", COLOR_YELLOW COLOR_BRIGHT "Linking" COLOR_RESET},
{"installing", COLOR_YELLOW COLOR_BRIGHT "installing" COLOR_RESET}, {"Installing", COLOR_YELLOW COLOR_BRIGHT "Installing" COLOR_RESET}, {"install:", COLOR_YELLOW COLOR_BRIGHT "install:" COLOR_RESET}, {"Install:", COLOR_YELLOW COLOR_BRIGHT "Install:" COLOR_RESET}, {"Moving", COLOR_YELLOW COLOR_BRIGHT "Moving" COLOR_RESET}, {"creating", COLOR_YELLOW COLOR_BRIGHT "creating" COLOR_RESET}, {"Creating", COLOR_YELLOW COLOR_BRIGHT "Creating" COLOR_RESET},
{"No such file or directory", COLOR_RED COLOR_BRIGHT "No such file or directory"
COLOR_RESET},
{" no", COLOR_RED COLOR_BRIGHT " no" COLOR_RESET}, {"\tno", COLOR_RED COLOR_BRIGHT "\tno" COLOR_RESET}, {" No", COLOR_RED COLOR_BRIGHT " No" COLOR_RESET}, {"\tNo", COLOR_RED COLOR_BRIGHT "\tNo" COLOR_RESET}, {"failed", COLOR_RED COLOR_BRIGHT "failed" COLOR_RESET}, {"Failed", COLOR_RED COLOR_BRIGHT "Failed" COLOR_RESET},
{"szimbolikus link létrehozása meghiúsult: A fájl már létezik", COLOR_RED COLOR_BRIGHT "szimbolikus link létrehozása meghiúsult: A fájl már létezik"
COLOR_RESET},
{"FAILED", COLOR_RED COLOR_BRIGHT "FAILED" COLOR_RESET}, {"==>", COLOR_CYAN COLOR_BRIGHT "==>" COLOR_RESET},
{"->", COLOR_CYAN COLOR_BRIGHT "->" COLOR_RESET}, {"skipped", COLOR_CYAN "skipped" COLOR_RESET}, {"SKIP:", COLOR_CYAN "SKIP:" COLOR_RESET}, {"mkdir:", COLOR_CYAN "mkdir:" COLOR_RESET}, {"ln:", COLOR_CYAN "ln:" COLOR_RESET},
{"Command for ", COLOR_YELLOW COLOR_BRIGHT "Command for " COLOR_RESET},
};
int MAXCSERE = sizeof(csere)/sizeof(struct cser);
char *replace_str(const char *str, const char *old, const char *new) {
char *ret, *r;
const char *p, *q;
size_t oldlen = strlen(old);
size_t count, retlen, newlen = strlen(new);
if (oldlen != newlen) {
for (count = 0, p = str; (q = strstr(p, old)) != NULL; p = q + oldlen) count++;
/* this is undefined if p - str > PTRDIFF_MAX */
retlen = p - str + strlen(p) + count * (newlen - oldlen);
} else
retlen = strlen(str);
if ((ret = malloc(retlen + 1)) == NULL) return NULL;
for (r = ret, p = str; (q = strstr(p, old)) != NULL; p = q + oldlen) { /* this is undefined if q - p > PTRDIFF_MAX */
ptrdiff_t l = q - p;
memcpy(r, p, l);
r += l;
memcpy(r, new, newlen);
r += newlen;
}
strcpy(r, p);
return ret;
}
// ========================================================================
char inputpuffer[256];
size_t hossz=0;
int i;
char *elso;
char *masodik;
char ideiglenes[MAXCHAR];
int main(int argc,char **argv) {
while(fgets(inputpuffer,100,stdin)) { ; // beolvassuk a standard inputról jövő stringet
inputpuffer[255]=0;
strcpy(ideiglenes,inputpuffer);
elso=ideiglenes;
// **********************************
for(i=0;i<MAXCSERE;i++) {
masodik=replace_str(elso,csere[i].regi,csere[i].uj);
strcpy(ideiglenes,masodik);
free(masodik);
elso=ideiglenes;
};
// **********************************
// Most az elso-ben illetve a ideiglenesben van a jo szoveg printf("%s",elso);
} // while vége //free(inputpuffer);
exit(EXIT_SUCCESS);
}
E fenti program fogja majd nekünk úgymond „kiszínezni az outputot”. Azaz, rengetegszer fogunk fordítani más programokat, s ekkor nagyon hasznos, ha a make kimenetében vörösen világítanak mondjuk az „error” szavak... Rögtön tudjuk, hol van a baki, hova kell nézni!
Ezt tehát mentsük el a /_/P/KISS/0.0/sources könyvtárba, majd fordítsuk le:
gcc colored.c -o colored