- /* .----------------------------------------------------------------------.
+ /* .---------------------------------------------------------------------.
/ C<<1 header file - C language style sheet - GNU C/ANSI C99 compliant
/ Cumbersome Extraction and Report Language - http://cll1h.arachne.cz/
'---------------------------------------------------------------------- */
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.
'----------------------------------------------------------------------- */
//#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
/* .----------------------------------------------------------------------.
/ 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
'----------------------------------------------------------------------- */
#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
/* .----------------------------------------------------------------------.
/ 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); }
#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