complex_modules_file_analyzer.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. // Объявляем функции модулей как слабые (weak)
  5. #define DECLARE_MODULE_RUN(num) extern int module_##num##_run(const char *filename) __attribute__((weak))
  6. DECLARE_MODULE_RUN(00);
  7. DECLARE_MODULE_RUN(01);
  8. DECLARE_MODULE_RUN(02);
  9. DECLARE_MODULE_RUN(03);
  10. DECLARE_MODULE_RUN(04);
  11. DECLARE_MODULE_RUN(05);
  12. DECLARE_MODULE_RUN(06);
  13. DECLARE_MODULE_RUN(07);
  14. DECLARE_MODULE_RUN(08);
  15. DECLARE_MODULE_RUN(09);
  16. DECLARE_MODULE_RUN(10);
  17. DECLARE_MODULE_RUN(11);
  18. DECLARE_MODULE_RUN(12);
  19. DECLARE_MODULE_RUN(13);
  20. DECLARE_MODULE_RUN(14);
  21. DECLARE_MODULE_RUN(15);
  22. DECLARE_MODULE_RUN(16);
  23. DECLARE_MODULE_RUN(17);
  24. DECLARE_MODULE_RUN(18);
  25. DECLARE_MODULE_RUN(19);
  26. DECLARE_MODULE_RUN(20);
  27. DECLARE_MODULE_RUN(21);
  28. DECLARE_MODULE_RUN(22);
  29. DECLARE_MODULE_RUN(23);
  30. DECLARE_MODULE_RUN(24);
  31. DECLARE_MODULE_RUN(25);
  32. DECLARE_MODULE_RUN(26);
  33. DECLARE_MODULE_RUN(27);
  34. DECLARE_MODULE_RUN(28);
  35. DECLARE_MODULE_RUN(29);
  36. DECLARE_MODULE_RUN(30);
  37. DECLARE_MODULE_RUN(31);
  38. DECLARE_MODULE_RUN(32);
  39. DECLARE_MODULE_RUN(33);
  40. DECLARE_MODULE_RUN(34);
  41. DECLARE_MODULE_RUN(35);
  42. int main(int argc, char *argv[]) {
  43. // Проверка аргументов
  44. if (argc != 2) {
  45. fprintf(stderr, " Использование: %s <filename>\n", argv[0]);
  46. return 1;
  47. }
  48. system("clear");
  49. const char *filename = argv[1];
  50. // Проверка, существует ли файл
  51. if (access(filename, F_OK) != 0) {
  52. // Если файл не существует, считаем аргумент строкой и вызываем только module_30
  53. if (module_30_run != NULL) {
  54. printf("\n\033[1;90m Module:\033[0m 30\n");
  55. int result = module_30_run(filename);
  56. if (result != 0) {
  57. fprintf(stderr, " Модуль module_30 завершился с ошибкой: %d\n", result);
  58. }
  59. } else {
  60. fprintf(stderr, " Модуль module_30 не реализован\n");
  61. }
  62. return 0;
  63. }
  64. // Если файл существует, выполняем все модули
  65. int (*module_runs[36])(const char *) = {
  66. module_00_run, module_01_run, module_02_run, module_03_run,
  67. module_04_run, module_05_run, module_06_run, module_07_run,
  68. module_08_run, module_09_run, module_10_run, module_11_run,
  69. module_12_run, module_13_run, module_14_run, module_15_run,
  70. module_16_run, module_17_run, module_18_run, module_19_run,
  71. module_20_run, module_21_run, module_22_run, module_23_run,
  72. module_24_run, module_25_run, module_26_run, module_27_run,
  73. module_28_run, module_29_run, module_30_run, module_31_run,
  74. module_32_run, module_33_run, module_34_run, module_35_run
  75. };
  76. // Выполняем все модули последовательно
  77. for (int i = 0; i < 36; i++) {
  78. if (module_runs[i] != NULL) {
  79. printf("\n\033[1;90m Module:\033[0m %02d\n", i);
  80. int result = module_runs[i](filename);
  81. if (result != 0) {
  82. fprintf(stderr, "\033[1;90m Module:\033[0m \033[0;37m%02d\033[0m \033[0;31mfailed with error: %d\033[0m\n", i, result);
  83. }
  84. }
  85. }
  86. return 0;
  87. }
  88. // gcc -Wall -Wextra -o cmfa complex_modules_file_analyzer.c module_*.c -lmagic -luchardet -larchive -lavformat -lavcodec -lavutil -lexif