nejaka rozdelana prace
[svn/Cll1h/.git] / crl1.h
diff --git a/crl1.h b/crl1.h
index 9931b28df3a0956af98258ef4518df6b1492a7be..ab50c0db6fcea77b4ab47d1086737993619b4c6b 100644 (file)
--- a/crl1.h
+++ b/crl1.h
@@ -2,7 +2,7 @@
  /  C<<1 header file - C language style sheet - GNU C/ANSI C99 compliant 
 '----------------------------------------------------------------------- */
 /*
-   Copyright (c) 2004-2011 Michael xChaos Polak - x(at)n.cz
+   Copyright (c) 2004-2012 Michael xChaos Polak - x(at)n.cz
 
    The C<<1 header file is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -66,7 +66,7 @@ typedef unsigned char * buf; /* this will be always 8-bit usigned char *  */
 typedef FILE * file;
 typedef int bool;
 typedef char * str;
-#ifdef USE_MYSQL
+#ifdef USE_MYSQL     
 typedef MYSQL_ROW row;
 #endif
 extern  str NIL, EOL, OFS, IFS, LANG, errstr; /* used for: perror(errstr) */
@@ -82,13 +82,6 @@ unsigned RANDOM_SEED=0;
 #define then
 #define MAYBE (int)((long)(RANDOM_SEED?random():((RANDOM_SEED=(unsigned)time(NULL)),srandom(RANDOM_SEED),random()))%2)
 #define WHOKNOWS (int)(srandom((unsigned)time(NULL)),random()%2)
-#define for_samsara(MIND,SOUL) loop for_each(MIND,SOUL)
-//#define atob(EXPR) (word_in_stri(YES,(EXPR))?1:0)
-//#define _EXPORT_YES str YES="TRUE\nYES\nJA\nOUI\nDA\nANO\nY\n1";
-//#else
-#define atob(EXPR) (eqi((EXPR),YES)?TRUE:FALSE)
-#define _EXPORT_YES str YES="TRUE";
-#endif
 /* .----------------------------------------------------------------------.
   /  4. C<<1 almost 'then buddhist' section, updated 2008-02-02 xCh.
  '----------------------------------------------------------------------- */
@@ -99,7 +92,7 @@ unsigned RANDOM_SEED=0;
 #define FALSE 0
 #define PI 3.141592654
 #define WEIRDINT (1<<(sizeof(int)*8-1))
-#define btoa(EXPR) ((EXPR)?YES:"FALSE")
+#define btoa(EXPR) ((EXPR)?"TRUE":"FALSE")
 /* .----------------------------------------------------------------------.
   /  5. C<<1 data declaration and allocation, updated 2008-01-31 xCh.
  '----------------------------------------------------------------------- */
@@ -161,9 +154,44 @@ unsigned RANDOM_SEED=0;
 #define repeat(N) for(int _i=0,_j=(N); _i++<_j;)
 #define for_each(ONE_T,ONE,ALL_T,...) for(_init_##ONE_T##_##ALL_T(_head_##ONE_T##_##ALL_T(ONE,__VA_ARGS__));_test_##ONE_T##_##ALL_T(ONE,__VA_ARGS__) || _free_##ONE_T##_##ALL_T(ONE,__VA_ARGS__);_next_##ONE_T##_##ALL_T(ONE,__VA_ARGS__))
 #define count(ONE_T,ALL_T,...) _count_##ONE_T##_##ALL_T(__VA_ARGS__)
