typedef int bool;
extern str NIL,EOL,OFS,IFS;
extern unsigned RANDOM_SEED;
-#define _EXPORT_GLOBALS str NIL="NULL", EOL="\n", OFS=" ", IFS=" \t\n"; unsigned RANDOM_SEED=0;
+#define _EXPORT_GLOBALS str NIL="(null)", EOL="\n", OFS=" ", IFS=" \t\n"; unsigned RANDOM_SEED=0;
/* .----------------------------------------------------------------------.
/ 1. C<<1 then buddhist section, updated 2008-02-04 xCh.
'----------------------------------------------------------------------- */
#define get_str(...) _cll1_get_str(__VA_ARGS__,NIL)
#define eq(A,B) (!_cll1_str_cmp(A,B))
#define eqi(A,B) (!_cll1_str_cmpi(A,B))
+//#define str_eq(A,B) eq(A,B) ?
+//#define str_eqi(A,B) eqi(A,B)
#define str_order(A,B) _cll1_str_coll(A,B)
#define str_ascii(A,B) _cll1_str_cmp(A,B)
#define str_len(...) _cll1__strlen(__VA_ARGS__,NIL)
#define str_in(A,B) _cll1_str_str(A,B)
-#define word_in_str(A,B) _cll1_wordinstr(A,B,0)
+#define word_in(A,B) _cll1_wordinstr(A,B,0)
#define print(...) _cll1_print(__VA_ARGS__,NIL)
#define fprint(...) _cll1_fprint(__VA_ARGS__,NIL)
#define file_print(...) _cll1_fprint(_F,__VA_ARGS__,NIL)
//to do: seek
//to do: store
#define count(NODE,HEAD,VAR) { _NEW(I,0) for(NODE=HEAD; NODE || ((VAR=_I),0) ; (NODE=NODE->__next)?(_I++):0 ); }
-#define order_by(K1,K2) (K1>K2)
-#define desc_order_by(K1,K2) (K1<K2)
-#define sort_by(K1,K2) (str_order(K1,K2)>0)
-#define desc_sort_by(K1,K2) (str_order(K1,K2)<0)
-#define ascii_by(K1,K2) (str_ascii(K1,K2)>0)
-#define desc_ascii_by(K1,K2) (str_ascii(K1,K2)<0)
-#define insert(NODE,HEAD,EXP,K) { if(HEAD) { void **_L=NULL, *H=HEAD; /* <-' */ for_search(HEAD,H,EXP(HEAD->K,NODE->K)) { if(_L) {*_L=NODE; NODE->__next=HEAD; } else push(NODE,H); break; } else _L=(void *)&(HEAD->__next); if(!HEAD)*_L=NODE; HEAD=H; } else if (NODE) { push(NODE,HEAD); HEAD->__next=NULL; } }
-#define sort(NODE,HEAD,EXP,K) { void *_NEXT; /* <-' */ NODE=HEAD; HEAD=NULL; do { _NEXT=NODE->__next; NODE->__next=NULL; insert(NODE,HEAD,EXP,K); NODE=_NEXT; } while(_NEXT); }
+#define order_by_int(K1,K2) (K1>K2)
+#define order_by_int_desc(K1,K2) (K1<K2)
+#define order_by_str(K1,K2) (str_order(K1,K2)>0)
+#define order_by_str_desc(K1,K2) (str_order(K1,K2)<0)
+#define order_by_ascii(K1,K2) (str_ascii(K1,K2)>0)
+#define order_by_ascii_desc(K1,K2) (str_ascii(K1,K2)<0)
+#define insert(NODE,HEAD,ORDERBY,KEY) { if(HEAD) { void **_L=NULL, *H=HEAD; /* <-' */ for_search(HEAD,H,ORDERBY(HEAD->KEY,NODE->KEY)) { if(_L) {*_L=NODE; NODE->__next=HEAD; } else push(NODE,H); break; } else _L=(void *)&(HEAD->__next); if(!HEAD)*_L=NODE; HEAD=H; } else if (NODE) { push(NODE,HEAD); HEAD->__next=NULL; } }
+#define sort(NODE,HEAD,ORDERBY,KEY) { void *_NEXT; /* <-' */ NODE=HEAD; HEAD=NULL; do { _NEXT=NODE->__next; NODE->__next=NULL; insert(NODE,HEAD,ORDERBY,KEY); NODE=_NEXT; } while(_NEXT); }
/* .----------------------------------------------------------------------.
/ 7. C<<1 builtin iterators and conditionals, updated 2008-01-26 xCh.
'----------------------------------------------------------------------- */
//#define _ASSERT(EXPR) assert(EXPR)
/* .----------------------------------------------------------------------.
- / 99. We have have done our homework - now let's have some fun:
+ / 98. We have have done our homework - now let's have some fun:
'----------------------------------------------------------------------- */
#define _INIT_VARIABLES _EXPORT_GLOBALS _EXPORT_YES _EXPORT_STACKS _SQL_GLOBALS _CGI_GLOBALS
#define _IMPL_FUNCTIONS _MALLOC _EXPORT_OUTS _EXPORT_ARGS _EXPORT_STRS
#define _IMPL_INTERFACE //_SQL_IFC _CAKE_IFC _STD_IFC _X_IFC
#define _IMPLEMENT_CLL1_LIBRARY _INIT_VARIABLES _IMPL_FUNCTIONS _IMPL_INTERFACE
+#define _PROGRAM _cll1_program
+#define _DECLARE_PROGRAM void _PROGRAM(int argc, char **argv)
+#define program _IMPLEMENT_CLL1_LIBRARY _DECLARE_PROGRAM; int main(int argc, char **argv) { setlocale(LC_ALL, ""); _PROGRAM(argc,argv); return 0; } _DECLARE_PROGRAM
#ifdef USE_PREPROCESSOR
#include "_include.c"
#endif
-
-#define program _IMPLEMENT_CLL1_LIBRARY void _program(int argc, char **argv); int main(int argc, char **argv) { setlocale(LC_ALL, ""); _program(argc,argv); return 0; } void _program(int argc, char **argv)
+/* .----------------------------------------------------------------------.
+ / 99. C<<1 is up and running. It's your turn now to show something new.
+ '----------------------------------------------------------------------- */
#endif