Fancy colors! :octocat:
This commit is contained in:
64
bfckr.c
64
bfckr.c
@@ -16,9 +16,9 @@
|
|||||||
#include<unistd.h>
|
#include<unistd.h>
|
||||||
|
|
||||||
// Defines
|
// Defines
|
||||||
#define MEMORY_SIZE 1000
|
#define MEMORY_SIZE 1000 // length of the band tape in bytes
|
||||||
#define MAX_INPUT_SIZE 1000
|
#define MAX_INPUT_SIZE 1000 // maximal number of input bytes
|
||||||
#define clear() printf("\033[H\033[J")
|
#define clear() printf("\033[H\033[J") // clear the screen
|
||||||
|
|
||||||
// Struct which holds the brainfuck code, the bandtape and some helpervariables
|
// Struct which holds the brainfuck code, the bandtape and some helpervariables
|
||||||
typedef struct bf_code_s {
|
typedef struct bf_code_s {
|
||||||
@@ -36,9 +36,57 @@ void print_sourceviewer(bf_code_t *bf);
|
|||||||
void print_memoryviewer(bf_code_t *bf);
|
void print_memoryviewer(bf_code_t *bf);
|
||||||
void init_bf_object(bf_code_t *bf);
|
void init_bf_object(bf_code_t *bf);
|
||||||
bool is_brainfuck(char c);
|
bool is_brainfuck(char c);
|
||||||
|
char *colorize(char c);
|
||||||
int getopt(int argc, char * const argv[], const char *optstring);
|
int getopt(int argc, char * const argv[], const char *optstring);
|
||||||
|
|
||||||
|
// Globals
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
extern int optind, opterr, optopt;
|
extern int optind, opterr, optopt;
|
||||||
|
char *colortheme[] = {
|
||||||
|
"\e[1;34m<\e[0m", // blue <
|
||||||
|
"\e[1;34m>\e[0m", // blue >
|
||||||
|
"\e[1;33m[\e[0m", // yellow [
|
||||||
|
"\e[1;33m]\e[0m", // yellow ]
|
||||||
|
"\e[1;32m+\e[0m", // green +
|
||||||
|
"\e[1;32m-\e[0m", // green -
|
||||||
|
"\e[1;31m.\e[0m", // red .
|
||||||
|
"\e[1;31m,\e[0m", // red ,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Colorize instructions
|
||||||
|
char *colorize(char c)
|
||||||
|
{
|
||||||
|
char *cs; // colorstring
|
||||||
|
|
||||||
|
switch(c) {
|
||||||
|
case '>':
|
||||||
|
cs = colortheme[0];
|
||||||
|
break;
|
||||||
|
case '<':
|
||||||
|
cs = colortheme[1];
|
||||||
|
break;
|
||||||
|
case '[':
|
||||||
|
cs = colortheme[2];
|
||||||
|
break;
|
||||||
|
case ']':
|
||||||
|
cs = colortheme[3];
|
||||||
|
break;
|
||||||
|
case '+':
|
||||||
|
cs = colortheme[4];
|
||||||
|
break;
|
||||||
|
case '-':
|
||||||
|
cs = colortheme[5];
|
||||||
|
break;
|
||||||
|
case '.':
|
||||||
|
cs = colortheme[6];
|
||||||
|
break;
|
||||||
|
case ',':
|
||||||
|
cs = colortheme[7];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cs;
|
||||||
|
}
|
||||||
|
|
||||||
/* initialize bf object */
|
/* initialize bf object */
|
||||||
void init_bf_object(bf_code_t *bf)
|
void init_bf_object(bf_code_t *bf)
|
||||||
@@ -83,11 +131,11 @@ void print_sourceviewer(bf_code_t *bf)
|
|||||||
|
|
||||||
// print 30 valid chars before $ip and 30 after
|
// print 30 valid chars before $ip and 30 after
|
||||||
for(int i=(ip-30); i<(ip+30); i++) {
|
for(int i=(ip-30); i<(ip+30); i++) {
|
||||||
putchar((i<0 || i>MAX_INPUT_SIZE) ? ' ' : bf->code[i]);
|
printf("%s",((i<0 || i>MAX_INPUT_SIZE) ? " ": colorize(bf->code[i])));
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n ^ \n");
|
printf("\n \e[1;31m^\e[0m \n");
|
||||||
printf(" ip=%d \n", ip);
|
printf(" \e[1;31mip=%d\e[0m \n", ip);
|
||||||
printf("------------------------------------------------------------\n");
|
printf("------------------------------------------------------------\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,8 +152,8 @@ void print_memoryviewer(bf_code_t *bf)
|
|||||||
printf("%03d ", ((i<0 || i>MEMORY_SIZE) ? 0 : bf->memory[i]));
|
printf("%03d ", ((i<0 || i>MEMORY_SIZE) ? 0 : bf->memory[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n ^ \n");
|
printf("\n \e[1;31m^\e[0m \n");
|
||||||
printf(" mp=%d \n", mp);
|
printf(" \e[1;31mmp=%d\e[0m \n", mp);
|
||||||
|
|
||||||
|
|
||||||
// print the adresses beneath the memory cells
|
// print the adresses beneath the memory cells
|
||||||
|
|||||||
Reference in New Issue
Block a user