Mercurial > ~dholland > hg > ag > index.cgi
view anagram/support/log.h @ 4:bebb2ba69e1d
maybe help with getting tex to fail properly on error
author | David A. Holland |
---|---|
date | Sat, 18 Apr 2020 17:12:17 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* * AnaGram, A System for Syntax Directed Programming * Copyright 1993-2002 Parsifal Software. All Rights Reserved. * Copyright 2006 David A. Holland. All Rights Reserved. * See the file COPYING for license and usage terms. * * log.h - logging */ #ifndef LOG_H #define LOG_H #ifdef VACLGUI #include <ipoint.hpp> #include <irect.hpp> #include <istring.hpp> #include <iexcbase.hpp> #endif class AgString; // from agstr.h struct cint; // from cint.h #ifdef INCLUDE_LOGGING enum LogSwitch { LOG_OFF, // logging is disabled LOG_MAYBE, // logging switch inherits from context LOG_ON, // logging is enabled }; class LogSection { protected: LogSection *previous; const char *name; LogSwitch saved_switch; public: // the name passed in should be a string constant LogSection(const char *name, LogSwitch requested_setting); ~LogSection(); static void logstack(); }; /* start a nested (sub)section, which lasts until end of scope */ #define LOGSECTION(name) LogSection myLogSection(name, LOG_MAYBE) #define LOGSECTION_OFF(name) LogSection myLogSection(name, LOG_OFF) #define LOGSECTION_ON(name) LogSection myLogSection(name, LOG_ON) /* Logging macros. */ /* * LOGV logs a variable, with its name and value. * LOGS logs a literal string. */ #define LOGV(v) (logeol(), dolog(#v " = "), dolog(v)) #define LOGS(s) (logeol(), dolog(s)) /* The L... forms are for appending after a LOGV/LOGS in the same expression.*/ #define LV(v) , (dolog(" " #v " = "), dolog(v)) #define LS(s) , (dolog(" "), dolog(s)) /* The LC... forms are the same but insert a comma. */ #define LCV(v) , (dolog(", " #v " = "), dolog(v)) #define LCS(s) , (dolog(", "), dolog(s)) /* LOGX is for sticking in front of LV/LCV/whatnot to avoid the newline */ #define LOGX() ((void)0) /* Misc. */ #define LOGINIT() #define LOGSTACK LogSection::logstack() #define LOGEXCEPTION(e) logexception(e) /* This can be used to enclose bits of expression only used when logging. */ #define IFLOG(x) x /* The underlying functions */ void logeol(void); void logtime(void); void dolog(const char *); void dolog(const AgString &); void dolog(void *); void dolog(int); void dolog(cint); #ifdef VACLGUI void logexception(IException &); void dolog(const IString &s); void dolog(const IPair &p); void dolog(const IRectangle &r); #endif #else /* With logging off, nothing exists */ #define LOGSECTION(name) #define LOGSECTION_OFF(name) #define LOGSECTION_ON(name) #define LOGV(x) #define LOGS(x) #define LV(x) #define LS(x) #define LCV(x) #define LCS(X) #define LOGX() #define LOGINIT() #define LOGSTACK #define LOGEXCEPTION(e) #define IFLOG(x) #endif /* INCLUDE_LOGGING */ #endif /* LOG_H */