/* * Debugging-Hilfe Buggy * (c) 1991 by D. Rabich, Dlmen * Entwickelt mit und fr Pure C. */ #include #include #include #include #include #include #include #include "buggy.h" #define LINES 5 #define LINELENGTH 30 #define min(x, y) (((x) < (y)) ? (x) : (y)) #define BUGGYMODE "BUGGYMODE" static struct { int mode; unsigned int delay; char name[16]; char *copyright; char buffer[2048]; } _BuggyParms = { B_STDERR, 5, "", "@(#) Buggy Version 1.01, (c) Dietmar Rabich, Dlmen, " __DATE__, "" }; static size_t strins(char *dest, char *srce) { size_t lend, lens; lend = strlen(dest); lens = strlen(srce); memmove(dest + lens, dest, lend + 1); memcpy(dest, srce, lens); return(lens); } void SetBuggyMode(int mode) { _BuggyParms.mode = mode; } void SetBuggyDelay(int delay) { _BuggyParms.delay = delay; } void SetBuggyName(char *s) { strncpy(_BuggyParms.name, s, 15); _BuggyParms.name[15] = 0; } void cdecl Buggy(const char *form, ...) { va_list args; size_t len, slen; char *c; FILE *stream; va_start(args, form); len = vsprintf(_BuggyParms.buffer, form, args); va_end(args); c = getenv(BUGGYMODE); if(c) { strupr(c); if(!strncmp("STDOUT", c, 6)) _BuggyParms.mode = B_STDOUT; else if(!strncmp("STDERR", c, 6)) _BuggyParms.mode = B_STDERR; else if(!strncmp("STDAUX", c, 6)) _BuggyParms.mode = B_STDAUX; else if(!strncmp("STDPRN", c, 6)) _BuggyParms.mode = B_STDPRN; else if(!strncmp("MIDI", c, 4)) _BuggyParms.mode = B_MIDI; else if(!strncmp("GEM", c, 3)) _BuggyParms.mode = B_GEM; else _BuggyParms.mode = B_NULL; } if(_BuggyParms.name[0]) { len += strins(_BuggyParms.buffer, ": "); len += strins(_BuggyParms.buffer, _BuggyParms.name); } switch(_BuggyParms.mode) { case B_STDOUT: case B_STDERR: case B_STDAUX: case B_STDPRN: switch(_BuggyParms.mode) { case B_STDOUT: stream = stdout; break; case B_STDAUX: stream = stdaux; break; case B_STDPRN: stream = stdprn; break; default: stream = stderr; break; } fprintf(stream, "%s\n", _BuggyParms.buffer); break; case B_MIDI: for(c = _BuggyParms.buffer; *c; c++) { Bconout(3, *c); delay(_BuggyParms.delay); } Bconout(3, '\n'); break; case B_GEM: slen = min(LINES * LINELENGTH, len); _BuggyParms.buffer[slen] = 0; for(c = _BuggyParms.buffer + LINELENGTH; c < _BuggyParms.buffer + slen; c += LINELENGTH + 1) slen += strins(c, "|"); strins(_BuggyParms.buffer, "[1]["); strcat(_BuggyParms.buffer, "][OK| Abbruch ]"); if(form_alert(1, _BuggyParms.buffer) == 2) exit(-999); break; } }