#ifndef LINKLIST_H
#define LINKLIST_H

#include <Windows.h>
#include <malloc.h>
#include <stdio.h>

struct rdata_s
{
	struct	rdata_s *next;
	DWORD	rdata_addr;
	DWORD	txt_addr;
	DWORD	is_jmp_stx;
};

struct api_s
{
	struct api_s *next;
	DWORD api_addr;
	struct	rdata_s	*rdata;
};

struct api_s *add_api(struct api_s *ap, DWORD api_addr, DWORD rdata_addr, DWORD txt_addr, DWORD is_jmp_stx);
struct rdata_s *add_rdata(struct rdata_s *rd, DWORD rdata_addr, DWORD txt_addr, DWORD is_jmp_stx);

void reorder_api_rdata(struct api_s *ap);

void fix_api_rdata(struct api_s *ap);

struct rdata_s *get_rdata(struct rdata_s *rd, DWORD *rdata_addr);

struct api_s *find_api(struct api_s *ap, DWORD api_addr);
struct rdata_s *find_rdata(struct rdata_s *rd, DWORD rdata_addr);
struct rdata_s *find_txt(struct rdata_s *rd, DWORD txt_addr);

void print_api(FILE *fp, struct api_s *ap);
void print_rdata(FILE *fp, struct rdata_s *rd);

#endif /* LINKLIST_H */