some unfinished work (from Thera island and later)
[svn/Cll1h/.git] / cll1.h
diff --git a/cll1.h b/cll1.h
index b8405b035f92a40664227b89636f770b61c0dfd5..1f4ddbf695ea70534dd3be656da80fd0460eb616 100644 (file)
--- a/cll1.h
+++ b/cll1.h
@@ -1,4 +1,4 @@
-   /* .----------------------------------------------------------------------.
+   /* .---------------------------------------------------------------------.
   /  C<<1 header file - C language style sheet - GNU C/ANSI C99 compliant 
  /  Cumbersome Extraction and Report Language - http://cll1h.arachne.cz/ 
 '---------------------------------------------------------------------- */
@@ -61,7 +61,7 @@ typedef FILE * file;
 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; void *_PTR;
 /* .----------------------------------------------------------------------.
   /  1. C<<1 then buddhist section, updated 2008-02-04 xCh.
  '----------------------------------------------------------------------- */
@@ -74,7 +74,7 @@ extern  unsigned RANDOM_SEED;
 //#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)?1:0)
+#define atob(EXPR) (eqi((EXPR),YES)?TRUE:FALSE)
 #define _EXPORT_YES str YES="TRUE";
 #endif
 /* .----------------------------------------------------------------------.
@@ -92,13 +92,10 @@ extern  unsigned RANDOM_SEED;
   /  4. C<<1 data declaration and allocation, updated 2008-01-31 xCh.
  '----------------------------------------------------------------------- */
 #define def_mem(TYPE) typedef struct  _##TYPE##_t * TYPE; struct  _##TYPE##_t 
-#define construct_mem(TYPE) TYPE _init_##TYPE(void) { create_mem(this,TYPE); /* <-' */ _init_##TYPE(this); return this; } _init_##TYPE(TYPE this)
 #define get_mem(...) _GET_MEM(__VA_ARGS__,NULL)
-#define init_mem(...)  _init_##_ARG1(__VA_ARGS__,)( _ARG2(__VA_ARGS__,,) - 0 )
-#define create_mem(ID,...) _ARG1(__VA_ARGS__,) ID=_GET_MEM(__VA_ARGS__,NULL)
-#define new_mem(ID,...) _ARG1(__VA_ARGS__,) ID=init_mem(__VA_ARGS__)
+#define Get_mem(ID,...) _ARG1(__VA_ARGS__,) ID=_GET_MEM(__VA_ARGS__,NULL)
 #define mem_len(TYPE) sizeof(struct  _##TYPE##_t)
-//#define mem_copy 
+//#define mem_copy
 #define list(TYPE) TYPE __next
 #define tree(TYPE) TYPE __next; TYPE __seek
 #define dict(TYPE) tree(TYPE); str __key
@@ -131,7 +128,7 @@ extern  unsigned RANDOM_SEED;
  '----------------------------------------------------------------------- */
 #define push(NODE,HEAD) ( NODE ? ((NODE->__next=HEAD),(HEAD=NODE)) : NULL )
 #define pop(NODE,HEAD) ( HEAD ? ((NODE=HEAD->__next),free(HEAD),(HEAD=NODE)) : (NODE=NULL) )
-#define append(NODE,HEAD) { void *N=NODE; /* <-' */ NODE->__next=NULL; for_search(NODE,HEAD,!NODE->__next) { NODE->__next=N; break; } }
+#define append(NODE,HEAD) { _PTR=NODE; NODE->__next=NULL; for_search(NODE,HEAD,!NODE->__next) { NODE->__next=_PTR; break; } }
 #define remove(NODE,HEAD,EXPR) { void **_D=NULL; /* <-' */ for_search(NODE,HEAD,EXPR) { if(_D)*_D=NODE->__next; else HEAD=NODE->__next; free(NODE); } else _D=(void *)&(NODE->__next); }
 #define drop(NODE,HEAD) for( NODE=HEAD; NODE || (HEAD=NULL); HEAD=NODE, NODE=NODE->__next, free(HEAD) )
 //to do: seek
@@ -176,19 +173,17 @@ extern  unsigned RANDOM_SEED;
 /* .----------------------------------------------------------------------.
   /  8. C<<1 object oriented infrastructure, updated 2008-02-04
  '----------------------------------------------------------------------- */
