#pragma once

#ifndef TYPEDEF
#define TYPEDEF

struct apios_main_table_t;
typedef struct apios_main_table_t apios_main_table_t;

typedef int (*entry_fn_t)(void *args);

typedef int (*int_fn_t)(); 

typedef struct {
    char name[128];
    char type[128];
    char path[256];
    entry_fn_t entry_function;
} boot_entry_t;

typedef struct {
    char name[16];
    entry_fn_t driver_fn;
} driver_fn_t;

typedef struct {
    int driver_version;
    int fn_count;
    driver_fn_t *functions;
} driver_api_t;

typedef struct {
    char driver_name[16];
    driver_api_t *api;
} driver_header_t;

struct apios_main_table_t {
    int magic;
    int drivers_count;
    driver_header_t **drivers;
};

#endif
