1 #ifndef KEYWORD_MACRO_H_FILE_INCLUDED
2 #define KEYWORD_MACRO_H_FILE_INCLUDED
3 
4 
5 #define ASCF_DEFINE_MODULE_FLAG_XREF(module,keyword,struct_type) \
6 	{module##_##keyword,module##_##keyword##_ID,0,offsetof(struct_type,flags),offsetof(struct_type,set_flags)}
7 #define ASCF_DEFINE_MODULE_ONOFF_FLAG_XREF(module,keyword,struct_type) \
8 	{module##_##keyword,module##_##keyword##_ID,module##_No##keyword##_ID,offsetof(struct_type,flags),offsetof(struct_type,set_flags)}
9 
10 
11 #define ASCF_DEFINE_KEYWORD(module,flags,keyword,type,subsyntax) \
12 	{(flags),#keyword,sizeof(#keyword)-1,type,module##_##keyword##_ID,subsyntax,0,0,0}
13 
14 #define ASCF_DEFINE_KEYWORD_S(module,flags,keyword,type,subsyntax,struct_type) \
15 	{(flags),#keyword,sizeof(#keyword)-1,type,module##_##keyword##_ID,subsyntax,offsetof(struct_type,keyword),module##_##keyword,0}
16 
17 #define ASCF_DEFINE_KEYWORD_SA(module,flags,keyword,type,subsyntax,struct_type,alias_for) \
18 	{(flags),#keyword,sizeof(#keyword)-1,type,module##_##keyword##_ID,subsyntax,offsetof(struct_type,alias_for),module##_##alias_for,0}
19 
20 #define ASCF_DEFINE_KEYWORD_SF(module,flags,keyword,type,subsyntax,struct_type,flags_on,flags_off) \
21 	{(flags),#keyword,sizeof(#keyword)-1,type,module##_##keyword##_ID,subsyntax,offsetof(struct_type,keyword),flags_on,flags_off}
22 
23 #define ASCF_DEFINE_KEYWORD_F(module,flags,keyword,subsyntax,flags_on,flags_off) \
24 	{(flags),#keyword,sizeof(#keyword)-1,TT_FLAG,module##_##keyword##_ID,subsyntax,0,flags_on,flags_off}
25 
26 
27 #define ASCF_PRINT_FLAG_KEYWORD(stream,module,__config,keyword) \
28 	do{ if(get_flags((__config)->set_flags,module##_##keyword) ) \
29 			fprintf (stream, #module "." #keyword " = %s;\n",get_flags((__config)->flags,module##_##keyword)? "On" : "Off");}while(0)
30 
31 #define ASCF_PRINT_FLAGS_KEYWORD(stream,module,__config,keyword) \
32 	do{ if(get_flags((__config)->set_flags,module##_##keyword) ) fprintf (stream, "%s : " #module "." #keyword " = 0x%lX;\n", MyName, (__config)->keyword); }while(0)
33 
34 #define ASCF_PRINT_GEOMETRY_KEYWORD(stream,module,__config,keyword) \
35 	do{ if(get_flags((__config)->set_flags,module##_##keyword) )	\
36 		{ 	fprintf (stream, #module "." #keyword " = "); \
37 			if(get_flags((__config)->keyword.flags,WidthValue))	fprintf (stream, "%u",(__config)->keyword.width); \
38 			fputc( 'x', stream ); \
39 			if(get_flags((__config)->keyword.flags,HeightValue))	fprintf (stream, "%u",(__config)->keyword.height); \
40 			if(get_flags((__config)->keyword.flags,XValue))	fprintf (stream, "%+d",(__config)->keyword.x); \
41 			else if(get_flags((__config)->keyword.flags,YValue)) fputc ('+',stream);	\
42 			if(get_flags((__config)->keyword.flags,XValue))	fprintf (stream, "%+d",(__config)->keyword.y); \
43 			fputc( ';', stream ); fputc( '\n', stream ); \
44 		}}while(0)
45 
46 #define ASCF_PRINT_SIZE_KEYWORD(stream,module,__config,keyword) \
47 	do{ if(get_flags((__config)->set_flags,module##_##keyword) )	\
48 			fprintf (stream, #module "." #keyword " = %ux%u;\n",(__config)->keyword.width,(__config)->keyword.height); }while(0)
49 
50 #define ASCF_PRINT_INT_KEYWORD(stream,module,__config,keyword) \
51 	do{ if(get_flags((__config)->set_flags,module##_##keyword) ) fprintf (stream, #module "." #keyword " = %d;\n",(__config)->keyword); }while(0)
52 
53 #define ASCF_PRINT_STRING_KEYWORD(stream,module,__config,keyword) \
54 	do{ if( (__config)->keyword != NULL  ) fprintf (stream, #module "." #keyword " = \"%s\";\n",(__config)->keyword); }while(0)
55 
56 #define ASCF_PRINT_IDX_STRING_KEYWORD(stream,module,__config,keyword,idx) \
57 	do{ if( (__config)->keyword[idx] != NULL  ) fprintf (stream, #module "." #keyword "[%d] = \"%s\";\n",idx,(__config)->keyword[idx]); }while(0)
58 
59 #define ASCF_PRINT_COMPOUND_STRING_KEYWORD(stream,module,__config,keyword,separator) \
60 	do{ if( (__config)->keyword != NULL  ) \
61 		{int __i__; \
62 			fprintf (stream, #module "." #keyword " = \""); \
63 			for( __i__=0; (__config)->keyword[__i__]!=NULL ; ++__i__ ) \
64 				fprintf (stream, "%s%c",(__config)->keyword[__i__],separator); \
65 			fputc( ';', stream ); fputc( '\n', stream ); \
66 		}}while(0)
67 
68 #define ASCF_PRINT_IDX_COMPOUND_STRING_KEYWORD(stream,module,__config,keyword,separator,idx) \
69 	do{ if( (__config)->keyword[idx] != NULL  ) \
70 		{int __i__; \
71 			fprintf (stream, #module "." #keyword "[%d] = \"",idx); \
72 			for( __i__=0; (__config)->keyword[idx][__i__]!=NULL ; ++__i__ ) \
73 				fprintf (stream, "%s%c",(__config)->keyword[idx][__i__],separator); \
74 			fputc( '\"', stream ); fputc( ';', stream ); fputc( '\n', stream ); \
75 		}}while(0)
76 
77 #define ASCF_HANDLE_SUBSYNTAX_KEYWORD_CASE(module,__config,__curr,keyword,type) \
78 		case module##_##keyword##_##ID : \
79 			if( __curr->sub ){ \
80 				set_flags(__config->set_flags,module##_##keyword); \
81 		   		__config->keyword = Parse##type##Options( __curr->sub ); }break
82 
83 #define ASCF_HANDLE_ALIGN_KEYWORD_CASE(module,__config,__curr,keyword) \
84 		ASCF_HANDLE_SUBSYNTAX_KEYWORD_CASE(module,__config,__curr,keyword,Align)
85 
86 #define ASCF_HANDLE_BEVEL_KEYWORD_CASE(module,__config,__curr,keyword) \
87 		ASCF_HANDLE_SUBSYNTAX_KEYWORD_CASE(module,__config,__curr,keyword,Bevel)
88 
89 
90 #define ASCF_HANDLE_GEOMETRY_KEYWORD_CASE(module,__config,__item,keyword) \
91 		case module##_##keyword##_##ID : set_flags(__config->set_flags,module##_##keyword); \
92 			__config->keyword = __item.data.geometry; break
93 
94 #define ASCF_HANDLE_SIZE_KEYWORD_CASE(module,__config,__item,keyword) \
95 		case module##_##keyword##_##ID : set_flags(__config->set_flags,module##_##keyword); \
96 			__config->keyword.width = get_flags( __item.data.geometry.flags, WidthValue )?__item.data.geometry.width:0; \
97 			__config->keyword.height = get_flags( __item.data.geometry.flags, HeightValue )?__item.data.geometry.height:0; \
98 			break
99 
100 #define ASCF_HANDLE_INTEGER_KEYWORD_CASE(module,__config,__item,keyword) \
101 		case module##_##keyword##_##ID : set_flags(__config->set_flags,module##_##keyword); \
102 			__config->keyword = __item.data.integer; break
103 
104 #define ASCF_HANDLE_STRING_KEYWORD_CASE(module,__config,__item,keyword) \
105 		case module##_##keyword##_##ID : \
106 			if( __config->keyword ) free( __config->keyword ); \
107 			__config->keyword = __item.data.string; break
108 
109 
110 #define ASCF_MERGE_FLAGS(__to,__from) \
111     do{	(__to)->flags = ((__from)->flags&(__from)->set_flags)|((__to)->flags & (~(__from)->set_flags)); \
112     	(__to)->set_flags |= (__from)->set_flags;}while(0)
113 
114 #define ASCF_MERGE_GEOMETRY_KEYWORD(module,__to,__from,keyword) \
115 	do{ if( get_flags((__from)->set_flags, module##_##keyword) )	\
116         	merge_geometry(&((__from)->keyword), &((__to)->keyword) ); }while(0)
117 
118 #define ASCF_MERGE_SCALAR_KEYWORD(module,__to,__from,keyword) \
119 	do{ if( get_flags((__from)->set_flags, module##_##keyword) )	\
120         	(__to)->keyword = (__from)->keyword ; }while(0)
121 
122 #define ASCF_MERGE_STRING_KEYWORD(module,__to,__from,keyword) \
123 	do{ if( (__from)->keyword )	\
124         {	set_string(	&((__to)->keyword), stripcpy2((__from)->keyword, False));}}while(0)
125 
126 
127 #endif /* KEYWORD_MACRO_H_FILE_INCLUDED */
128