File: utils.h

package info (click to toggle)
edfbrowser 1.81%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,632 kB
  • sloc: cpp: 68,449; ansic: 8,959; sh: 147; xml: 19; makefile: 12
file content (136 lines) | stat: -rw-r--r-- 5,353 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
***************************************************************************
*
* Author: Teunis van Beelen
*
* Copyright (C) 2009 - 2021 Teunis van Beelen
*
* Email: teuniz@protonmail.com
*
***************************************************************************
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
***************************************************************************
*/



#ifndef UTILS_INCLUDED
#define UTILS_INCLUDED


#ifdef __cplusplus
extern "C" {
#endif


#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>


void remove_trailing_spaces(char *);
void remove_leading_spaces(char *);
void trim_spaces(char *);
void remove_trailing_zeros(char *);
void convert_trailing_zeros_to_spaces(char *);

/* Inserts a copy of substr into str. The substring is the portion of substr that begins at */
/* the character position subpos and spans sublen characters (or until the end of substr */
/* if substr is too short). */
void str_insert_substr(char *str, int pos, int len, const char *substr, int subpos, int sublen);

/* Replaces the nth occurence of dest_substr in str with src_substr. */
/* If n = -1, all occurrences will be replaced. */
/* len is the buffer length, not the string length! */
/* Returns the number of substrings replaced. */
int str_replace_substr(char *str, int len, int n, const char *dest_substr, const char *src_substr);

void remove_extension_from_filename(char *);  /* removes extension including the dot */
int get_filename_from_path(char *dest, const char *src, int size);  /* size is size of destination, returns length of filename */
int get_directory_from_path(char *dest, const char *src, int size);  /* size is size of destination, returns length of directory */
void latin1_to_ascii(char *, int);
void latin1_to_utf8(char *, int);
void utf8_to_latin1(char *);
int antoi(const char *, int);
int atoi_nonlocalized(const char *);
double atof_nonlocalized(const char *);
//int sprint_number_nonlocalized(char *, double);
long long atoll_x(const char *, int);
void strntolower(char *, int);

/* returns also empty tokens */
char * strtok_r_e(char *, const char *, char **);

/* 3th argument is the minimum digits that will be printed (minus sign not included), leading zero's will be added if necessary */
/* if 4th argument is zero, only negative numbers will have the sign '-' character */
/* if 4th argument is one, the sign '+' or '-' character will always be printed */
/* returns the amount of characters printed */
//int sprint_int_number_nonlocalized(char *, int, int, int);
int sprint_ll_number_nonlocalized(char *, long long, int, int);
int fprint_int_number_nonlocalized(FILE *, int, int, int);
int fprint_ll_number_nonlocalized(FILE *, long long, int, int);

/* returns 1 in case the string is not a number */
int is_integer_number(char *);
int is_number(char *);

int round_125_cat(double);  /* returns 10, 20 or 50, depending on the value */

void hextoascii(char *);  /* inline copy */
void bintoascii(char *);  /* inline copy */
void bintohex(char *);    /* inline copy */
void asciitohex(char *, const char *);  /* destination must have double the size of source! */
void asciitobin(char *, const char *);  /* destination must have eight times the size of source! */
void hextobin(char *, const char *);    /* destination must have four times the size of source! */

/* Converts a double to Giga/Mega/Kilo/milli/micro/etc. */
/* int is number of decimals and size of destination. Result is written into the string argument */
int convert_to_metric_suffix(char *, double, int, int);

double round_up_step125(double, double *);      /* Rounds the value up to 1-2-5 steps */
double round_down_step125(double, double *);    /* Rounds the value down to 1-2-5 steps */
double round_to_3digits(double);   /* Rounds the value to max 3 digits */

int strtoipaddr(unsigned int *, const char *);  /* convert a string "192.168.1.12" to an integer */

int dblcmp(double, double);  /* returns 0 when equal */

int base64_dec(const void *, void *, int);

/* sz is size of destination, returns length of string in dest.
 * This is different than the official BSD implementation!
 * From the BSD man-page:
 * "The strlcpy() and strlcat() functions return the total length of
 * the string they tried to create. For strlcpy() that means the
 * length of src. For strlcat() that means the initial length of dst
 * plus the length of src. While this may seem somewhat confusing,
 * it was done to make truncation detection simple."
 */
#if defined(__APPLE__) || defined(__MACH__) || defined(__APPLE_CC__) || defined(__FreeBSD__) || defined(__HAIKU__)
/* nothing here */
#else
int strlcpy(char *, const char *, int);
int strlcat(char *, const char *, int);
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif