static void _doprnt(register const char *fmt, va_list args, int radix, /* default radix - for '%r' */ void (*outc)(void *, int), /* character output */ void *outc_arg) /* argument for outc */ { int length; int prec; boolean_t ladjust; char padc; long n; unsigned long u; int plus_sign; int sign_char; boolean_t altfmt; int base; char c; while (*fmt != '\0') { if (*fmt != '%') { (*outc)(outc_arg, *fmt++); continue; } fmt++; length = 0; prec = -1; ladjust = FALSE; padc = ' '; plus_sign = 0; sign_char = 0; altfmt = FALSE; while (TRUE) { if (*fmt == '#') { altfmt = TRUE; fmt++; } else if (*fmt == '-') { ladjust = TRUE; fmt++; } else if (*fmt == '+') { plus_sign = '+'; fmt++; } else if (*fmt == ' ') { if (plus_sign == 0) plus_sign = ' '; fmt++; } else break; } if (*fmt == '0') { padc = '0'; fmt++; } if (isdigit(*fmt)) { while(isdigit(*fmt)) length = 10 * length + Ctod(*fmt++); } else if (*fmt == '*') { length = va_arg(args, int); fmt++; if (length < 0) { ladjust = !ladjust; length = -length; } } if (*fmt == '.') { fmt++; if (isdigit(*fmt)) { prec = 0; while(isdigit(*fmt)) prec = 10 * prec + Ctod(*fmt++); } else if (*fmt == '*') { prec = va_arg(args, int); fmt++; }
/* -*- * A low level printf() function. */ void lp_Print(void (*output)(void *, char *, int), void * arg, char *fmt, va_list ap) { #define OUTPUT(arg, s, l) \ { if (((l) < 0) || ((l) > LP_MAX_BUF)) { \ (*output)(arg, (char*)theFatalMsg, sizeof(theFatalMsg)-1); for(;;); \ } else { \ (*output)(arg, s, l); \ } \ } char buf[LP_MAX_BUF]; char c; char *s; long int num; int longFlag; int negFlag; int width; int prec; int ladjust; char padc; int length; for(;;) { { /* scan for the next '%' */ /*get the address of fmtStart*/ char *fmtStart = fmt; /*get the end of address of fmtStart*/ while((*fmt!='%')&&(*fmt!='\0')){ fmt++; } /* flush the string found so far */ OUTPUT(arg,fmtStart,fmt-fmtStart); /* are we hitting the end? */ if(*fmt=='\0') break; } /* we found a '%' */ fmt++; //go to next character /* check for long */ if(*fmt=='l'){ longFlag = 1; //the string is long } else{ longFlag = 0; } /* check for other prefixes */ //Initialization width = 0; prec = -1; ladjust = 0; padc = ' '; //according prefixes change the sign of string if(*fmt =='-'){ ladjust = 1; fmt++; } if(*fmt=='0'){ padc = '0'; fmt++; } if(IsDigit(*fmt)){ while(IsDigit(*fmt)){ width = 10*width+Ctod(*fmt++); } } if(*fmt == ' '){ fmt++; if(IsDigit(*fmt)){ prec = 0; while(IsDigit(*fmt)){ prec= prec*10+Ctod(*fmt++); } } } /* check format flag */ negFlag = 0; switch (*fmt) { case 'b': if (longFlag) { num = va_arg(ap, long int); } else { num = va_arg(ap, int); } length = PrintNum(buf, num, 2, 0, width, ladjust, padc, 0); OUTPUT(arg, buf, length); break; case 'd': case 'D': if (longFlag) { num = va_arg(ap, long int); } else { num = va_arg(ap, int); } if (num < 0) { num = - num; negFlag = 1; } length = PrintNum(buf, num, 10, negFlag, width, ladjust, padc, 0); OUTPUT(arg, buf, length); break; case 'o': case 'O': if (longFlag) { num = va_arg(ap, long int); } else {
static void _doprnt_ansi(register const char *fmt, va_list args, FILE *stream) { int length; int prec; boolean_t ladjust; char padc; long n; unsigned long u; int plus_sign; int sign_char; boolean_t altfmt; int base; int size; unsigned char char_buf[2]; char_buf[1] = '\0'; while (*fmt != '\0') { if (*fmt != '%') { putc(*fmt++, stream); continue; } fmt++; length = 0; prec = -1; ladjust = FALSE; padc = ' '; plus_sign = 0; sign_char = 0; altfmt = FALSE; while (TRUE) { if (*fmt == '#') { altfmt = TRUE; fmt++; } else if (*fmt == '-') { ladjust = TRUE; fmt++; } else if (*fmt == '+') { plus_sign = '+'; fmt++; } else if (*fmt == ' ') { if (plus_sign == 0) plus_sign = ' '; fmt++; } else break; } if (*fmt == '0') { padc = '0'; fmt++; } if (isdigit(*fmt)) { while(isdigit(*fmt)) length = 10 * length + Ctod(*fmt++); } else if (*fmt == '*') { length = va_arg(args, int); fmt++; if (length < 0) { ladjust = !ladjust; length = -length; } } if (*fmt == '.') { prec = 0; fmt++; if (isdigit(*fmt)) { prec = 0; while(isdigit(*fmt)) prec = 10 * prec + Ctod(*fmt++); } else if (*fmt == '*') { prec = va_arg(args, int); fmt++; }
int __doprnt( const char *fmt, va_list argp, /* character output routine */ void (*putc)(int ch, void *arg), void *arg, int radix) /* default radix - for '%r' */ { int length; int prec; bool ladjust; char padc; long long n; unsigned long long u; int plus_sign; int sign_char; bool altfmt, truncate; int base; char c; int capitals; int long_long; int nprinted = 0; while ((c = *fmt) != '\0') { if (c != '%') { if (putc) { (*putc)(c, arg); } nprinted++; fmt++; continue; } fmt++; long_long = 0; length = 0; prec = -1; ladjust = false; padc = ' '; plus_sign = 0; sign_char = 0; altfmt = false; while (true) { c = *fmt; if (c == '#') { altfmt = true; } else if (c == '-') { ladjust = true; } else if (c == '+') { plus_sign = '+'; } else if (c == ' ') { if (plus_sign == 0) plus_sign = ' '; } else break; fmt++; } if (c == '0') { padc = '0'; c = *++fmt; } if (isdigit(c)) { while(isdigit(c)) { length = 10 * length + Ctod(c); c = *++fmt; } } else if (c == '*') { length = va_arg(argp, int); c = *++fmt; if (length < 0) { ladjust = !ladjust; length = -length; } } if (c == '.') { c = *++fmt; if (isdigit(c)) { prec = 0; while(isdigit(c)) { prec = 10 * prec + Ctod(c); c = *++fmt; } } else if (c == '*') { prec = va_arg(argp, int); c = *++fmt; }
void _doprnt (register const char * fmt, va_list args, int radix, void (*putc)(char * arg, int c), char * putc_arg) { int length; int prec; bool_t ladjust; char padc; long long n, m; unsigned long long u; int plus_sign; int sign_char; bool_t altfmt, truncate; int base; char c; int longopt; while (*fmt != '\0') { if (*fmt != '%') { (*putc)(putc_arg, *fmt++); continue; } fmt++; length = 0; prec = -1; ladjust = FALSE; padc = ' '; plus_sign = 0; sign_char = 0; altfmt = FALSE; longopt = 0; while (TRUE) { if (*fmt == '#') { altfmt = TRUE; fmt++; } else if (*fmt == '-') { ladjust = TRUE; fmt++; } else if (*fmt == '+') { plus_sign = '+'; fmt++; } else if (*fmt == ' ') { if (plus_sign == 0) plus_sign = ' '; fmt++; } else break; } if (*fmt == '0') { padc = '0'; fmt++; } if (isdigit(*fmt)) { while(isdigit(*fmt)) length = 10 * length + Ctod(*fmt++); } else if (*fmt == '*') { length = va_arg(args, int); fmt++; if (length < 0) { ladjust = !ladjust; length = -length; } } if (*fmt == '.') { fmt++; if (isdigit(*fmt)) { prec = 0; while(isdigit(*fmt)) prec = 10 * prec + Ctod(*fmt++); } else if (*fmt == '*') { prec = va_arg(args, int); fmt++; }
void _doprnt( const char *fmt, va_list argp, /* character output routine */ void (*putc)( char, vm_offset_t), int radix, /* default radix - for '%r' */ vm_offset_t putc_arg) { int length; int prec; boolean_t ladjust; char padc; long n; unsigned long u; int plus_sign; int sign_char; boolean_t altfmt, truncate; int base; char c; printf_init(); #if 0 /* Make sure that we get *some* printout, no matter what */ simple_lock(&_doprnt_lock); #else { int i = 0; while (i < 1*1024*1024) { if (simple_lock_try(&_doprnt_lock)) break; i++; } } #endif while ((c = *fmt) != '\0') { if (c != '%') { (*putc)(c, putc_arg); fmt++; continue; } fmt++; length = 0; prec = -1; ladjust = FALSE; padc = ' '; plus_sign = 0; sign_char = 0; altfmt = FALSE; while (TRUE) { c = *fmt; if (c == '#') { altfmt = TRUE; } else if (c == '-') { ladjust = TRUE; } else if (c == '+') { plus_sign = '+'; } else if (c == ' ') { if (plus_sign == 0) plus_sign = ' '; } else break; fmt++; } if (c == '0') { padc = '0'; c = *++fmt; } if (isdigit(c)) { while(isdigit(c)) { length = 10 * length + Ctod(c); c = *++fmt; } } else if (c == '*') { length = va_arg(argp, int); c = *++fmt; if (length < 0) { ladjust = !ladjust; length = -length; } } if (c == '.') { c = *++fmt; if (isdigit(c)) { prec = 0; while(isdigit(c)) { prec = 10 * prec + Ctod(c); c = *++fmt; } } else if (c == '*') { prec = va_arg(argp, int); c = *++fmt; }
int __doprnt(const char *fmt, va_list argp, void (*putc)(int), int radix, int is_log) { int length; int prec; bool ladjust; char padc; long long n; unsigned long long u; int plus_sign; int sign_char; bool altfmt, truncate; int base; char c; int capitals; int long_long; int nprinted = 0; while ((c = *fmt) != '\0') { if (c != '%') { (*putc)(c); nprinted++; fmt++; continue; } fmt++; long_long = 0; length = 0; prec = -1; ladjust = FALSE; padc = ' '; plus_sign = 0; sign_char = 0; altfmt = FALSE; while (TRUE) { c = *fmt; if (c == '#') { altfmt = TRUE; } else if (c == '-') { ladjust = TRUE; } else if (c == '+') { plus_sign = '+'; } else if (c == ' ') { if (plus_sign == 0) plus_sign = ' '; } else break; fmt++; } if (c == '0') { padc = '0'; c = *++fmt; } if (isdigit(c)) { while(isdigit(c)) { length = 10 * length + Ctod(c); c = *++fmt; } } else if (c == '*') { length = va_arg(argp, int); c = *++fmt; if (length < 0) { ladjust = !ladjust; length = -length; } } if (c == '.') { c = *++fmt; if (isdigit(c)) { prec = 0; while(isdigit(c)) { prec = 10 * prec + Ctod(c); c = *++fmt; } } else if (c == '*') { prec = va_arg(argp, int); c = *++fmt; }