00001 
00002 #ifndef  __JBXL_TOOLS_HEADER_
00003 #define  __JBXL_TOOLS_HEADER_
00004 
00005 
00014 #include "common.h"
00015 #include <sys/types.h>
00016 #include <sys/stat.h>
00017 #include <stdarg.h>
00018 #include <ctype.h>
00019 
00020 
00021 #ifdef WIN32
00022     #include <winsock2.h>        
00023     #ifndef HAVE_TIME_H
00024         #define  HAVE_TIME_H
00025     #endif
00026 #else
00027     #include <unistd.h>    
00028     #include <sys/sysinfo.h>
00029 #endif
00030 
00031 
00032 #ifdef HAVE_ARPA_INET_H
00033     #include <arpa/inet.h>
00034 #endif
00035 
00036 #ifdef TIME_WITH_SYS_TIME
00037     #include <time.h>
00038     #include <sys/time.h>
00039 #else
00040     #ifdef HAVE_TIME_H 
00041         #include <time.h>
00042     #endif 
00043     #ifdef HAVE_SYS_TIME_H 
00044         #include <sys/time.h>
00045     #endif 
00046 #endif
00047 
00048 #ifdef HAVE_SYS_PARAM_H 
00049     #include <sys/param.h>
00050 #endif
00051 
00052 #ifdef HAVE_SYSLOG_H
00053     #include <syslog.h>
00054 #endif
00055 
00056 #ifdef HAVE_WAIT_H 
00057     #include <wait.h>
00058 #endif
00059 #ifdef HAVE_SYS_WAIT_H 
00060     #include <sys/wait.h>
00061 #endif
00062 
00063 #ifdef HAVE_SYS_ERRNO_H 
00064     #include <sys/errno.h>
00065 #else
00066     #include <errno.h>
00067 #endif
00068 #include <signal.h>
00069 
00070 
00071 #ifndef HUGE_VALF
00072 #ifdef HUGE_VAL
00073 #define HUGE_VALF ((double)HUGE_VAL)
00074 #endif
00075 #endif
00076 
00077 
00078 
00079 
00080 
00081 #define  CHAR_CR            0x0d        
00082 #define  CHAR_LF            0x0a        
00083 #define  CHAR_TAB           0x09        
00084 
00085 #define  CODE_US            0
00086 #define  CODE_EN            0
00087 #define  CODE_EUC           1           //  
00088 #define  CODE_SJIS          2           //  
00089 #define  CODE_UTF8          3           //  
00090 
00091 
00092 #define UNKNOWN_ENDIAN      0
00093 
00094 #ifndef LITTLE_ENDIAN
00095   #define  LITTLE_ENDIAN    1234
00096   #define  BIG_ENDIAN       4321
00097   #define  PDP_ENDIAN       3412
00098 #endif
00099 
00100 
00101 
00102 typedef union _union_val {
00103     long long int            llint;
00104     unsigned long long int   ullint;
00105     long int                 lint;
00106     unsigned long int        ulint;
00107     int                      nint;
00108     unsigned int             uint;
00109     short int                sint;
00110     unsigned short int       usint;
00111     char                     nchar;
00112     unsigned char            uchar;
00113     double                   dreal;
00114     float                    real;
00115     sDWord                   sdword;
00116     uDWord                   udword;
00117     sWord                    sword;
00118     uWord                    uword;
00119     sByte                    sbyte;
00120     uByte                    ubyte;
00121 } unionVal;
00122     
00123 
00124 typedef union _union_ptr {
00125     long long int*           llintp;
00126     unsigned long long int*  ullintp;
00127     long int*                lintp;
00128     unsigned long int*       ulintp;
00129     int*                     nintp;
00130     unsigned int*            uintp;
00131     short int*               sintp;
00132     unsigned short int*      usintp;
00133     char*                    ncharp;
00134     unsigned char*           ucharp;
00135     double*                  drealp;
00136     float*                   realp;
00137     sDWord*                  sdwordp;
00138     uDWord*                  udwordp;
00139     sWord*                   swordp;
00140     uWord*                   uwordp;
00141     sByte*                   sbytep;
00142     uByte*                   ubytep;
00143 } unionPtr;
00144     
00145 
00146 
00147 
00148 typedef  struct _ringBuffer {
00149     unsigned char* buf;         
00150     int   bufsz;                
00151     int   spoint;               
00152     int   epoint;               
00153     int   datasz;               
00154     int   npoint;               
00155     int   datano;               
00156     int   state;                
00157 } ringBuffer;
00158 
00159 
00160 #define  mstream   ringBuffer   
00161 
00162 
00163 
00164 typedef  struct _rectangle {
00165     int   x;                    
00166     int   y;                    
00167     int   xsize;                
00168     int   ysize;                
00169 } rectAngle;
00170 
00171 
00172 
00173 
00174 
00175 extern int   DebugMode;         
00176 extern int   UnitTestMode;      
00177 
00178 extern int   KanjiCode;         
00179 extern int   HostEndian;        
00180 
00181 extern unsigned char  LocalIPNum[4];     
00182 extern unsigned char  LocalIPNum6[16];   
00183 
00184 #define  LOCAL_IPv4     "127.0.0.1"
00185 #define  LOCAL_IPv6     "::1"
00186 #define  LOCAL_IPADDR   LOCAL_IPv4
00187 #define  LOCAL_IPADDR6  LOCAL_IPv6
00188 
00189 
00190 
00191 #ifndef CPLUSPLUS
00192     int  isNull(void* p);
00193     #define freeNull(p)     {if(!isNull((void*)p)) free(p); (p)=NULL;}
00194     #define freenull(p)     {if(!isNull((void*)p)) free(p); (p)=NULL;}
00195 #endif
00196 
00197 #define free_null(p)   freeNull((p))
00198 
00199 #define _tochar(a)   (char*)(a)
00200 
00201 
00202 
00204 
00205 
00206 char*   get_line(char* buf, int n);                              
00207 char*   get_seq_data(char* buf, int* ptr);                       
00208 char*   awk (char* str, char cc, int n);                         
00209 char*   cawk(char* str, char cc, int n);                         
00210 
00211 char*   replace_str(char* buf, int len, const char* frm, const char* tos);    
00212 char*   cut_str(char* buf, int ls, int le);                      
00213 char*   dup_str(char* buf);                                      
00214 #define dup_string(s) dup_str((s))                               
00215 
00216 char*   skip_chars(char* pp, const char* check);                 
00217 char*   skip_char(char* pp, char cc);                            
00218 char*   skip_char_pair(char* pp, char pair, char end);           
00219 char*   skip_string_end(char* pp);                               
00220 
00221 char*   pack_char_len(char* pp, char cc, int len);               
00222 char*   pack_head_tail_char(char* pp, char cc);                  
00223 char*   change_esc(char* pp);                                    
00224 char*   chomp(char* str);                                        
00225 char*   double_bs(char* fn);                                     
00226 char*   numbering_name(const char* fmt, int n);                  
00227 #define pack_char(s, c)   pack_char_len((s), (c), -1)            
00228 
00229 
00230 char*   itostr(int n);                                           
00231 char*   ltostr(long int n);                                      
00232 char*   ultostr(unsigned long int n);                            
00233 char*   lltostr(long long int n);                                
00234 char*   ulltostr(unsigned long long int n);                      
00235 char*   ftostr(float n);                                         
00236 char*   dtostr(double n);                                        
00237 
00238 
00239 char*   itostr_ts(int n);                                        
00240 char*   ltostr_ts(long int n);                                   
00241 char*   ultostr_ts(unsigned long int n);                         
00242 char*   lltostr_ts(long long int n);                             
00243 char*   ulltostr_ts(unsigned long long int n);                   
00244 char*   ftostr_ts(float n);                                      
00245 char*   dtostr_ts(double n);                                     
00246 
00247 int     count_lines(const char* buf);                            
00248 int     hexstr2i(const char* str);                               
00249     
00250 unsigned long long int ntohull(unsigned long long int s);        
00251 #define htonull(s)    ntohull((s))                               
00252 
00253 void    swap_byte(void* p, int s, int b);                        
00254 short   swaps(unsigned short p);                                 
00255 int     swapl(unsigned int   p);                                 
00256 void    reverse_str(uByte* p, int s);                            
00257 void    upper_string(char* str);
00258 #define int_swap(p, s)     {int swap=(p); (p)=(s); (s)=swap;}    
00259 
00260 
00261 int     bincmp(unsigned char* b1, unsigned char* b2, int n);     
00262 int     strnrvscmp(const char* s1, const char* s2, int n);       
00263 int     strncaservscmp(const char* s1, const char* s2, int n);   
00264 char*   strstrcase(const char* buf, const char* nd);             
00265 
00266 
00267 int     ex_strncmp(const char* s1, const char* s2, int n);       
00268 int     ex_strncasecmp(const char* s1, const char* s2, int n);   
00269 int     ex_strnrvscmp(const char* s1, const char* s2, int n);    
00270 int     ex_strncaservscmp(const char* s1, const char* s2, int n);
00271 #define ex_strcmp(a, b)    ex_strncasecmp((a), (b), -1)          
00272 
00273 
00274 int     is_little_endian(void);                                  
00275 int     is_big_endian(void);                                     
00276 void    check_endian(void);                                      
00277 
00278 double           double_from_little_endian(void* ptr);           
00279 float            float_from_little_endian(void* ptr);
00280 int              int_from_little_endian(void* ptr);
00281 unsigned int     uint_from_little_endian(void* ptr);
00282 short            short_from_little_endian(void* ptr);
00283 unsigned short   ushort_from_little_endian(void* ptr);
00284 double           double_from_big_endian(void* ptr);
00285 float            float_from_big_endian(void* ptr);
00286 int              int_from_big_endian(void* ptr);
00287 unsigned int     uint_from_big_endian(void* ptr);
00288 short            short_from_big_endian(void* ptr);
00289 unsigned short   ushort_from_big_endian(void* ptr);
00290 
00291 
00292 
00293 
00294 char*   get_local_timestamp(time_t date, const char* format);           
00295 char*   get_gmt_timestamp(time_t date, const char* format);             
00296 
00297 
00298 void    print_escape(const char* format, char* mesg);                   
00299 void    fdump(FILE* fp, unsigned char* mesg, int n);                    
00300 void    print_16x(FILE* fp, unsigned char* mesg, int n);                
00301 
00302 
00303 void    kanji_convert(unsigned char* mesg);                             
00304 void    kanji_convert_euc2sjis(unsigned char* mesg);                    
00305 void    kanji_convert_sjis2euc(unsigned char* mesg);                    
00306 void    euc2sjis(unsigned char *c1, unsigned char *c2);                 
00307 void    sjis2euc(unsigned char *c1, unsigned char *c2);                 
00308 
00309 
00310 int     file_from_to(const char* s, const char* d, const char* mode);   
00311 int     fp_from_to(FILE* s, FILE* d, long int sz);                      
00312 char*   get_file_name(const char* str);                                 
00313 char*   get_file_extension(const char* str);                            
00314 char*   del_file_name(const char* str);                                 
00315 char*   del_file_extension(const char* str);                            
00316 
00317 
00318 char*   get_file_path(const char* str);                                 
00319 char*   cut_file_extension(const char* str);                            
00320 
00321 unsigned long   file_size(const char* fn);                              
00322 int             file_exist(const char* fn);                             
00323 FILE*           file_chmod_open(const char* fn, const char* fm, mode_t mode); 
00324 char*           temp_filename(const char*, int);                        
00325 
00326 unsigned char*  read_file (const char* fname, unsigned long int* size);                     
00327 long int        write_file(const char* fname, unsigned char* buf, unsigned long int size);  
00328 
00329 
00330 void    init_rand(void);                                                
00331 char*   randstr(int n);                                                 
00332 unsigned char* randbit(int n);                                          
00333 #define random_str(n)   temp_filename(NULL, (n))                        
00334 
00335 
00336 unsigned char*  encode_base64(unsigned char* str, int  sz);             
00337 unsigned char*  decode_base64(unsigned char* str, int* sz);             
00338 unsigned char*  encode_base64_filename(unsigned char* str, int  sz);    
00339 unsigned char*  decode_base64_filename(unsigned char* str, int* sz);    
00340 unsigned char*  encode_urlenc(unsigned char* str, int  sz);             
00341 unsigned char*  decode_urlenc(unsigned char* str, int* sz);             
00342 unsigned char*  encode_quoted_printable(unsigned char* str, int  sz);   
00343 unsigned char*  decode_quoted_printable(unsigned char* str, int* sz);   
00344 unsigned char*  encode_hex(unsigned char cc);                           
00345 unsigned char   decode_hex(unsigned char c1, unsigned char c2);         
00346 
00347 
00348 ringBuffer*     new_ringBuffer(int sz);                                 
00349 ringBuffer      init_ringBuffer(void);                                  
00350 ringBuffer      make_ringBuffer(int sz);                                
00351 void            del_ringBuffer  (ringBuffer** pp);                      
00352 void            free_ringBuffer (ringBuffer* pp);                       
00353 void            clear_ringBuffer(ringBuffer* pp);                       
00354 int             put_ringBuffer(ringBuffer* rb, unsigned char* pp, int sz);  
00355 unsigned char*  get_ringBuffer(ringBuffer* rb, int sz);                 
00356 int             seek_ringBuffer(ringBuffer* rb, int sz);                
00357 unsigned char*  ref_ringBuffer(ringBuffer* ring, int pos);              
00358 
00359 
00360 
00361 int             put_mstream(mstream* sb, unsigned char* pp);            
00362 unsigned char*  get_mstream(mstream* sb);                               
00363 unsigned char*  fgets_mstream(unsigned char* mesg, mstream* sb);        
00364 
00365 #define  init_mstream()       init_ringBuffer()         
00366 #define  new_mstream(s)       new_ringBuffer((s))       
00367 #define  make_mstream(s)      make_ringBuffer((s))      
00368 #define  free_mstream(s)      free_ringBuffer((s))      
00369 #define  del_mstream(s)       del_ringBuffer((s))       
00370 #define  clear_mstream(s)     clear_ringBuffer((s))     
00371 
00372 
00373 unsigned char*  uuid2guid(unsigned char* p);            
00374 unsigned char*  guid2uuid(unsigned char* p);            
00375 
00376 
00377 #ifndef WIN32
00378 
00379 unsigned long int get_used_memory(void);                
00380 unsigned long int get_free_memory(void);                
00381 
00382 void    set_sigterm_child(void (*handler)(int));        
00383 void    sigterm_child(int signal);                      
00384 
00385 void    ignore_sigterm_child(void);                     
00386 
00387 void    set_sigsegv_handler(void (*handler)(int));      
00388 void    trap_segmentation_falt(int signal);             
00389 
00390 #define set_sigseg_handler(h)  set_sigsegv_handler((h)) 
00391 
00392 #endif
00393 
00394 
00396 
00397 
00398 #define copy_file(src, dst)  file_from_to((src), (dst), "wb")    
00399 #define cat_file(src, dst)   file_from_to((src), (dst), "ab")    
00400 
00401 #define  isBigEndian    (is_big_endian())
00402 #define  isLittleEndian (is_little_endian())
00403 
00404 #define  ntoh_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}    
00405 #define  hton_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}    
00406 #define  ntoh_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}    
00407 #define  hton_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}    
00408 
00409 #define  ntoh_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}        
00410 #define  hton_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}        
00411 
00412 
00414 
00415 
00416 #ifdef WIN32
00417     #define  JBXL_LOG_FILE   "\\jbxl.log"           
00418     #define  JBXL_ERR_FILE   "\\jbxl.err"           
00419 #else
00420     #define  JBXL_LOG_FILE   "/var/log/jbxl.log"    
00421     #define  JBXL_ERR_FILE   "/var/log/jbxl.err"    
00422 #endif
00423 
00424 
00425 extern  FILE*  FP_LogFile;
00426 extern  FILE*  FP_ErrFile;
00427 
00428 void    open_logfile (void);                
00429 void    close_logfile(void);                
00430 void    print_logfile(const char*, ...);    
00431 
00432 void    open_errfile (void);                
00433 void    close_errfile(void);                
00434 void    print_errfile(const char*, ...);    
00435 
00436 
00438 
00439 
00440 void     print_message(const char*, ...);                   
00441 void    fprint_message(FILE*, const char*, ...);            
00442 
00443 
00444 
00445 #ifdef WIN32
00446     #define  PRINT_MESG(...)    {}                          
00447     #define  PRINT_ESC(...)     {}                          
00448     #define  PRINT_INFO(...)    {}                          
00449     #define  PRINT_WARN(...)    {}                          
00450     #define  PRINT_ERROR(...)   {}                          
00451 #else 
00452     #define  PRINT_MESG         print_message               
00453     #define  PRINT_ESC          print_escape                
00454     #define  PRINT_INFO         print_message               
00455     #define  PRINT_WARN         print_message               
00456     #define  PRINT_ERROR        print_message               
00457 #endif
00458 
00459 
00460 
00461 
00463 
00464 
00465 
00466 #ifdef _DEBUG
00467     #ifndef EBUG
00468         #define EBUG
00469     #endif
00470 #endif
00471 
00472 #ifdef EBUG
00473     #ifndef _DEBUG
00474         #define _DEBUG
00475     #endif
00476 #endif
00477 
00478 
00479 
00480 #define  DEBUG_MODE     if(DebugMode==ON)
00481 #define  NO_DEBUG_MODE  if(DebugMode==OFF)
00482 
00483 
00485 
00486 
00487 
00488 #ifdef  EBUG     // -DEBUG
00489     #define  DEBUG_INFO         PRINT_INFO      
00490     #define  DEBUG_WARN         PRINT_WARN      
00491     #define  DEBUG_ERROR        PRINT_ERROR     
00492     #define  DEBUG_MESG         PRINT_MESG      
00493 #else  
00494     #define  DEBUG_INFO(...)    {}              
00495     #define  DEBUG_WARN(...)    {}              
00496     #define  DEBUG_ERROR(...)   {}              
00497     #define  DEBUG_MESG(...)    {}              
00498 #endif
00499 
00500 
00501 #endif  // __JBXL_TOOLS_HEADER_
00502