+#define PUTDF(cp, num, wid, fill)\
+ if (cp + wid < ep) {\
+ if ((i = (num)) < 0)\
+ i = -(num);\
+ if ((c = (wid)) < 0)\
+ c = -c;\
+ sp = cp + c;\
+ do {\
+ *--sp = (i % 10) + '0';\
+ i /= 10;\
+ } while (i > 0 && sp > cp);\
+ if (i > 0)\
+ *sp = '?';\
+ else if ((num) < 0 && sp > cp)\
+ *--sp = '-';\
+ while (sp > cp)\
+ *--sp = fill;\
+ cp += c;\
+ }