Corewar-Final/libft/printf/ft_printf.h
Jeremy FLEURY 748d10f4f3 push
2019-07-17 11:22:24 +02:00

259 lines
5.5 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_printf.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: igarbuz <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/01/24 13:05:59 by igarbuz #+# #+# */
/* Updated: 2019/01/24 13:06:04 by igarbuz ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_PRINTF_H
# define FT_PRINTF_H
# include <stdlib.h>
# include <unistd.h>
# include <stdarg.h>
# include <wchar.h>
/*
** BUF_M is muffer mask; must be a divisible PAGESIZE minus 1;
** exception for BUF_M 0x1, BUF_SIZE must be 0x1;
** BUF_S is a buffer size - must be a divisible PAGESIZE;
** PAGESIZE default 2^12;
** default 0x7ffff is equivalent to 524287 bytes; Examples of values :
** BUF_M : 0x7ffff, 0x3ffff, 0x1ffff, 0x0ffff, 0x7fff, 0x3fff, 0x1fff, 0x0fff;
** BUF_S : 0x80000, 0x40000, 0x20000, 0x10000, 0x8000, 0x4000, 0x2000, 0x1000
*/
# define BUF_M 0x0fff
# define BUF_SIZE 0x1000
/*
** do not modify
*/
# define F_ROUND 6
# define DB_MAX_L 1076
# define DBL_MAX_L 16447
typedef struct s_param
{
int p;
int prc;
int wdt;
} t_param;
typedef union u_value
{
double n;
struct
{
uint32_t lo;
uint32_t hi;
} u32;
} t_value;
typedef union u_value64
{
long double n;
struct
{
uint64_t lo;
uint64_t hi;
} u64;
} t_value64;
typedef struct s_nd
{
uint32_t n[128];
int32_t lo;
int32_t hi;
} t_nd;
typedef struct s_nd_long
{
uint32_t n[2048];
int32_t lo;
int32_t hi;
} t_nd_long;
/*
** buf_cnt.c
*/
extern int g_bcn;
extern unsigned int g_pow10[];
/*
** ft_str_null.c
*/
const char *ft_null(void);
/*
** ft_printf.c
*/
int ft_printf(const char *format, ...);
/*
** print_num_pad.c
*/
void ft_print_long_db_pad(char *b, t_param *prm,
long double *arg);
void ft_print_db_pad(char *b, t_param *prm, double *arg);
void ft_print_i_pad(char c, char *b, t_param *prm, intmax_t arg);
/*
** print_cs_pad.c
*/
void ft_print_c_pad(char c, char *b, t_param *prm, intmax_t arg);
/*
** ft_printf_db.c
*/
char *ft_printf_db(double *n, int r, char *tbl);
/*
** ft_printf_ldb.c
*/
char *ft_printf_long_db(long double *n, int r, char *tbl);
/*
** ft_parse.c
*/
int ft_parse(const char **s, t_param *prm);
/*
** print_buf_prefix.c
*/
void ft_printbuf_long_fprefix(char *b, int p, long double *arg);
void ft_printbuf_fprefix(char *b, int p, double *arg);
void ft_printbuf_xprefix(char *b, char c,
t_param *prm, intmax_t *arg);
void ft_printbuf_sprefix(char *b, int p, intmax_t *arg);
/*
** libft_printf.c
*/
int ft_strlen_printf(const char *s);
int ft_strlen_unicode(const wchar_t *s);
int ft_atoi_printf(const char *str);
int ft_isdigit_printf(char c);
/*
** print_buf.c
*/
void ft_flush(char *dst);
void ft_printbuf_char(char *dst, char src);
void ft_printbuf_pad(char *dst, char c, int len);
void ft_printbuf_c(char *dst, const char **src, char c);
void ft_printbuf_prc(char *dst, char **src, int prc);
/*
** print_buf_unicode.c
*/
void ft_printbuf_wchar_t(char *dst, wchar_t src, int size);
void ft_printbuf_unicode_prc(char *dst, wchar_t **src, int prc);
/*
** print_buf_num.c
*/
void ft_printbuf_snum(char *dst, intmax_t n);
void ft_printbuf_unum(char *dst, uintmax_t n);
void ft_printbuf_oct(char *dst, uintmax_t o);
void ft_printbuf_hex(char *dst, uintmax_t x, char c);
/*
** ft_arglen.c
*/
int ft_arg_len(intmax_t arg, char c, t_param *prm);
/*
** ft_arglen_oct.c
*/
int ft_arg_len_oct(intmax_t arg, t_param *prm);
/*
** ft_arglen_f.c
*/
int ft_fract_len(const char *f);
int ft_arg_db_len(const char *s, int p, double *arg);
int ft_arg_long_db_len(const char *s, int p, long double *arg);
int ft_arg_flen(intmax_t arg, char c, int p, int len);
/*
** ft_argcast.c
*/
intmax_t ft_arg_cast(va_list valist, int p, const char c);
/*
** ft_init_param.c
*/
void ft_init_param(t_param *prm);
void ft_init_nd(t_nd *nd);
/*
** ft_exp_dec.c
*/
int ft_exp_dec(unsigned int value);
/*
** pf_error.c
*/
void pf_error(int er);
/*
** nd_round.c
*/
void ft_round(t_nd *nd, int *r);
/*
** ft_buf_print_db.c
*/
char *ft_buf_print_db(t_nd *nd, int r, char *tbl);
/*
** ft_buf_print_ldb.c
*/
char *ft_buf_print_ldb(t_nd_long *nd, int r, char *tbl);
/*
** ft_nd_div.c
*/
void ft_nd_div2p(t_nd *nd, uint32_t p);
/*
** ft_nd_mul.c
*/
void ft_nd_mul2p(t_nd *nd, uint32_t p, uint32_t carry);
/*
** ft_nd_long_div.c
*/
void ft_nd_long_div2p(t_nd_long *nd, uint32_t p);
/*
** ft_nd_long_mul.c
*/
void ft_nd_long_mul2p(t_nd_long *nd, uint32_t p, uint32_t carry);
/*
** ft_nd_long_round.c
*/
void ft_long_round(t_nd_long *nd, int *r);
/*
** ft_unicode.c
*/
int ft_wcsize(wchar_t wc);
wchar_t ft_utf8_encode(unsigned int wchar);
/*
** print_buf_bit_float.c
*/
void ft_print_buf_bit_float(char *b, float f);
void ft_print_buf_bit_double(char *b, double db);
void ft_print_buf_bit_long_double(char *b, long double ldb);
void ft_print_bit_float(char *b, t_param *prm, va_list valist);
#endif