kprintf.cpp 970 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "kprintf.h"
  2. #include "Console.h"
  3. #include "IO.h"
  4. #include <LibC/stdarg.h>
  5. #include "Process.h"
  6. #include <AK/Types.h>
  7. #include <AK/printf.cpp>
  8. static void console_putch(char*&, char ch)
  9. {
  10. Console::the().write(*current, (byte*)&ch, 1);
  11. }
  12. int kprintf(const char* fmt, ...)
  13. {
  14. va_list ap;
  15. va_start(ap, fmt);
  16. int ret = printf_internal(console_putch, nullptr, fmt, ap);
  17. va_end(ap);
  18. return ret;
  19. }
  20. static void buffer_putch(char*& bufptr, char ch)
  21. {
  22. *bufptr++ = ch;
  23. }
  24. int ksprintf(char* buffer, const char* fmt, ...)
  25. {
  26. va_list ap;
  27. va_start(ap, fmt);
  28. int ret = printf_internal(buffer_putch, buffer, fmt, ap);
  29. buffer[ret] = '\0';
  30. va_end(ap);
  31. return ret;
  32. }
  33. static void debugger_putch(char*&, char ch)
  34. {
  35. IO::out8(0xe9, ch);
  36. }
  37. extern "C" int dbgprintf(const char* fmt, ...)
  38. {
  39. va_list ap;
  40. va_start(ap, fmt);
  41. int ret = printf_internal(debugger_putch, nullptr, fmt, ap);
  42. va_end(ap);
  43. return ret;
  44. }