msgp - printf() wrapper functions
void pf1-3(const char* fmt, ...);
void npf1-3(const char* fmt, ...);
void epf(const char*
fmt,
...
);
void nepf(condt char*
fmt,
...
) ;
void dpf(condt char*
fmt,
...
);
void dbg(...
);
void idbg(...
);
void sbg(s0, s1, ...[,strsz], [, cmt] );
struct MSGP_cmndata_tag {
int rc; // suc/err
char tostr[128]; // for tostring, "stderr, stdout ..."
//..opaque data
} typedef MSGP_t;
MSGP_t pfset(FILE*
p1,
FILE*
p2,
FILE*
p3,
FILE*
dg);
MSGP_t pfget();
FILE*
pfgetfp(int
idx); //pf1-3,dbg == MSGP_FP_PF1-3, MSGP_FP_DBG
FILE*
pfsetfp(int idx);
MSGP_t pfpush(MSGP_t obj);
#include "msgp.h"
int main() {
pf1("aa"); // automatically add '\n'
npf2("bb"); // header 'n' no newline
pf3("cc");
dbg("dd"); // >> disp: aa, bb, cc, dd
pfset(NULL,stderr,NULL,PF_NOCHANGE); //>> pf1-3,dbg setting
npf1("aa");
pf2("bb");
pf3("cc");
dbg("dbg is", 123, "var"); // >>arg support int,dbl,ptr,char,str
idbg(1, 10) //same as dbg() but avoid str, SEGV longjmp()
const char* s = "hello, world";
sbg(s,s,s) //near to dbg(), but check for str, avoid SEGV longjmp()
MSGP_t old = pfset(stdout, stdout, stdout, stderr); //>> dfl setting
pf1("info: %s", old.tostr);
epf("epf/nepf is always disp to stderr.");
dpf("dpf() follows dbg() i/o setting, uses for -D_DBG etc");
old = pfset(1,NULL,NULL,NULL); //bad fp, old.rc != 0
puts(old.tostr); // no change if err
return 0;
}
// ~$ gcc src.c msgp.c
- fmt
- printf fmt
- p1-dg
- NULL(noout)/PF_NOCHANGE/FILE*
- obj
- output setting rtns before setting obj. use it to restore. obj.tostr holds
state msgstr. obj.rc holds api action result, suc/fail== 0/not0. pfset()
is canceled if obj.rc != 0.
pfset()/pfpush() rtns before setting. pfget() rtns current setting. dbg() rtns
some int val.
dbg() is printf debug helper. not need args type(int, char* etc).
eg) dbg(12,num,s,"cmt",1.11);
>>>
DBG: src.c 7: main(): cnt:1 pid:17477 arg:(12,num,s,"comment",1.11)
12 = i:12 / d:-1.72631 / p:0xc / c:\014 '\f' / s:(mem_err)
num = i:678 / d:-1.72631 / p:0x2a6 / c:\246 '?' / s:(mem_err)
s = i:4636870 / d:-1.72631 / p:0x46c0c6 / c:\306 '?' / s:abc
"cmt" = i:4636911 / d:-1.72631 / p:0x46c0ef / c:\357 '?' / s:cmt
1.11 = i:1546188227 / d:1.11 / p:0x5c28f5c3 / c:\303 '?' / s:(mem_err)
the type of argument is not specified. guess type and convert.
i/d/p/c/s == int/dbl/ptr/char/str
dbg() are stricted output size. max 1024 byte(1024 char) at once.
dbg() supports variable args. allows at least 1-9 args.
dbg() uses SIGSEGV/longjmp. it may cause some troubles if your pg uses signals.
-
POSIX.1-2001+ (-D_XOPEN_SOURCE=600/_POSIX_C_SOURCE=200112L)
Copyright 2017 Momi-g, GPLv3+
2022-07-12 v1.3.9 (2017-XX-XX v1.0.0)
-