2018-01-17 19:22:57 +01:00
|
|
|
#ifndef FORT_IMPL_H
|
|
|
|
#define FORT_IMPL_H
|
|
|
|
|
2018-04-17 19:14:50 +02:00
|
|
|
#if defined(_MSC_VER)
|
|
|
|
#define _CRT_SECURE_NO_WARNINGS /* To disable warnings for unsafe functions */
|
|
|
|
#endif
|
|
|
|
|
2018-01-17 19:22:57 +01:00
|
|
|
#include <stddef.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <assert.h>
|
|
|
|
#include <stdio.h>
|
2018-03-18 10:17:33 +01:00
|
|
|
#include "fort.h"
|
2018-01-17 19:22:57 +01:00
|
|
|
|
2018-08-28 21:25:43 +02:00
|
|
|
/* Define FT_INTERNAL to make internal libfort functions static
|
|
|
|
* in the result amalgamed source file.
|
|
|
|
*/
|
|
|
|
#ifdef FT_AMALGAMED_SOURCE
|
|
|
|
#define FT_INTERNAL static
|
|
|
|
#else
|
|
|
|
#define FT_INTERNAL
|
|
|
|
#endif /* FT_AMALGAMED_SORCE */
|
2018-04-17 19:14:50 +02:00
|
|
|
|
2018-04-16 20:01:45 +02:00
|
|
|
|
2018-01-17 19:22:57 +01:00
|
|
|
#define FORT_COL_SEPARATOR '|'
|
|
|
|
|
2018-05-02 16:55:29 +02:00
|
|
|
#define FORT_COL_SEPARATOR_LENGTH 1
|
|
|
|
|
2018-01-17 19:22:57 +01:00
|
|
|
#define FORT_UNUSED __attribute__((unused))
|
|
|
|
|
2018-04-04 21:13:37 +02:00
|
|
|
#define F_MALLOC fort_malloc
|
|
|
|
#define F_FREE fort_free
|
|
|
|
#define F_CALLOC fort_calloc
|
|
|
|
#define F_REALLOC fort_realloc
|
2018-01-17 19:22:57 +01:00
|
|
|
#define F_STRDUP fort_strdup
|
2018-03-05 19:08:14 +01:00
|
|
|
#define F_WCSDUP fort_wcsdup
|
2018-01-17 19:22:57 +01:00
|
|
|
|
|
|
|
#define F_CREATE(type) ((type *)F_CALLOC(sizeof(type), 1))
|
|
|
|
|
|
|
|
#define MAX(a,b) ((a) > (b) ? (a) : b)
|
|
|
|
#define MIN(a,b) ((a) < (b) ? (a) : b)
|
|
|
|
|
|
|
|
|
2018-05-06 16:04:34 +02:00
|
|
|
enum PolicyOnNull {
|
2018-01-17 19:22:57 +01:00
|
|
|
Create,
|
|
|
|
DoNotCreate
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2018-05-06 16:04:34 +02:00
|
|
|
enum F_BOOL {
|
2018-01-17 19:22:57 +01:00
|
|
|
F_FALSE = 0,
|
|
|
|
F_TRUE = 1
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2018-05-05 21:34:45 +02:00
|
|
|
#define FT_STR_2_CAT_(arg1, arg2) \
|
2018-01-17 19:22:57 +01:00
|
|
|
arg1##arg2
|
2018-05-05 21:34:45 +02:00
|
|
|
#define FT_STR_2_CAT(arg1, arg2) \
|
|
|
|
FT_STR_2_CAT_(arg1, arg2)
|
2018-01-17 19:22:57 +01:00
|
|
|
|
|
|
|
#define UNIQUE_NAME_(prefix) \
|
2018-05-05 21:34:45 +02:00
|
|
|
FT_STR_2_CAT(prefix,__COUNTER__)
|
2018-01-17 19:22:57 +01:00
|
|
|
#define UNIQUE_NAME(prefix) \
|
|
|
|
UNIQUE_NAME_(prefix)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* LOGGER
|
|
|
|
*****************************************************************************/
|
|
|
|
#define SYS_LOG_ERROR(...)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* DEFAULT_SIZES
|
|
|
|
* ***************************************************************************/
|
|
|
|
#define DEFAULT_STR_BUF_SIZE 1024
|
|
|
|
#define DEFAULT_VECTOR_CAPACITY 10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct fort_table_options;
|
|
|
|
struct fort_column_options;
|
|
|
|
struct fort_row;
|
|
|
|
struct vector;
|
|
|
|
struct fort_cell;
|
|
|
|
struct string_buffer;
|
2018-05-06 16:04:34 +02:00
|
|
|
struct separator {
|
2018-02-04 14:21:04 +01:00
|
|
|
int enabled;
|
|
|
|
};
|
2018-01-17 19:22:57 +01:00
|
|
|
|
|
|
|
typedef struct fort_table_options fort_table_options_t;
|
2018-05-06 16:04:34 +02:00
|
|
|
struct fort_context {
|
2018-02-26 19:42:48 +01:00
|
|
|
fort_table_options_t *table_options;
|
|
|
|
size_t row;
|
|
|
|
size_t column;
|
|
|
|
};
|
|
|
|
typedef struct fort_context context_t;
|
2018-01-17 19:22:57 +01:00
|
|
|
typedef struct fort_column_options fort_column_options_t;
|
|
|
|
typedef struct vector vector_t;
|
|
|
|
typedef struct fort_cell fort_cell_t;
|
|
|
|
typedef struct string_buffer string_buffer_t;
|
|
|
|
typedef struct fort_row fort_row_t;
|
2018-05-08 20:46:24 +02:00
|
|
|
/*typedef struct ft_table ft_table_t;*/
|
2018-02-04 14:21:04 +01:00
|
|
|
typedef struct separator separator_t;
|
2018-01-17 19:22:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-06 16:04:34 +02:00
|
|
|
enum CellType {
|
2018-05-02 16:55:29 +02:00
|
|
|
CommonCell,
|
|
|
|
GroupMasterCell,
|
|
|
|
GroupSlaveCell
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2018-01-17 19:22:57 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* LIBFORT helpers
|
|
|
|
*****************************************************************************/
|
2018-04-04 21:13:37 +02:00
|
|
|
|
|
|
|
extern void *(*fort_malloc)(size_t size);
|
|
|
|
extern void (*fort_free)(void *ptr);
|
|
|
|
extern void *(*fort_calloc)(size_t nmemb, size_t size);
|
|
|
|
extern void *(*fort_realloc)(void *ptr, size_t size);
|
|
|
|
void set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr));
|
|
|
|
|
|
|
|
|
2018-05-06 16:04:34 +02:00
|
|
|
char *fort_strdup(const char *str);
|
|
|
|
wchar_t *fort_wcsdup(const wchar_t *str);
|
2018-01-17 19:22:57 +01:00
|
|
|
size_t number_of_columns_in_format_string(const char *fmt);
|
2018-04-24 20:36:07 +02:00
|
|
|
size_t number_of_columns_in_format_wstring(const wchar_t *fmt);
|
2018-05-08 20:46:24 +02:00
|
|
|
/*int snprint_n_chars(char *buf, size_t length, size_t n, char ch);*/
|
|
|
|
/*int wsnprint_n_chars(wchar_t *buf, size_t length, size_t n, wchar_t ch);*/
|
2018-05-02 20:16:41 +02:00
|
|
|
int snprint_n_strings(char *buf, size_t length, size_t n, const char *str);
|
|
|
|
int wsnprint_n_string(wchar_t *buf, size_t length, size_t n, const char *str);
|
2018-03-05 19:08:14 +01:00
|
|
|
|
2018-01-17 19:22:57 +01:00
|
|
|
|
2018-03-31 16:54:01 +02:00
|
|
|
#define CHCK_RSLT_ADD_TO_WRITTEN(statement) \
|
|
|
|
do { \
|
|
|
|
tmp = statement; \
|
|
|
|
if (tmp < 0) {\
|
|
|
|
goto clear; \
|
|
|
|
} \
|
|
|
|
written += tmp; \
|
|
|
|
} while(0)
|
|
|
|
|
2018-04-16 21:33:05 +02:00
|
|
|
|
|
|
|
#define CHECK_NOT_NEGATIVE(x) \
|
|
|
|
do { if (x < 0) goto fort_fail; } while (0)
|
|
|
|
|
2018-03-09 10:44:16 +01:00
|
|
|
#endif /* FORT_IMPL_H */
|