2D Run-and-gun shooter inspired by One Man's Doomsday, Counter-Strike, and Metal Slug.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

160 líneas
4.6 KiB

  1. #include "IZ_log.h"
  2. bool IZ_LogIsSupportedTerminal() {
  3. bool result;
  4. const char *term = getenv("TERM");
  5. result = term && strcmp(term, "") != 0;
  6. #ifndef IZ_WINDOWS
  7. return result;
  8. #else
  9. if (result) {
  10. return 1;
  11. }
  12. // Attempt to enable virtual terminal processing on Windows.
  13. // See: https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx
  14. HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  15. if (hOut == INVALID_HANDLE_VALUE) {
  16. return 0;
  17. }
  18. DWORD dwMode = 0;
  19. if (!GetConsoleMode(hOut, &dwMode)) {
  20. return 0;
  21. }
  22. dwMode |= 0x4; // ENABLE_VIRTUAL_TERMINAL_PROCESSING
  23. if (!SetConsoleMode(hOut, dwMode)) {
  24. return 0;
  25. }
  26. return 1;
  27. #endif
  28. }
  29. bool IZ_LogIsSupportedColor(FILE* s) {
  30. return isatty(fileno(s)) && IZ_LogIsSupportedTerminal();
  31. }
  32. void IZ_LogInitialize(const char* context, bool force_output) {
  33. if (force_output) {
  34. stdout_dest = stdout;
  35. stderr_dest = stderr;
  36. return;
  37. }
  38. #ifdef IZ_DEBUG
  39. stdout_dest = stdout;
  40. stderr_dest = stderr;
  41. #else
  42. const char* log_dir = "logs";
  43. char base_log_dir[128];
  44. sprintf(base_log_dir, "%s/%s", SDL_GetBasePath(), log_dir);
  45. if (!IZ_isdir(base_log_dir)) {
  46. IZ_mkdir(base_log_dir);
  47. }
  48. char stdout_filename[128] = "";
  49. char stderr_filename[128] = "";
  50. char* now = IZ_TimerNowPathSafe();
  51. sprintf(stdout_filename, "%s/%s-out-%s.log", base_log_dir, context, now);
  52. sprintf(stderr_filename, "%s/%s-err-%s.log", base_log_dir, context, now);
  53. IZ_fopen(&stdout_dest, stdout_filename, "a");
  54. IZ_fopen(&stderr_dest, stderr_filename, "a");
  55. #endif
  56. }
  57. void IZ_LogTeardown() {
  58. #ifndef IZ_DEBUG
  59. if (IZ_LogIsSupportedColor(stdout_dest)) {
  60. return;
  61. }
  62. fclose(stdout_dest);
  63. fclose(stderr_dest);
  64. #endif
  65. }
  66. void IZ_LogError(const char* context, const char* fmt, ...) {
  67. #ifdef IZ_LOG_LEVEL_FLAG_ERROR
  68. char buffer[4096];
  69. va_list args;
  70. va_start(args, fmt);
  71. vsnprintf(buffer, sizeof(buffer), fmt, args);
  72. va_end(args);
  73. if (IZ_LogIsSupportedColor(stdout_dest)) {
  74. fprintf(stdout_dest, RED "%-" IZ_LOG_WIDTH_TIMESTAMP "s" RESET " " BOLD "%-" IZ_LOG_WIDTH_CATEGORY "s" RESET " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  75. return;
  76. }
  77. fprintf(stderr_dest, "%-" IZ_LOG_WIDTH_TIMESTAMP "s" " " "%-" IZ_LOG_WIDTH_CATEGORY "s" " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  78. #endif
  79. }
  80. void IZ_LogInfo(IZ_LogCategory category, const char* context, const char* fmt, ...) {
  81. #ifdef IZ_LOG_LEVEL_FLAG_INFO
  82. char buffer[4096];
  83. va_list args;
  84. va_start(args, fmt);
  85. vsnprintf(buffer, sizeof(buffer), fmt, args);
  86. va_end(args);
  87. if (IZ_LogIsSupportedColor(stdout_dest)) {
  88. switch (category) {
  89. default:
  90. case IZ_LOG_CATEGORY_GENERIC:
  91. fprintf(stdout_dest, CYN "%-" IZ_LOG_WIDTH_TIMESTAMP "s" RESET " " BOLD "%-" IZ_LOG_WIDTH_CATEGORY "s" RESET " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  92. break;
  93. case IZ_LOG_CATEGORY_GLOBAL:
  94. fprintf(stdout_dest, MAG "%-" IZ_LOG_WIDTH_TIMESTAMP "s" RESET " " BOLD "%-" IZ_LOG_WIDTH_CATEGORY "s" RESET " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  95. break;
  96. case IZ_LOG_CATEGORY_INPUT:
  97. fprintf(stdout_dest, WHT "%-" IZ_LOG_WIDTH_TIMESTAMP "s" RESET " " BOLD "%-" IZ_LOG_WIDTH_CATEGORY "s" RESET " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  98. break;
  99. }
  100. return;
  101. }
  102. fprintf(stdout_dest, "%-" IZ_LOG_WIDTH_TIMESTAMP "s" " " "%-" IZ_LOG_WIDTH_CATEGORY "s" " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  103. #endif
  104. }
  105. void IZ_LogWarn(bool is_critical, const char* context, const char* fmt, ...) {
  106. #ifdef IZ_LOG_LEVEL_FLAG_WARN
  107. char buffer[4096];
  108. va_list args;
  109. va_start(args, fmt);
  110. vsnprintf(buffer, sizeof(buffer), fmt, args);
  111. va_end(args);
  112. if (IZ_LogIsSupportedColor(stdout_dest)) {
  113. if (is_critical) {
  114. fprintf(stdout_dest, GRN "%-" IZ_LOG_WIDTH_TIMESTAMP "s" RESET " " BOLD "%-" IZ_LOG_WIDTH_CATEGORY "s" RESET " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  115. } else {
  116. fprintf(stdout_dest, YEL "%-" IZ_LOG_WIDTH_TIMESTAMP "s" RESET " " BOLD "%-" IZ_LOG_WIDTH_CATEGORY "s" RESET " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  117. }
  118. return;
  119. }
  120. fprintf(stdout_dest, "%-" IZ_LOG_WIDTH_TIMESTAMP "s" " " "%-" IZ_LOG_WIDTH_CATEGORY "s" " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  121. #endif
  122. }
  123. void IZ_Log(const char* context, const char* fmt, ...) {
  124. #ifdef IZ_LOG_LEVEL_FLAG_DEBUG
  125. char buffer[4096];
  126. va_list args;
  127. va_start(args, fmt);
  128. vsnprintf(buffer, sizeof(buffer), fmt, args);
  129. va_end(args);
  130. if (IZ_LogIsSupportedColor(stdout_dest)) {
  131. fprintf(stdout_dest, BLU "%-" IZ_LOG_WIDTH_TIMESTAMP "s" RESET " " BOLD "%-" IZ_LOG_WIDTH_CATEGORY "s" RESET " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  132. return;
  133. }
  134. fprintf(stdout_dest, "%-" IZ_LOG_WIDTH_TIMESTAMP "s" " " "%-" IZ_LOG_WIDTH_CATEGORY "s" " %s\n", IZ_LOG_DATE_FUNCTION(), context, buffer);
  135. fflush(stdout_dest);
  136. #endif
  137. }