Загрузка данных


#ifndef DOCUMENTATION_MODULE_H
#define DOCUMENTATION_MODULE_H

#define Documents "Linked lists", "Queues", "Maps", "Binary Trees"
#define Available_document "Binary Trees"
#define Documents_count 4

int *check_available_documentation_module(int (*validate)(char *), int document_count, ...);
int validate(char *data);

#endif


#include "documentation_module.h"

#include <stdarg.h>
#include <stdlib.h>
#include <string.h>

int validate(char *data) { return !strcmp(data, Available_document); }

int *check_available_documentation_module(int (*validate)(char *), int document_count, ...) {
    int *result = malloc(document_count * sizeof(int));

    if (result != NULL) {
        va_list args;
        va_start(args, document_count);

        for (int i = 0; i < document_count; i++) {
            char *document = va_arg(args, char *);
            result[i] = validate(document);
        }

        va_end(args);
    }

    return result;
}


#include <stdio.h>
#include <stdlib.h>

#include "documentation_module.h"
#include "print_module.h"

void output_documents(char documents[][16], int *availability, int count);

int main(void) {
    char documents[Documents_count][16] = {Documents};
    int *availability = NULL;

    print_log(print_char, Module_load_success_message);

    availability = check_available_documentation_module(validate, Documents_count, Documents);

    if (availability != NULL) {
        output_documents(documents, availability, Documents_count);
        free(availability);
    }

    return 0;
}

void output_documents(char documents[][16], int *availability, int count) {
    for (int i = 0; i < count; i++) {
        printf("%-15s : ", documents[i]);
        if (availability[i]) {
            printf("available");
        } else {
            printf("unavailable");
        }

        if (i != count - 1) {
            printf("\n");
        }
    }
}


CC = gcc
CFLAGS = -Wall -Wextra -Werror -std=c11
BUILD_DIR = ../build

.PHONY: all clean rebuild door_struct list_test stack_test print_module documentation_module

all: door_struct list_test stack_test print_module documentation_module

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

door_struct: $(BUILD_DIR)
	$(CC) $(CFLAGS) dmanager_module.c -o $(BUILD_DIR)/Quest_1

list_test: $(BUILD_DIR)
	$(CC) $(CFLAGS) list.c list_test.c -o $(BUILD_DIR)/Quest_2

stack_test: $(BUILD_DIR)
	$(CC) $(CFLAGS) stack.c stack_test.c -o $(BUILD_DIR)/Quest_3

print_module: $(BUILD_DIR)
	$(CC) $(CFLAGS) print_module.c main_module_entry_point.c -o $(BUILD_DIR)/Quest_4

documentation_module: $(BUILD_DIR)
	$(CC) $(CFLAGS) print_module.c documentation_module.c main_module_entry_point.c -o $(BUILD_DIR)/Quest_5

clean:
	rm -rf $(BUILD_DIR)

rebuild: clean all