MSGP(3) Library Functions Manual MSGP(3)

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)

-