X-Git-Url: http://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/b9f22ab5a7f4d4bfe0932debf8864a21b5c852cd..4c9cb9b99991c36920bd17e366e2128d1b22eb6e:/src/out.c diff --git a/src/out.c b/src/out.c new file mode 100644 index 0000000..df0d7f5 --- /dev/null +++ b/src/out.c @@ -0,0 +1,73 @@ +#include +#include +#include + +#include "out.h" + +extern FILE *out; +extern FILE *outh; + +extern char *filename; +extern char *filebase; + +int outline = 1; +int outhline = 1; + +static int +strchrcnt(char *s, char c) +{ + int cnt = 0; + for(;*s;s++) + if(*s == c) + cnt++; + return cnt; +} + +void +out_printf(FILE *fp,char *format,...) +{ + va_list ap; + char *s; + va_start(ap,format); + + s = g_strdup_vprintf(format,ap); + + if(fp == out) + outline += strchrcnt(s,'\n'); + else if(fp == outh) + outhline += strchrcnt(s,'\n'); + else + g_assert_not_reached(); + + fprintf(fp,"%s",s); + g_free(s); + + va_end(ap); +} + +void +out_addline_infile(FILE *fp, int line) +{ + if(fp == out) + outline++; + else if(fp == outh) + outhline++; + else + g_assert_not_reached(); + + fprintf(fp,"#line %d \"%s\"\n",line,filename); +} + +void +out_addline_outfile(FILE *fp) +{ + if(fp == out) { + outline++; + fprintf(fp,"#line %d \"%s.c\"\n",outline,filebase); + } else if(fp == outh) { + outhline++; + fprintf(fp,"#line %d \"%s.h\"\n",outhline,filebase); + } else + g_assert_not_reached(); + +}