#include #include #include #include "tlmplib.h" #include #include "tlmplib.m" void _F_loadfile::empty() { } void _F_loadfile::start() { } void _F_loadfile::end(off_t) { } void _F_loadfile::missing(const char *fname) { tlmp_error (MSG_R(E_CANTOPEN),fname,strerror(errno)); } static int loadfile_gen (_F_loadfile &c, SSTREAM &ss, bool strip, const char *fname) { _F_loadfile *c; glocal.c = &c; int ret = (ss,strip); glocal.c->missing(fname); glocal.c->start(); glocal.c->end(filepos); glocal.c->empty(); return glocal.c->oneline (line,filepos,noline); return ret; } int loadfile (_F_loadfile &c, SSTREAM &ss, bool strip) { return loadfile_gen (c,ss,strip,"(sstream)"); } int loadfile (_F_loadfile &c, const char *fname, bool strip) { int ret = -1; if (strcmp(fname,"-")==0){ SSTREAM_FILE ss(stdin); ret = loadfile_gen (c,ss,strip,"(stdin)"); }else{ FILE *fin = fopen64(fname,"r"); if (fin == NULL){ c.missing (fname); }else{ SSTREAM_FILE ss(fin); ret = loadfile_gen (c,ss,strip,fname); fclose (fin); } } return ret; }