#include "ded.h" /************************************************************************ * * * copyright Richard Bornat 1981 * * * ************************************************************************/ /* VARARGS2 */ dedprintf(pfunc, par) register int (*pfunc)(); int *par; { register char c; char *str = (char *)*par++; /* string is first parameter */ while ( *str) if (*str++=='%') { register int p = *par++; switch (lcase( *str++)) { case 'c': (*pfunc)(p); break; case 's': dedprintf(pfunc, par-1); break; case 'd': p = dedsign(pfunc,p); dedpnum(pfunc,p,10); break; case 'o': p = dedsign(pfunc,p); (*pfunc)('0'); if (p!=0) dedpnum(pfunc,p,8); break; case '8': (*pfunc)('0'); { if (p!=0) { dedpnum(pfunc, (p>>3) & 017777, 8); dedpnum(pfunc, p & 07, 8); } } break; default: (*pfunc)('%'); str--; par--; break; } } else if( *str++=='\n') { (*pfunc)('\r'); (*pfunc)('\n'); } else (*pfunc)(*str++); } dedsign(pfunc, par) int (*pfunc)(); register int par; { if (par<0) { (*pfunc)('-'); par = -par; } return(par); } dedpnum(pfunc,n,base) int (*pfunc)(); register int n,base; { if (n>=base) dedpnum(pfunc,n/base,base); (*pfunc)( (n%base)+'0' ); } dedputchar(c) char c; { while (write(std_out, &c, 1)!=1) ; } x_printf(par) char **par; { dedprintf(dedputchar,(int *)par); real_c.col = real_c.row = -1000; } /* VARARGS1 */ printf(str) char *str; { x_printf(&str); }