|
|
@@ -10,113 +10,113 @@ |
|
|
|
|
|
|
|
#include "terminal.h" |
|
|
|
|
|
|
|
#define ALLOCATION_CHUNK (10UL) |
|
|
|
#define ALLOCATION_CHUNK (128UL) |
|
|
|
|
|
|
|
static const char * argv0; |
|
|
|
|
|
|
|
static char * |
|
|
|
slurp(const char * fn) |
|
|
|
{ |
|
|
|
FILE * fp = fopen(fn, "r"); |
|
|
|
if (fp) |
|
|
|
{ |
|
|
|
size_t len; |
|
|
|
char * b; |
|
|
|
fseek(fp, 0, SEEK_END); |
|
|
|
len = ftell(fp); |
|
|
|
rewind(fp); |
|
|
|
b = malloc(len + 1); |
|
|
|
if (b && fread(b, 1, len, fp)) |
|
|
|
{ |
|
|
|
b[len] = '\0'; |
|
|
|
} |
|
|
|
fclose(fp); |
|
|
|
return b; |
|
|
|
} |
|
|
|
else |
|
|
|
{ return NULL; } |
|
|
|
FILE * fp = fopen(fn, "r"); |
|
|
|
if (fp) |
|
|
|
{ |
|
|
|
size_t len; |
|
|
|
char * b; |
|
|
|
fseek(fp, 0, SEEK_END); |
|
|
|
len = ftell(fp); |
|
|
|
rewind(fp); |
|
|
|
b = malloc(len + 1); |
|
|
|
if (b && fread(b, 1, len, fp)) |
|
|
|
{ |
|
|
|
b[len] = '\0'; |
|
|
|
} |
|
|
|
fclose(fp); |
|
|
|
return b; |
|
|
|
} |
|
|
|
else |
|
|
|
{ return NULL; } |
|
|
|
} |
|
|
|
|
|
|
|
static char * |
|
|
|
get_stdin(void) |
|
|
|
{ |
|
|
|
size_t buffer_size = 0; |
|
|
|
char * buffer = malloc(ALLOCATION_CHUNK); |
|
|
|
size_t buffer_size = 0; |
|
|
|
char * buffer = malloc(ALLOCATION_CHUNK); |
|
|
|
do { |
|
|
|
if (!((buffer_size + 1) % ALLOCATION_CHUNK)) { |
|
|
|
buffer = realloc(buffer, ((buffer_size + 1) / ALLOCATION_CHUNK + 1) * ALLOCATION_CHUNK); |
|
|
|
if (!((buffer_size + 1) | ALLOCATION_CHUNK)) { |
|
|
|
buffer = realloc(buffer, (((buffer_size + 1) & ALLOCATION_CHUNK) + 1) * ALLOCATION_CHUNK); |
|
|
|
} |
|
|
|
buffer[buffer_size] = '\0'; |
|
|
|
if (read(STDIN_FILENO, &buffer[buffer_size], sizeof (*buffer)) == -1) |
|
|
|
{ |
|
|
|
free(buffer); |
|
|
|
fprintf(stderr, "%s: Failed to read from STDIN\n", argv0); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
{ |
|
|
|
free(buffer); |
|
|
|
fprintf(stderr, "%s: Failed to read from STDIN\n", argv0); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
++buffer_size; |
|
|
|
} while (buffer[buffer_size - 1]); |
|
|
|
|
|
|
|
buffer[buffer_size - 1] = '\0'; |
|
|
|
return buffer; |
|
|
|
return buffer; |
|
|
|
} |
|
|
|
|
|
|
|
/* TODO: fix the shit going on with syntax/c.h , replace with a function, |
|
|
|
* and ideally how make it hotswappable. */ |
|
|
|
int |
|
|
|
main(int argc, |
|
|
|
main(int argc, |
|
|
|
char ** argv) { |
|
|
|
int arg = 0; |
|
|
|
int syn = 0; |
|
|
|
char * buffer = NULL; |
|
|
|
int arg = 0; |
|
|
|
int syn = 0; |
|
|
|
char * buffer = NULL; |
|
|
|
|
|
|
|
argv0 = argv[0]; |
|
|
|
argv0 = argv[0]; |
|
|
|
|
|
|
|
terminal_hl_init(); |
|
|
|
|
|
|
|
while (++argv, |
|
|
|
--argc) |
|
|
|
{ |
|
|
|
if (**argv == '-') |
|
|
|
{ |
|
|
|
syn = 1; |
|
|
|
/* fprintf(stderr, "handle '%s'\n", *argv+1); */ |
|
|
|
/* lazy as hell, TODO use uthash */ |
|
|
|
if (strcmp(*argv+1, "c") == 0) |
|
|
|
{ |
|
|
|
#include "syntax/c.h" |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
fprintf(stderr, "%s: Unimplemented syntax '%s'\n", argv0, *argv+1); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if (!syn) |
|
|
|
{ |
|
|
|
#include "syntax/c.h" |
|
|
|
} |
|
|
|
free(buffer); |
|
|
|
arg = 1; |
|
|
|
buffer = slurp(*argv); |
|
|
|
render_string(buffer, "cterm"); |
|
|
|
if (!buffer) |
|
|
|
{ |
|
|
|
perror(argv0); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (!arg) |
|
|
|
{ |
|
|
|
if (!syn) |
|
|
|
{ |
|
|
|
#include "syntax/c.h" |
|
|
|
} |
|
|
|
buffer = get_stdin(); |
|
|
|
render_string(buffer, "cterm"); |
|
|
|
} |
|
|
|
while (++argv, |
|
|
|
--argc) |
|
|
|
{ |
|
|
|
if (**argv == '-') |
|
|
|
{ |
|
|
|
syn = 1; |
|
|
|
/* fprintf(stderr, "handle '%s'\n", *argv+1); */ |
|
|
|
/* lazy as hell, TODO use uthash */ |
|
|
|
if (strcmp(*argv+1, "c") == 0) |
|
|
|
{ |
|
|
|
#include "syntax/c.h" |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
fprintf(stderr, "%s: Unimplemented syntax '%s'\n", argv0, *argv+1); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if (!syn) |
|
|
|
{ |
|
|
|
#include "syntax/c.h" |
|
|
|
} |
|
|
|
free(buffer); |
|
|
|
arg = 1; |
|
|
|
buffer = slurp(*argv); |
|
|
|
render_string(buffer, "cterm"); |
|
|
|
if (!buffer) |
|
|
|
{ |
|
|
|
perror(argv0); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (!arg) |
|
|
|
{ |
|
|
|
if (!syn) |
|
|
|
{ |
|
|
|
#include "syntax/c.h" |
|
|
|
} |
|
|
|
buffer = get_stdin(); |
|
|
|
render_string(buffer, "cterm"); |
|
|
|
} |
|
|
|
|
|
|
|
fflush(stdout); |
|
|
|
//hl_deinit(); |
|
|
|