-
-
-
+#define manufacture(OUT_T,OUT,ONE_T,ONE,ALL_T,...) if(_start_##ONE_T##OUT_T##_(OUT,count(ONE_T,ALL_T,__VA_ARGS__))) for_each(ONE_T,ONE,ALL_T,__VA_ARGS__) if(_append_##ONE_T##OUT_T##_(ONE))
+#define _init_char_str(...) str _s=(__VA_ARGS__)
+#define _head_char_str(ONE,ALL) ONE=(ALL?*ALL:0),ALL
+#define _test_char_str(ONE,...) ONE
+#define _free_char_str(...) FALSE
+#define _next_char_str(ONE,...) ONE=*(++_s)
+#define _count_char_str(S) strlen(S)
+#define _init_str_str(...) str _s=(__VA_ARGS__)
+#define _head_str_str(ONE,ALL) ONE=_utf8_copy(ONE,ALL),ALL
+#define _test_str_str(ONE,...) *ONE
+#define _free_str_str(...) FALSE
+#define _next_str_str(ONE,...) ONE=_utf8_copy(ONE,(_s+=strlen(ONE)))
+#define _COUNT_STR_STR int _count_str_str(str S) { int l=0; str X=""; for_each(str,X,str,S){l++;} return l; }
+#define _init_void_array(...) int _i=(__VA_ARGS__)
+#define _head_void_array(ONE,ALL,LEN) ONE=*ALL,0
+#define _test_void_array(ONE,ALL,LEN) _i < LEN
+#define _free_void_array(...) FALSE
+#define _next_void_array(ONE,ALL,LEN) ONE=ALL[++_i]
+//_count_void_array not defined
+#define _init_str_array(...) int _i=(__VA_ARGS__)
+#define _head_str_array(ONE,ALL,LEN) ONE=(str)*ALL,0
+#define _test_str_array(ONE,ALL,LEN) _i < LEN
+#define _free_str_array(...) FALSE
+#define _next_str_array(ONE,ALL,LEN) ONE=(str)ALL[++_i]
+//_count_str_array not defined
+#define _init_str_file(ALL) file _f=fopen(ALL,"r")
+#define _head_str_file(ONE,ALL) ALL
+#define _test_str_file(ONE,...) (!feof(_f)&&(ONE=fget_str(_f)))
+#define _free_str_file(...) fclose(_f)
+#define _next_str_file(...)
+#define _COUNT_STR_FILE int _count_str_file(str F) { int l=0; str X; for_each(str,X,file,F){l++;} return l; }
+#define _init_str_stream(...) (__VA_ARGS__)
+#define _head_str_stream(ONE,ALL,LEN) (ONE=(str)get_buf(LEN)) && fgets(ONE,LEN,ALL) && strrchr(ONE,'\n') && (ONE[strlen(ONE)-1]=0)
+#define _test_str_stream(ONE,ALL,LEN) !feof(ALL)
+#define _free_str_stream(...) FALSE
+#define _next_str_stream(ONE,ALL,LEN) ((ONE=(str)get_buf(LEN)) && fgets(ONE,LEN,ALL) && strrchr(ONE,'\n') && (ONE[strlen(ONE)-1]=0))
+//_count_str_stream not defined
+#define _EXPORT_COUNTERS _COUNT_STR_STR _COUNT_STR_FILE
 /* .----------------------------------------------------------------------.
   /  8. C<<1 object oriented infrastructure, updated 2008-02-04
  '----------------------------------------------------------------------- */
@@ -219,6 +247,8 @@ unsigned RANDOM_SEED=0;
 #define _STRCMPI _DECLARE_STRCMPI { if(a && b) return strcasecmp(a,b); else return (int)(a-b); }
 #define _DECLARE_STRSTR str _crl1_str_str(str h, str n) 
 #define _STRSTR _DECLARE_STRSTR { if(h && n) return strstr(h,n); else return NULL; }
+#define _EXPORT_UTF8 str _utf8_copy(str dst, str src) { unsigned char I=*src; if(I > 0 && I < 192 && I != 168 && I != 184) { dst=(str)get_buf(2); dst[0]=src[0]; dst[1]=0; } else if(I >= 224) { dst=(str)get_buf(4);dst[0]=src[0]; dst[1]=src[1]; dst[2]=src[2]; dst[3]=0; } else if(I) { dst=(str)get_buf(3); dst[0]=src[0]; dst[1]=src[1]; dst[2]=0; } else { dst=src; } return dst; }
+
 // later... #define _WORDINSTR char *_crl1_wordinstr(char *a,char *b,int ign) { char *IFS=a; for(;a&&*a;a++) for(;*ifs||ifs=IFS;ifs++) if(*a=b);) for    return strcasestr(a,b); else return NULL; }
 extern  _DECLARE_PRINT;
 extern  _DECLARE_FPRINT;
@@ -379,9 +409,9 @@ obsolete
   /  98. We have have done our homework - now let's have some fun:          
  '----------------------------------------------------------------------- */
 #define _INIT_VARIABLES _EXPORT_GLOBALS _EXPORT_YES _EXPORT_STACKS _CGI_GLOBALS
-#define _IMPL_FUNCTIONS /*_MALLOC*/ _EXPORT_OUTS _EXPORT_ARGS _EXPORT_STRS
+#define _IMPLEMENT_FUNCTIONS /*_MALLOC*/ _EXPORT_OUTS _EXPORT_ARGS _EXPORT_STRS _EXPORT_COUNTERS _EXPORT_UTF8
 //#define _IMPL_INTERFACE //_SQL_IFC _CAKE_IFC _STD_IFC _X_IFC
-#define _IMPLEMENT_CRL1_LIBRARY _INIT_VARIABLES _IMPL_FUNCTIONS //_IMPL_INTERFACE
+#define _IMPLEMENT_CRL1_LIBRARY _INIT_VARIABLES _IMPLEMENT_FUNCTIONS //_IMPL_INTERFACE
 //this will be probably accomplished some other way...
 #ifndef DISABLE_LIBRARY_CRL1
 _IMPLEMENT_CRL1_LIBRARY
This page took 0.177476 seconds and 4 git commands to generate.