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