-/* too non-C: #define I_must_be(TYPE) TYPE self, void  *_method * */
-#define member_of(TYPE) TYPE _we
-#define anonymous void *_we
-#define I_am(TYPE) TYPE self=(TYPE)_we
-#define def_community(METATYPE,ITYPE) def_mem(METATYPE) { ITYPE __interface; };
-#define def_method(RET,NAME,...) RET (*NAME)(__VA_ARGS__)
-#define construct_interface(MTYPE,ITYPE) ITYPE _init,_##MTYPE##ITYPE(void *dummy, ...) { new_mem(_FACE,ITYPE); va_list(ap);  _##MTYPE##ITYPE##_init(_FACE); return _FACE; } void _##MTYPE##ITYPE##_init(IFACE _FACE)
-#define bind_method(METHOD,FUNCTION) _FACE->METHOD=FUNCTION
-#define new_interface(ID,MTYPE,...) _ARG1(__VA_ARGS__,) ID=_init_##MTYPE##_ARG1(__VA_ARGS__,) ((void *)init_##MTYPE##__VA_ARGS__,)
-#define init_interface(TYPE,...)
-#define construct_object(MTYPE,...) (void *)_init_##TYPE##_()
-#define init_object(TYPE,...) (TYPE)_init_##TYPE##_(__VA_ARGS__)
-#define init_polymorph(TYPE,COMMUNITY,...) (COMMUNITY)_init_##TYPE##_(__VA_ARGS__)
+#define def_type(TYPE) typedef struct  _##TYPE##_t * TYPE; 
+#define def_obj(TYPE) struct  _##TYPE##_t 
+#define construct_obj(MEM,INTERFACE) MEM _init_##MEM##_##INTERFACE(INTERFACE i) { Get_mem(o,MEM); o->__interface=i; return o; }
+#define anonymous void *
+#define I_am(MEM) MEM self=(MEM)community
+#define def_community(TYPE,INTERFACE) def_mem(TYPE) { INTERFACE __interface; };
+#define method(NAME) (*NAME)
+#define get_obj(MEM,INTERFACE,INIT) _init_##MEM##_##INTERFACE(INIT)
+#define Get_obj(ID,MEM,INTERFACE) MEM ID=get_obj(MEM,INTERFACE)
+#define get_obj_as(COMMUNITY,MEM,INTERFACE) (COMMUNITY)((_PTR=get_mem(MEM),(_PTR?((MEM)_PTR)->__interface=INTERFACE:0),_PTR))
+#define Get_obj_as(ID,COMMUNITY,MEM,INTERFACE)
 #define _(METHOD,...) ( _ASSERT(ARG1(__VA_ARGS__,)), (*( ARG1(__VA_ARGS__,)->__interface->METHOD )) ( __VA_ARGS__ ) )
 #define __(METHOD,...) ( _ASSERT(ARG1(__VA_ARGS__,)), (*( __cll1_seekmethod(ARG1(__VA_ARGS__,)->__interface,METHOD) )) ( __VA_ARGS__ ) )
 #define call(OBJTYPE,METHOD,...) { int _N=0; OBJTYPE _OBJ; /* <-' */ while( (_OBJ=(OBJTYPE)_cll1_for_ptrs(_N++,__VA_ARGS__,NIL))!=(struct OBJTYPE *)NIL ) _(_OBJ,METHOD); }
@@ -259,7 +254,7 @@ typedef _CTXAtom * context;
 #ifdef USE_MODULE_CGI
 #define cgi(MIME) { char *PTR; /* <-' */ recycle_context(_CGI); _CGIdict=NULL; for_split_str(PTR,getenv("QUERY_STRING"),'&')   /* _init_cgi */ if(MIME) printf("Content-type: %s\r\n\r\n",MIME); }
 #define _GETCGI char *getcgi(VAR) {     }
-#define _CGI_GLOBALS def_context(_CGI); struct _CGIVariable { char *V; dictionary(_CGIVariable); } *_CGIvariable,*_CGIdict;
+#define _CGI_GLOBALS def_context(_CGI); struct _CGIVariable { char *V; dict(_CGIVariable); } *_CGIvariable,*_CGIdict;
 #else
 #define _GETCGI
 #define _CGI_GLOBALS
This page took 0.137737 seconds and 4 git commands to generate.