log.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * Log Facility - The Quick6502 Project
  3. * log.c
  4. *
  5. * Created by Manoël Trapier on 19/05/10
  6. * Copyright (c) 2002-2019 986-Studio.
  7. *
  8. */
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. #include <color.h>
  12. #include <string.h>
  13. #include <stdarg.h>
  14. #include <log.h>
  15. #include <sys/time.h>
  16. #include <time.h>
  17. #ifdef TIME_STAMP_LOG
  18. void time_stamp_line(void)
  19. {
  20. /* Time "0" will be thefirst log line */
  21. static char firstRun = 1;
  22. static struct timeval firstTime;
  23. struct timeval curTime;
  24. int cMin, cSec;
  25. long long cMSec;
  26. /* Get datetime */
  27. gettimeofday(&curTime, NULL);
  28. if (firstRun == 1)
  29. {
  30. firstRun = 0;
  31. firstTime.tv_sec = curTime.tv_sec;
  32. firstTime.tv_usec = curTime.tv_usec;
  33. }
  34. cMSec = ((curTime.tv_sec - firstTime.tv_sec) * 1000) + (curTime.tv_usec - firstTime.tv_usec) / 1000;
  35. cSec = (cMSec / 1000);
  36. cMSec %= 1000;
  37. cMin = cSec / 60;
  38. cSec %= 60;
  39. /* Put cursor at start of line */
  40. printf("%c[s", 0x1B);
  41. printf("%c[7000D", 0x1B);
  42. printf("%c[1C", 0x1B);
  43. printf(FWHITE"[" FYELLOW "%03d" FRED "." FBLUE "%02d" FRED "." FGREEN "%03lld" FWHITE "]" CNORMAL, cMin, cSec,
  44. cMSec);
  45. printf("%c[u", 0x1B);
  46. }
  47. #endif /* TIME_STAMP_LOG */
  48. void log_real(int level, char *user, char *fmt, ...)
  49. {
  50. /* The LOG_PANIC must always be displayed */
  51. if ((level <= MAX_DEBUG_LEVEL) || (level <= LOG_PANIC))
  52. {
  53. va_list va;
  54. switch (level)
  55. {
  56. case LOG_PANIC:
  57. printf(BRED FWHITE);
  58. break;
  59. case LOG_ERROR:
  60. printf(FRED);
  61. break;
  62. case LOG_WARNING:
  63. printf(FYELLOW);
  64. break;
  65. default:
  66. case LOG_NORMAL:
  67. printf(FGREEN);
  68. break;
  69. case LOG_VERBOSE:
  70. printf(FCYAN);
  71. break;
  72. case LOG_DEBUG:
  73. printf(BBLUE FWHITE);
  74. break;
  75. }
  76. #ifdef TIME_STAMP_LOG
  77. printf(" ");
  78. #endif
  79. if (user != NULL)
  80. {
  81. int i;
  82. i = strlen(user);
  83. if (i < 12)
  84. {
  85. i = 12 - i;
  86. for (; i >= 0 ; i--)
  87. {
  88. putchar(' ');
  89. }
  90. }
  91. printf("%s", user);
  92. }
  93. else
  94. {
  95. switch (level)
  96. {
  97. case LOG_PANIC:
  98. printf(" PANIC");
  99. break;
  100. case LOG_ERROR:
  101. printf(" Error");
  102. break;
  103. case LOG_WARNING:
  104. printf(" Warning");
  105. break;
  106. default:
  107. case LOG_NORMAL:
  108. printf(" Info");
  109. break;
  110. case LOG_VERBOSE:
  111. printf(" Verbose");
  112. break;
  113. case LOG_DEBUG:
  114. printf(" Debug");
  115. break;
  116. }
  117. }
  118. printf(CNORMAL ": ");
  119. #ifdef TIME_STAMP_LOG
  120. time_stamp_line();
  121. #endif /* TIME_STAMP_LOG */
  122. va_start(va, fmt);
  123. vprintf(fmt, va);
  124. va_end(va);
  125. if (fmt[0] != 0)
  126. {
  127. printf("\n");
  128. }
  129. }
  130. }