git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6624 c06c8d41-db1a-0410-9941-cceddc491573
Q43X3MHS6IVLGSIIUJMTZT6NO6S4BDAUAJE4UJBXN4KWRFPLYZEAC
LR4R5HKGDDCZJWRBIKWDZ5OC3O2RLAVY2BZGQOULGXQOTJBON3NAC
KDWQP5WMMIAZGQQPXSI36IQBVZNGQFE2Z4N33QLKOMEKWEIRVKLAC
QYUAYEGK7WPBJLZRSWZVDWD5SMNAWWIJSQPWYA7BEYXMEBD2SDKAC
P2YNOE2TUTZFAOBTHJOIVD6TCV7J7D2UKUX67LHZUL6QY44ZMENQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC
// cprintf that stops outputting when wrapped
// Conceptually very similar to wrapcprintf()
int nowrapcprintf( int wrapcol, const char *s, ... )
{
char buf[1000]; // Hard max
va_list args;
va_start(args, s);
// XXX: If snprintf isn't available, vsnprintf probably isn't, either.
const int len = vsnprintf(buf, sizeof buf, s, args);
va_end(args);
// Sanity checking to prevent buffer overflows
const int maxlen = std::min( std::max( wrapcol + 1 - wherex(), 0 ), len );
// Force the string to terminate at maxlen
buf[maxlen] = 0;
cprintf("%s", buf);
return std::min(len, maxlen);
}
// convenience wrapper (hah) for nowrapcprintf
// FIXME: should pass off to nowrapcprintf() instead of doing it manually
int nowrap_eol_cprintf( const char *s, ... )
{
const int wrapcol = get_number_of_cols() - 1;
char buf[1000]; // Hard max
va_list args;
va_start(args, s);
// XXX: If snprintf isn't available, vsnprintf probably isn't, either.
const int len = vsnprintf(buf, sizeof buf, s, args);
va_end(args);
// Sanity checking to prevent buffer overflows
const int maxlen = std::min( std::max( wrapcol + 1 - wherex(), 0 ), len );
// Force the string to terminate at maxlen
buf[maxlen] = 0;
cprintf("%s", buf);
return std::min(len, maxlen);
}