137 lines
2.3 KiB
C
137 lines
2.3 KiB
C
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
|
|
char var_eof[2] = {-1, 0};
|
|
char var_eol[2] = {10, 0};
|
|
char var_quote[2] = {34, 0};
|
|
char var_false[1] = {0};
|
|
char var_true[2] = {'1', 0};
|
|
|
|
|
|
char * eq(char * a, char * b)
|
|
{
|
|
return (strcmp(a, b) == 0) ? var_true : var_false;
|
|
}
|
|
|
|
char * lt(char * a, char * b)
|
|
{
|
|
return (strcmp(a, b) < 0) ? var_true : var_false;
|
|
}
|
|
char * not(char * a)
|
|
{
|
|
return (strcmp(a, var_true) != 0) ? var_true : var_false;
|
|
}
|
|
|
|
char * addstringchar(char * str, char * chr)
|
|
{
|
|
int str_len = strlen(str);
|
|
assert(strlen(chr) == 1);
|
|
char * res = malloc((str_len + 2) * sizeof(char));
|
|
strcpy(res, str);
|
|
res[str_len + 0] = chr[0];
|
|
res[str_len + 1] = 0;
|
|
return res;
|
|
}
|
|
|
|
char * emit(char * str)
|
|
{
|
|
fputs(str, stdout);
|
|
return 0;
|
|
}
|
|
|
|
char * trace(char * var_name, char * var_value)
|
|
{
|
|
const char * env_trace = getenv("TRACE");
|
|
if( !env_trace ) return 0;
|
|
fputs(var_name, stderr);
|
|
fputs("=", stderr);
|
|
fputs(var_value, stderr);
|
|
fputs(var_eol, stderr);
|
|
return 0;
|
|
}
|
|
|
|
int LINE = 1;
|
|
|
|
char * peek()
|
|
{
|
|
char * res = malloc(2*sizeof(char));
|
|
res[0] = getc(stdin);
|
|
res[1] = 0;
|
|
ungetc(res[0], stdin);
|
|
return res;
|
|
}
|
|
|
|
void skip()
|
|
{
|
|
char c = getc(stdin);
|
|
if( c == 10 ) LINE += 1;
|
|
}
|
|
|
|
void skipchar(char * chr)
|
|
{
|
|
assert(strlen(chr) == 1);
|
|
char * act = peek();
|
|
assert(strlen(act) == 1);
|
|
if( chr[0] == act[0] ) {skip(); return;};
|
|
fprintf(stderr, "Expected '%c' on line %d but saw '%c' instead\n", chr[0], LINE, act[0]);
|
|
exit(1);
|
|
}
|
|
|
|
char * fileget(char * var_path)
|
|
{
|
|
FILE * file_ptr;
|
|
int file_size;
|
|
char * res;
|
|
|
|
file_ptr = fopen(var_path, "r");
|
|
if( NULL == file_ptr ) {
|
|
fprintf(stderr, "Could not load file %s", var_path);
|
|
exit(1);
|
|
}
|
|
|
|
fseek(file_ptr, 0, SEEK_END);
|
|
file_size = ftell(file_ptr);
|
|
fseek(file_ptr, 0, SEEK_SET);
|
|
|
|
res = malloc(file_size * sizeof(char));
|
|
fread(res, sizeof(char), file_size, file_ptr);
|
|
|
|
fclose(file_ptr);
|
|
return res;
|
|
}
|
|
|
|
void mapclear(char * map_name)
|
|
{
|
|
|
|
}
|
|
|
|
void mapsetkey(char * map_name, char * key, char * value)
|
|
{
|
|
|
|
}
|
|
|
|
char * mapgetkey(char * map_name, char * key)
|
|
{
|
|
return "0";
|
|
}
|
|
|
|
char * intinc(char * a)
|
|
{
|
|
int len = strlen(a);
|
|
int val;
|
|
int read = sscanf(a, "%d", &val);
|
|
if( len != read ) {
|
|
return "1";
|
|
}
|
|
|
|
val += 1;
|
|
|
|
char * res = malloc((len + 1) * sizeof(char));
|
|
sprintf(res, "%d", val);
|
|
|
|
return res;
|
|
}
|