#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