JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
tools.h
Go to the documentation of this file.
1#ifndef __JBXL_TOOLS_HEADER_
2#define __JBXL_TOOLS_HEADER_
3
11#include "common.h"
12#include <sys/types.h>
13#include <sys/stat.h>
14#include <stdarg.h>
15#include <ctype.h>
16
17
18#ifdef WIN32
19 #include <winsock2.h> // for ntohl, ntohs, htonl, htons
20 #ifndef HAVE_TIME_H
21 #define HAVE_TIME_H
22 #endif
23#else
24 #include <unistd.h>
25 #include <sys/sysinfo.h>
26#endif
27
28
29#ifdef HAVE_ARPA_INET_H
30 #include <arpa/inet.h>
31#endif
32
33#ifdef TIME_WITH_SYS_TIME
34 #include <time.h>
35 #include <sys/time.h>
36#else
37 #ifdef HAVE_TIME_H
38 #include <time.h>
39 #endif
40 #ifdef HAVE_SYS_TIME_H
41 #include <sys/time.h>
42 #endif
43#endif
44
45#ifdef HAVE_SYS_PARAM_H
46 #include <sys/param.h>
47#endif
48
49#ifdef HAVE_SYSLOG_H
50 #include <syslog.h>
51#endif
52
53#ifdef HAVE_WAIT_H
54 #include <wait.h>
55#endif
56#ifdef HAVE_SYS_WAIT_H
57 #include <sys/wait.h>
58#endif
59
60#ifdef HAVE_SYS_ERRNO_H
61 #include <sys/errno.h>
62#else
63 #include <errno.h>
64#endif
65#include <signal.h>
66
67
68#ifndef HUGE_VALF
69#ifdef HUGE_VAL
70#define HUGE_VALF ((double)HUGE_VAL)
71#endif
72#endif
73
74
75/*
76マクロ
77*/
78#define CHAR_CR 0x0d
79#define CHAR_LF 0x0a
80#define CHAR_TAB 0x09
81
82#define CODE_US 0
83#define CODE_EN 0
84#define CODE_EUC 1 //
85#define CODE_SJIS 2 //
86#define CODE_UTF8 3 //
87
88#define UNKNOWN_ENDIAN 0
89
90#ifndef LITTLE_ENDIAN
91 #define LITTLE_ENDIAN 1234
92 #define BIG_ENDIAN 4321
93 #define PDP_ENDIAN 3412
94#endif
95
96#ifdef WIN32
97 #define CHAR_DELI_DIR '\\'
98 #define STR_DELI_DIR "\\"
99 #define STR_CRNT_DIR ".\\"
100 #define STR_UPST_DIR "..\\"
101#else
102 #define CHAR_DELI_DIR '/'
103 #define STR_DELI_DIR "/"
104 #define STR_CRNT_DIR "./"
105 #define STR_UPST_DIR "../"
106#endif
107
108
109typedef union _union_val {
110 long long int llint;
111 long unsigned long int ullint;
112 long int lint;
113 long unsigned int ulint;
114 int nint;
115 unsigned int uint;
116 short int sint;
117 unsigned short int usint;
118 char nchar;
119 unsigned char uchar;
120 double dreal;
121 float real;
128} unionVal;
129
130
131typedef union _union_ptr {
132 long long int* llintp;
133 long unsigned long int* ullintp;
134 long int* lintp;
135 long unsigned int* ulintp;
136 int* nintp;
137 unsigned int* uintp;
138 short int* sintp;
139 unsigned short int* usintp;
140 char* ncharp;
141 unsigned char* ucharp;
142 double* drealp;
143 float* realp;
150} unionPtr;
151
152
153
154// バイト型 リングバッファ
155typedef struct _ringBuffer {
156 unsigned char* buf;
157 int bufsz;
158 int spoint;
159 int epoint;
160 int datasz;
161 int npoint;
162 int datano;
163 int state;
164} ringBuffer;
165
166
167#define mstream ringBuffer
168
169
170// 矩形
171typedef struct _rectangle {
172 int x;
173 int y;
174 int xsize;
175 int ysize;
176} rectAngle;
177
178
179//
180// 大域変数
181//
182extern int DebugMode;
183extern int UnitTestMode;
184
185extern int KanjiCode;
186extern int HostEndian;
187
188extern unsigned char LocalIPNum[4];
189extern unsigned char LocalIPNum6[16];
190
191#define LOCAL_IPv4 "127.0.0.1"
192#define LOCAL_IPv6 "::1"
193#define LOCAL_IPADDR LOCAL_IPv4
194#define LOCAL_IPADDR6 LOCAL_IPv6
195
196extern long unsigned int UsedMemoryBase;
197
198// not C++
199#ifndef CPLUSPLUS
200 int isNull(void* p);
201 #define freeNull(p) {if(!isNull((void*)p)) free(p); (p)=NULL;}
202 #define freenull(p) {if(!isNull((void*)p)) free(p); (p)=NULL;}
203#endif
204
205#define free_null(p) freeNull((p))
206
207#define _tochar(a) (char*)(a)
208
209
210
212
213// 文字(列)操作
214char* get_line(char* buf, int n);
215char* get_seq_data(char* buf, int* ptr);
216char* awk (char* str, char cc, int n);
217char* cawk(char* str, char cc, int n);
218
219void replace_char(unsigned char* buf, int len, unsigned char frm, unsigned char toc);
220char* replace_str(char* buf, int len, const char* frm, const char* tos);
221char* cut_str(char* buf, int ls, int le);
222char* dup_str(char* buf);
223#define dup_string(s) dup_str((s))
224
225char* skip_chars(char* pp, const char* check);
226char* skip_char(char* pp, char cc);
227char* skip_char_pair(char* pp, char pair, char end);
228char* skip_string_end(char* pp);
229
230char* pack_char_len(char* pp, char cc, int len);
231char* pack_head_tail_char(char* pp, char cc);
232char* change_esc(char* pp);
233char* chomp(char* str);
234char* double_bs(char* fn);
235char* numbering_name(const char* fmt, int n);
236#define pack_char(s, c) pack_char_len((s), (c), -1)
237
238int is_number(unsigned char*);
239
240// thread unsafe
241char* itostr(int n);
242char* ltostr(long int n);
243char* ultostr(long unsigned int n);
244char* lltostr(long long int n);
245char* ulltostr(long unsigned long int n);
246char* ftostr(float n);
247char* dtostr(double n);
248
249// thread safe
250char* itostr_ts(int n);
251char* ltostr_ts(long int n);
252char* ultostr_ts(long unsigned int n);
253char* lltostr_ts(long long int n);
254char* ulltostr_ts(long unsigned long int n);
255char* ftostr_ts(float n);
256char* dtostr_ts(double n);
257
258int count_lines(const char* buf);
259int hexstr2i(const char* str);
260
261long unsigned long int ntohull(long unsigned long int s);
262#define htonull(s) ntohull((s))
263
264void swap_byte(void* p, int s, int b);
265short swaps(unsigned short p);
266int swapl(unsigned int p);
267long long int swapd(long unsigned long int p);
268void reverse_str(uByte* p, int s);
269void upper_string(char* str);
270#define int_swap(p, s) {int swap=(p); (p)=(s); (s)=swap;}
271
272// 比較
273int bincmp(unsigned char* b1, unsigned char* b2, int n);
274int strnrvscmp(const char* s1, const char* s2, int n);
275int strncaservscmp(const char* s1, const char* s2, int n);
276char* strstrcase(const char* buf, const char* nd);
277
278// 拡張 len => 1 以上 一致させる長さ. 0 完全一致. -1 dat の長さに合わせる. -2 key の長さに合わせる
279int ex_strncmp(const char* s1, const char* s2, int n);
280int ex_strncasecmp(const char* s1, const char* s2, int n);
281int ex_strnrvscmp(const char* s1, const char* s2, int n);
282int ex_strncaservscmp(const char* s1, const char* s2, int n);
283#define ex_strcmp(a, b) ex_strncasecmp((a), (b), -1)
284
285// エンディアン (マクロ isBigEndianは ntohs() を使用したもの)
286int is_little_endian(void);
287int is_big_endian(void);
288void check_endian(void);
289
290double double_from_little_endian(void* ptr);
291float float_from_little_endian(void* ptr);
292int int_from_little_endian(void* ptr);
293unsigned int uint_from_little_endian(void* ptr);
294short short_from_little_endian(void* ptr);
295unsigned short ushort_from_little_endian(void* ptr);
296double double_from_big_endian(void* ptr);
297float float_from_big_endian(void* ptr);
298int int_from_big_endian(void* ptr);
299unsigned int uint_from_big_endian(void* ptr);
300short short_from_big_endian(void* ptr);
301unsigned short ushort_from_big_endian(void* ptr);
302
303// 時間
304//char* get_localtime(char c1, char c2, char c3, char c4); ///< 現時刻の文字列を返す.free() してはいけない.
305//char* get_localtime_ts(char c1, char c2, char c3, char c4); ///< 現時刻の文字列を返す.必ず free() すること!.
306char* get_local_timestamp(time_t date, const char* format);
307char* get_gmt_timestamp(time_t date, const char* format);
308
309// 入出力
310void print_escape(const char* format, char* mesg);
311void fdump(FILE* fp, unsigned char* mesg, int n);
312void print_16x(FILE* fp, unsigned char* mesg, int n);
313#define print_hex(o, m, n) fdump((o), (m), (n))
314
315// グラフィック
317
318// 漢字コード
319void kanji_convert(unsigned char* mesg);
320void kanji_convert_euc2sjis(unsigned char* mesg);
321void kanji_convert_sjis2euc(unsigned char* mesg);
322void euc2sjis(unsigned char *c1, unsigned char *c2);
323void sjis2euc(unsigned char *c1, unsigned char *c2);
324
325// ファイル
326int file_from_to(const char* s, const char* d, const char* mode);
327int fp_from_to(FILE* s, FILE* d, long int sz);
328char* get_file_name(const char* str);
329char* get_file_extension(const char* str);
330char* del_file_name(const char* str);
331char* del_file_extension(const char* str);
332
333//char* make_file_path(const char* str); ///< 使用停止,get_file_path を使え./// フルパスからパスを生成する.strは変化しない.要 free().
334char* get_file_path(const char* str);
335char* cut_file_extension(const char* str);
336
337long unsigned file_size(const char* fn);
338int file_exist(const char* fn);
339FILE* file_chmod_open(const char* fn, const char* fm, mode_t mode);
340char* temp_filename(const char*, int);
341
342unsigned char* read_file (const char* fname, long unsigned int* size);
343long unsigned int write_file(const char* fname, unsigned char* buf, long unsigned int size);
344
345int mkdirp(const char* path, mode_t mode);
346
347// 乱数
348void init_rand(void);
349char* randstr(int n);
350unsigned char* randbit(int n);
351#define random_str(n) temp_filename(NULL, (n))
352
353// Base64
354unsigned char* encode_base64(unsigned char* str, int sz);
355unsigned char* decode_base64(unsigned char* str, int* sz);
356unsigned char* encode_base64_filename(unsigned char* str, int sz, unsigned char cc);
357unsigned char* decode_base64_filename(unsigned char* str, int* sz, unsigned char cc);
358unsigned char* encode_urlenc(unsigned char* str, int sz);
359unsigned char* decode_urlenc(unsigned char* str, int* sz);
360unsigned char* encode_quoted_printable(unsigned char* str, int sz);
361unsigned char* decode_quoted_printable(unsigned char* str, int* sz);
362unsigned char* encode_hex(unsigned char cc);
363unsigned char decode_hex(unsigned char c1, unsigned char c2);
364
365// バイト型リングバッファー
366ringBuffer* new_ringBuffer(int sz);
369void del_ringBuffer (ringBuffer** pp);
370void free_ringBuffer (ringBuffer* pp);
372int put_ringBuffer(ringBuffer* rb, unsigned char* pp, int sz);
373unsigned char* get_ringBuffer(ringBuffer* rb, int sz);
374int seek_ringBuffer(ringBuffer* rb, int sz);
375unsigned char* ref_ringBuffer(ringBuffer* ring, int pos);
376
377
378// メッセージストリーム
379int put_mstream(mstream* sb, unsigned char* pp);
380unsigned char* get_mstream(mstream* sb);
381unsigned char* fgets_mstream(unsigned char* mesg, mstream* sb);
382
383#define init_mstream() init_ringBuffer()
384#define new_mstream(s) new_ringBuffer((s))
385#define make_mstream(s) make_ringBuffer((s))
386#define free_mstream(s) free_ringBuffer((s))
387#define del_mstream(s) del_ringBuffer((s))
388#define clear_mstream(s) clear_ringBuffer((s))
389
390// UUID
391unsigned char* uuid2guid(unsigned char* p);
392unsigned char* guid2uuid(unsigned char* p);
393
394
395#ifndef WIN32
396// プロセス
397long unsigned int get_used_memory(void);
398long unsigned int get_free_memory(void);
399
400void memory_check_start(void);
401long unsigned int memory_check(void);
402
403void set_sigterm_child(void (*handler)(int));
404void sigterm_child(int signal);
405
406void ignore_sigterm_child(void);
407
408void set_sigsegv_handler(void (*handler)(int));
409void trap_segmentation_falt(int signal);
410
411#define set_sigseg_handler(h) set_sigsegv_handler((h))
412
413#endif
414
415
417// マクロ関数
418
419#define copy_file(src, dst) file_from_to((src), (dst), "wb")
420#define cat_file(src, dst) file_from_to((src), (dst), "ab")
421
422#define isBigEndian (is_big_endian())
423#define isLittleEndian (is_little_endian())
424
425#define ntoh_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}
426#define hton_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}
427#define ntoh_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}
428#define hton_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}
429
430#define ntoh_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}
431#define hton_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}
432
433
434
435
437// ログファイル
438
439#ifdef WIN32
440 #define JBXL_LOG_FILE "\\jbxl.log"
441 #define JBXL_ERR_FILE "\\jbxl.err"
442#else
443 #define JBXL_LOG_FILE "/var/log/jbxl.log"
444 #define JBXL_ERR_FILE "/var/log/jbxl.err"
445#endif
446
447
448extern FILE* FP_LogFile;
449extern FILE* FP_ErrFile;
450
451void open_logfile (void);
452void close_logfile(void);
453void print_logfile(const char*, ...);
454
455void open_errfile (void);
456void close_errfile(void);
457void print_errfile(const char*, ...);
458
459
461// メッセージ関数
462
463void print_message(const char*, ...);
464void fprint_message(FILE*, const char*, ...);
465
466
467// 環境依存用の出力関数
468#ifdef WIN32
469 #define PRINT_MESG(...) {}
470 #define PRINT_ESC(...) {}
471 #define PRINT_INFO(...) {}
472 #define PRINT_WARN(...) {}
473 #define PRINT_ERROR(...) {}
474#else
475 #define PRINT_MESG print_message
476 #define PRINT_ESC print_escape
477 #define PRINT_INFO print_message
478 #define PRINT_WARN print_message
479 #define PRINT_ERROR print_message
480#endif
481
482
483
485// for Debug
486//
487
488#ifdef _DEBUG
489 #ifndef EBUG
490 #define EBUG
491 #endif
492#endif
493
494#ifdef EBUG
495 #ifndef _DEBUG
496 #define _DEBUG
497 #endif
498#endif
499
500
501//
502#define DEBUG_MODE if(DebugMode==ON)
503#define NO_DEBUG_MODE if(DebugMode==OFF)
504
505
507// コンパイル時設定デバッグ用
508// 不要になった場合(EBUGを指定しない場合),コードは削除される
509
510#ifdef EBUG // -DEBUG
511 #define DEBUG_INFO PRINT_INFO
512 #define DEBUG_WARN PRINT_WARN
513 #define DEBUG_ERROR PRINT_ERROR
514 #define DEBUG_MESG PRINT_MESG
515#else
516 #define DEBUG_INFO(...) {}
517 #define DEBUG_WARN(...) {}
518 #define DEBUG_ERROR(...) {}
519 #define DEBUG_MESG(...) {}
520#endif
521
522
523#endif // __JBXL_TOOLS_HEADER_
524
汎用共通ヘッダ
int sDWord
4Byte
Definition common.h:337
char sByte
1Byte
Definition common.h:333
unsigned short uWord
2Byte
Definition common.h:334
unsigned int uDWord
4Byte
Definition common.h:336
short sWord
2Byte
Definition common.h:335
unsigned char uByte
1Byte
Definition common.h:332
#define mode_t
Definition common.h:63
int y
Y 座標
Definition tools.h:173
int x
X 座標
Definition tools.h:172
int ysize
高さ
Definition tools.h:175
int xsize
Definition tools.h:174
int bufsz
バッファ部のサイズ
Definition tools.h:157
int datasz
保存されているデータの全体の長さ
Definition tools.h:160
int datano
格納されているデータの数(メッセージデータ用)
Definition tools.h:162
int state
リングバッファの状態
Definition tools.h:163
int npoint
次のメッセージのスタートポイント(メッセージデータ用)
Definition tools.h:161
unsigned char * buf
バッファ
Definition tools.h:156
int spoint
バッファデータの開始点
Definition tools.h:158
int epoint
バッファデータの終点+1 (データの追加点)
Definition tools.h:159
int isNull(void *p)
Definition tools.cpp:51
unsigned char * uuid2guid(unsigned char *p)
uuid を guid に変換する.要 free()
Definition tools.cpp:3628
unsigned int uint_from_little_endian(void *ptr)
Definition tools.cpp:210
int file_from_to(const char *s, const char *d, const char *mode)
modeに従って,ファイル sを dにコピーする.
Definition tools.cpp:1985
double double_from_big_endian(void *ptr)
Definition tools.cpp:264
unsigned char * get_mstream(mstream *sb)
メッセージ(文字列)ストリーム sb から次のメッセージを取り出す.改行コードは削除される.
Definition tools.cpp:3531
unsigned char * ref_ringBuffer(ringBuffer *ring, int pos)
spoint 地点から pos番目のデータへの参照.posは 0から数える.spoint は変化しない.
Definition tools.cpp:3454
int file_exist(const char *fn)
ファイルの存在を検査する.
Definition tools.cpp:2337
void print_errfile(const char *,...)
デフォルトのエラーファイルにデータを書き込む
Definition tools.cpp:4006
char * del_file_extension(const char *str)
フルパスを書き換えて拡張子を削除する.free() してはいけない.
Definition tools.cpp:2256
void sjis2euc(unsigned char *c1, unsigned char *c2)
SJIS -> EUC.
Definition tools.cpp:2716
unsigned short ushort_from_little_endian(void *ptr)
Definition tools.cpp:246
char * awk(char *str, char cc, int n)
ccを区切り記号として, strのバッファ内の n番目の項目を返す.要 free()
Definition tools.cpp:567
#define mstream
バイト型 メッセージストリーム
Definition tools.h:167
char * ultostr_ts(long unsigned int n)
long unsigned int を文字に変換する.要 free()
int strnrvscmp(const char *s1, const char *s2, int n)
文字列 s1と s2を後ろから n文字比較する.一致するなら 0
Definition tools.cpp:674
char * dup_str(char *buf)
文字列を複製する.要 free()
Definition tools.cpp:1368
void print_message(const char *,...)
バッファリングなしのメッセージ出力(stderr)
Definition tools.cpp:4054
unsigned char * encode_base64(unsigned char *str, int sz)
バイナリデータ bufを base64にエンコードする.要 free()
Definition tools.cpp:2848
FILE * file_chmod_open(const char *fn, const char *fm, mode_t mode)
ファイルの許可属性をmode へ変更した後,ファイルを fmモードでオープン
Definition tools.cpp:2366
long unsigned int UsedMemoryBase
メモリチェック用
Definition tools.cpp:23
char * ltostr_ts(long int n)
long int を文字に変換する.要 free()
Definition tools.cpp:1552
char * pack_char_len(char *pp, char cc, int len)
文字列の一部の先頭のcc(複数),終わりのcc(複数),CR, LF を削除.要 free()
Definition tools.cpp:1154
unsigned char decode_hex(unsigned char c1, unsigned char c2)
16進コードをキャラクタに変換する.O-9,A-F以外が指定された場合は0とみなす. 内容を書き換える.
Definition tools.cpp:3171
unsigned char * decode_urlenc(unsigned char *str, int *sz)
buf を URLエンコードからデコードする.要 free()
Definition tools.cpp:2932
int ex_strnrvscmp(const char *s1, const char *s2, int n)
文字列 s1とs2を後ろから拡張比較する.一致するなら TRUE
Definition tools.cpp:856
int ex_strncaservscmp(const char *s1, const char *s2, int n)
文字列 s1とs2を後ろから拡張比較する.一致するなら TRUE
Definition tools.cpp:892
void free_ringBuffer(ringBuffer *pp)
リングバッファを解放する.make_ringBuffer() と対.
Definition tools.cpp:3295
void close_errfile(void)
デフォルトのエラーファイルをクローズする
Definition tools.cpp:3990
char * ltostr(long int n)
long int を文字に変換する.free() は不要
Definition tools.cpp:1436
short short_from_big_endian(void *ptr)
Definition tools.cpp:336
void open_logfile(void)
デフォルトのログファイルをオープンする
Definition tools.cpp:3901
void open_errfile(void)
デフォルトのエラーファイルをオープンする
Definition tools.cpp:3976
void fprint_message(FILE *, const char *,...)
バッファリングなしのメッセージ出力
Definition tools.cpp:4088
int ex_strncmp(const char *s1, const char *s2, int n)
文字列 s1とs2を拡張比較する.一致するなら TRUE
Definition tools.cpp:784
int put_mstream(mstream *sb, unsigned char *pp)
メッセージ(文字列)ストリーム sb へメッセージ(の一部)を格納する
Definition tools.cpp:3490
unsigned char * guid2uuid(unsigned char *p)
guid を uuid に変換する.要 free()
Definition tools.cpp:3654
unsigned char LocalIPNum6[16]
::1 のバイナリ
Definition tools.cpp:27
long unsigned long int ntohull(long unsigned long int s)
Network形式からHost形式へ,64bit long unsigned long int データの変換
int bincmp(unsigned char *b1, unsigned char *b2, int n)
バイナリデータを n Byte比べる.一致するなら 0
Definition tools.cpp:650
unsigned char * encode_urlenc(unsigned char *str, int sz)
バイナリデータ bufを URLエンコードする.要 free()
Definition tools.cpp:2979
void kanji_convert_sjis2euc(unsigned char *mesg)
SJISをEUCに変換する.
Definition tools.cpp:2664
char * numbering_name(const char *fmt, int n)
フォーマット fmtに従って,nを含む文字列を作り出す.要 free()
Definition tools.cpp:2598
unsigned char * encode_base64_filename(unsigned char *str, int sz, unsigned char cc)
バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は cc として扱う.要 free()
Definition tools.cpp:2907
unsigned char * decode_base64(unsigned char *str, int *sz)
bufを base64からデコードする.要 free()
Definition tools.cpp:2786
long unsigned int write_file(const char *fname, unsigned char *buf, long unsigned int size)
ファイルにデータを書き込む
Definition tools.cpp:2497
ringBuffer init_ringBuffer(void)
リングバッファを初期化する.
Definition tools.cpp:3250
char * get_file_path(const char *str)
ファイル名を含むパスからパスのみを生成する.strは変化しない.要 free().
Definition tools.cpp:2191
char * get_line(char *buf, int n)
文字型データbufのバッファ内の n行目を取り出す.改行コードは削除される.要 free()
Definition tools.cpp:484
char * randstr(int n)
ランダムに A-Za-z0-9 までの文字を n文字生成する.
Definition tools.cpp:1777
int seek_ringBuffer(ringBuffer *rb, int sz)
リングバッファのデータポインタを seek する.
Definition tools.cpp:3423
int UnitTestMode
ユニット単体でのテストを行う場合に使用する.デフォルトは OFF.
Definition tools.cpp:18
float float_from_big_endian(void *ptr)
Definition tools.cpp:282
char * itostr_ts(int n)
int を文字に変換する.要 free()
Definition tools.cpp:1532
void close_logfile(void)
デフォルトのログファイルをクローズする
Definition tools.cpp:3915
int fp_from_to(FILE *s, FILE *d, long int sz)
ファイル sを dにコピーする.
Definition tools.cpp:2035
void swap_byte(void *p, int s, int b)
sの長さのpのバイト順序をbバイト毎に逆順にする.
Definition tools.cpp:1854
char * get_local_timestamp(time_t date, const char *format)
要 free()
Definition tools.cpp:440
int int_from_little_endian(void *ptr)
Definition tools.cpp:192
char * change_esc(char *pp)
文字列中の CR, LF を \r, \n に変換する.要 free()
Definition tools.cpp:1210
char * ulltostr_ts(long unsigned long int n)
long unsigned long int を文字に変換する.要 free()
unsigned char * encode_hex(unsigned char cc)
キャラクタを16進コードの文字列に変換する.要 free()
Definition tools.cpp:3138
char * pack_head_tail_char(char *pp, char cc)
文字の先頭のcc(複数),TAB, CR, LF.終わりのcc(複数),TAB, CR, LF を削除.要 free()
Definition tools.cpp:1092
int put_ringBuffer(ringBuffer *rb, unsigned char *pp, int sz)
リングバッファにデータを格納する.
Definition tools.cpp:3341
void init_rand(void)
/dev/urandom からデータで乱数の系列を初期化する
char * ftostr_ts(float n)
float を文字に変換する.要 free()
Definition tools.cpp:1632
ringBuffer make_ringBuffer(int sz)
バッファ部が存在するリングバッファを作り出す.
Definition tools.cpp:3270
char * itostr(int n)
int を文字に変換する.free() は不要
Definition tools.cpp:1420
void reverse_str(uByte *p, int s)
バイト(octet)列を逆順にする.
Definition tools.cpp:1952
unsigned char * read_file(const char *fname, long unsigned int *size)
ファイルからデータを読み込む
Definition tools.cpp:2460
char * ulltostr(long unsigned long int n)
long unsigned long int を文字に変換する.free() は不要
char * lltostr(long long int n)
long long int を文字に変換する.free() は不要
Definition tools.cpp:1468
char * lltostr_ts(long long int n)
long long int を文字に変換する.要 free()
Definition tools.cpp:1592
unsigned char * fgets_mstream(unsigned char *mesg, mstream *sb)
メッセージストリームからメッセージを一行だけ取り出す.
Definition tools.cpp:3591
unsigned char * randbit(int n)
ランダムに n bitのバイナリを生成する.
Definition tools.cpp:1804
char * strstrcase(const char *buf, const char *nd)
文字列 bufの中に文字列 ndがあるかどうかをチェックする.大文字小文字は区別しない.
Definition tools.cpp:736
void print_16x(FILE *fp, unsigned char *mesg, int n)
16進ダンプを吐き出す(1行)
Definition tools.cpp:4227
void del_ringBuffer(ringBuffer **pp)
リングバッファそのものを削除する.new_ringBuffer() と対.
Definition tools.cpp:3232
char * get_file_name(const char *str)
フルパスからファイル名へのポインタを取り出す.free() してはいけない.
Definition tools.cpp:2066
void fdump(FILE *fp, unsigned char *mesg, int n)
16進ダンプを吐き出す
Definition tools.cpp:4176
int int_from_big_endian(void *ptr)
Definition tools.cpp:300
char * cut_file_extension(const char *str)
拡張子を削除したフパス名を生成する.strは変化しない.要 free().
Definition tools.cpp:2282
char * cut_str(char *buf, int ls, int le)
buf[ls]〜buf[le] を切り出す.要 free()
Definition tools.cpp:1338
char * temp_filename(const char *, int)
/dev/urandom を利用して作業用ファイルのランダムなファイル名を得る.
Definition tools.cpp:2397
char * ftostr(float n)
float を文字に変換する.free() は不要
Definition tools.cpp:1500
char * skip_char_pair(char *pp, char pair, char end)
pair と end で閉じるまでポインタをスキップさせる.ただし クォーテーション内は完全スキップ
Definition tools.cpp:1022
long long int swapd(long unsigned long int p)
64bit pを8bitづつ逆順にする
int KanjiCode
処理用漢字コード.CODE_US, CODE_SJIS, CODE_EDUがある.デフォルトは CODE_US.
Definition tools.cpp:20
void kanji_convert(unsigned char *mesg)
大域変数 KnjiCodeに従って漢字コードを変換する.
Definition tools.cpp:2629
char * cawk(char *str, char cc, int n)
連続するccを区切り記号として, strのバッファ内の n番目の項目を返す.要 free()
Definition tools.cpp:609
int HostEndian
ホストの Endian
Definition tools.cpp:21
void upper_string(char *str)
Definition tools.cpp:2756
char * get_seq_data(char *buf, int *ptr)
文字型データbufのバッファ内の 行データをシーケンシャルに取り出す.
Definition tools.cpp:529
short swaps(unsigned short p)
16bit の上下8bitを入れ替える.
Definition tools.cpp:1872
char * double_bs(char *fn)
文字列中の \ を \\に置き換えた文字列を返す.要 free()
Definition tools.cpp:2564
int strncaservscmp(const char *s1, const char *s2, int n)
文字列 s1と s2を後ろから n文字比較する.大文字小文字は区別しない.一致するなら 0
Definition tools.cpp:703
unsigned char * encode_quoted_printable(unsigned char *str, int sz)
バイナリデータ bufを quoted printable にエンコードする.要 free()
Definition tools.cpp:3074
unsigned char LocalIPNum[4]
127.0.0.1 のバイナリ
Definition tools.cpp:26
char * get_gmt_timestamp(time_t date, const char *format)
要 free()
Definition tools.cpp:454
void euc2sjis(unsigned char *c1, unsigned char *c2)
EUC -> SJIS.
Definition tools.cpp:2687
int mkdirp(const char *path, mode_t mode)
mkdir -p path 相当.
Definition tools.cpp:2511
void print_escape(const char *format, char *mesg)
エスケープ文字を含むメッセージの出力(stderr)
Definition tools.cpp:4124
FILE * FP_ErrFile
Definition tools.cpp:3893
unsigned char * get_ringBuffer(ringBuffer *rb, int sz)
リングバッファからデータを得る.要 free()
Definition tools.cpp:3382
FILE * FP_LogFile
Definition tools.cpp:3892
int is_number(unsigned char *)
数字かどうか判定する(簡易版).整数(1) と小数点付き数字(2) のみ.
Definition tools.cpp:1394
void print_logfile(const char *,...)
デフォルトのログファイルにデータを書き込む
Definition tools.cpp:3931
char * skip_chars(char *pp, const char *check)
check[]中の何れかの文字までポインタをスキップさせる.ただし クォーテーション内は完全スキップ
Definition tools.cpp:948
void replace_char(unsigned char *buf, int len, unsigned char frm, unsigned char toc)
データbuf 中のバイトデータ frm を tocに変更する.
Definition tools.cpp:1252
void check_endian(void)
システムのエンディアンを判別して,大域変数 HostEndian に設定する
Definition tools.cpp:143
char * dtostr(double n)
double を文字に変換する.free() は不要
Definition tools.cpp:1516
char * get_graphic_extension(uWord tex)
Definition tools.cpp:4250
int count_lines(const char *buf)
文字列データの行数を数える.行頭が '\0'の場合も1行と数える.
Definition tools.cpp:1673
int is_big_endian(void)
エンディアンの動的チェック
Definition tools.cpp:114
int ex_strncasecmp(const char *s1, const char *s2, int n)
文字列 s1とs2を拡張比較する.大文字小文字を区別しない.一致するなら TRUE
Definition tools.cpp:820
short short_from_little_endian(void *ptr)
Definition tools.cpp:228
char * skip_char(char *pp, char cc)
cc の文字までポインタをスキップさせる.ただし クォーテーション内は完全スキップ
Definition tools.cpp:985
char * ultostr(long unsigned int n)
long unsigned int を文字に変換する.free() は不要
int is_little_endian(void)
エンディアンの動的チェック
Definition tools.cpp:80
void clear_ringBuffer(ringBuffer *pp)
リングバッファのデータを削除する.
Definition tools.cpp:3312
unsigned int uint_from_big_endian(void *ptr)
Definition tools.cpp:318
unsigned char * decode_base64_filename(unsigned char *str, int *sz, unsigned char cc)
bufを Base64で decodeしてバイナリデータを取り出す.ただし cc は '/' として扱う.要 free()
Definition tools.cpp:2887
void kanji_convert_euc2sjis(unsigned char *mesg)
EUCをSJISに変換する.
Definition tools.cpp:2644
char * get_file_extension(const char *str)
フルパスからファイル名の拡張子へのポインタを取り出す.free() してはいけない.
Definition tools.cpp:2225
ringBuffer * new_ringBuffer(int sz)
リングバッファを生成する.
Definition tools.cpp:3204
float float_from_little_endian(void *ptr)
Definition tools.cpp:174
char * del_file_name(const char *str)
フルパスを書き換えてファイル名部分を削除する.free() してはいけない.
Definition tools.cpp:2094
int DebugMode
ON の場合 ライブラリ全体がデバックモードであることを示す.デフォルトは OFF.
Definition tools.cpp:17
int swapl(unsigned int p)
32bit pを8bitづつ逆順にする
Definition tools.cpp:1896
char * dtostr_ts(double n)
double を文字に変換する.要 free()
Definition tools.cpp:1652
unsigned short ushort_from_big_endian(void *ptr)
Definition tools.cpp:354
unsigned char * decode_quoted_printable(unsigned char *str, int *sz)
buf を quoted printableからデコードする.要 free()
Definition tools.cpp:3029
long unsigned file_size(const char *fn)
ファイルの大きさを返す.
Definition tools.cpp:2309
int hexstr2i(const char *str)
16進の文字列を整数に変換する.
Definition tools.cpp:1706
double double_from_little_endian(void *ptr)
エンディアンによるデータ変換
Definition tools.cpp:156
char * chomp(char *str)
最初の改行コード以降を無効にする.
Definition tools.cpp:921
char * skip_string_end(char *pp)
次の文字列を一つスキップする.最期のクォーテーションの位置を返す.
Definition tools.cpp:1060
char * replace_str(char *buf, int len, const char *frm, const char *tos)
文字列 buf中の frmを tosに書き換えたものを返す.free() してはいけない.
Definition tools.cpp:1282
sWord * swordp
Definition tools.h:146
long int * lintp
Definition tools.h:134
long unsigned int * ulintp
Definition tools.h:135
uWord * uwordp
Definition tools.h:147
double * drealp
Definition tools.h:142
int * nintp
Definition tools.h:136
float * realp
Definition tools.h:143
short int * sintp
Definition tools.h:138
char * ncharp
Definition tools.h:140
sDWord * sdwordp
Definition tools.h:144
long long int * llintp
Definition tools.h:132
unsigned char * ucharp
Definition tools.h:141
unsigned short int * usintp
Definition tools.h:139
uDWord * udwordp
Definition tools.h:145
sByte * sbytep
Definition tools.h:148
long unsigned long int * ullintp
Definition tools.h:133
uByte * ubytep
Definition tools.h:149
unsigned int * uintp
Definition tools.h:137
unsigned int uint
Definition tools.h:115
float real
Definition tools.h:121
short int sint
Definition tools.h:116
uWord uword
Definition tools.h:125
long unsigned long int ullint
Definition tools.h:111
sDWord sdword
Definition tools.h:122
unsigned short int usint
Definition tools.h:117
char nchar
Definition tools.h:118
sByte sbyte
Definition tools.h:126
sWord sword
Definition tools.h:124
uDWord udword
Definition tools.h:123
double dreal
Definition tools.h:120
unsigned char uchar
Definition tools.h:119
long int lint
Definition tools.h:112
int nint
Definition tools.h:114
uByte ubyte
Definition tools.h:127
long unsigned int ulint
Definition tools.h:113
long long int llint
Definition tools.h:110