kprintf.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. if (!current) {
  11. IO::out8(0xe9, ch);
  12. return;
  13. }
  14. Console::the().write(current->process(), (byte*)&ch, 1);
  15. }
  16. int kprintf(const char* fmt, ...)
  17. {
  18. va_list ap;
  19. va_start(ap, fmt);
  20. int ret = printf_internal(console_putch, nullptr, fmt, ap);
  21. va_end(ap);
  22. return ret;
  23. }
  24. static void buffer_putch(char*& bufptr, char ch)
  25. {
  26. *bufptr++ = ch;
  27. }
  28. int ksprintf(char* buffer, const char* fmt, ...)
  29. {
  30. va_list ap;
  31. va_start(ap, fmt);
  32. int ret = printf_internal(buffer_putch, buffer, fmt, ap);
  33. buffer[ret] = '\0';
  34. va_end(ap);
  35. return ret;
  36. }
  37. static void debugger_putch(char*&, char ch)
  38. {
  39. IO::out8(0xe9, ch);
  40. }
  41. extern "C" int dbgprintf(const char* fmt, ...)
  42. {
  43. va_list ap;
  44. va_start(ap, fmt);
  45. int ret = printf_internal(debugger_putch, nullptr, fmt, ap);
  46. va_end(ap);
  47. return ret;
  48. }