void lay_banner( const gmltag * entry ) { char * p; condcode cc; int k; lay_att curr; att_args l_args; bool cvterr; p = scan_start; cvterr = false; if( !GlobalFlags.firstpass ) { scan_start = scan_stop + 1; eat_lay_sub_tag(); return; // process during first pass only } if( ProcFlags.lay_xxx != el_banner ) { ProcFlags.lay_xxx = el_banner; ProcFlags.banner = true; init_banner_wk( &wk ); } else { if( !strnicmp( ":banner", buff2, sizeof( ":banner" ) ) ) { err_count++; // nested :banner g_err( err_nested_tag, entry->tagname ); file_mac_info(); while( !ProcFlags.reprocess_line ) { eat_lay_sub_tag(); if( strnicmp( ":ebanner", buff2, sizeof( ":ebanner" ) ) ) { ProcFlags.reprocess_line = false; // not :ebanner, go on } } return; } } cc = get_lay_sub_and_value( &l_args ); // get att with value while( cc == pos ) { cvterr = true; for( k = 0; k < att_count; k++ ) { curr = banner_att[k]; if( !strnicmp( att_names[curr], l_args.start[0], l_args.len[0] ) ) { p = l_args.start[1]; if( count[k] ) { cvterr = 1; // attribute specified twice } else { count[k] += 1; sum_count++; switch( curr ) { case e_left_adjust: cvterr = i_space_unit( p, curr, &wk.left_adjust ); break; case e_right_adjust: cvterr = i_space_unit( p, curr, &wk.right_adjust ); break; case e_depth: cvterr = i_space_unit( p, curr, &wk.depth ); break; case e_place: cvterr = i_place( p, curr, &wk.place ); break; case e_docsect: cvterr = i_docsect( p, curr, &wk.docsect ); break; case e_refplace: // not stored in banner struct cvterr = i_place( p, curr, &refplace ); break; case e_refdoc: // not stored in banner struct cvterr = i_docsect( p, curr, &refdoc ); break; default: out_msg( "WGML logic error.\n"); cvterr = true; break; } } break; // break out of for loop } } if( cvterr ) { // there was an error err_count++; g_err( err_att_val_inv ); file_mac_info(); } cc = get_lay_sub_and_value( &l_args ); // get att with value } scan_start = scan_stop + 1; return; }
void lay_fig( lay_tag ltag ) { char * p; condcode cc; int k; lay_att curr; att_args l_args; int cvterr; /* unused parameters */ (void)ltag; p = scan_start; cvterr = false; if( !GlobalFlags.firstpass ) { scan_start = scan_stop; eat_lay_sub_tag(); return; // process during first pass only } if( ProcFlags.lay_xxx != el_fig ) { ProcFlags.lay_xxx = el_fig; } cc = get_lay_sub_and_value( &l_args ); // get one with value while( cc == pos ) { cvterr = -1; for( k = 0, curr = fig_att[k]; curr > 0; k++, curr = fig_att[k] ) { if( !strnicmp( att_names[curr], l_args.start[0], l_args.len[0] ) ) { p = l_args.start[1]; switch( curr ) { case e_left_adjust: cvterr = i_space_unit( p, curr, &layout_work.fig.left_adjust ); break; case e_right_adjust: cvterr = i_space_unit( p, curr, &layout_work.fig.right_adjust ); break; case e_pre_skip: cvterr = i_space_unit( p, curr, &layout_work.fig.pre_skip ); break; case e_post_skip: cvterr = i_space_unit( p, curr, &layout_work.fig.post_skip ); break; case e_spacing: cvterr = i_int8( p, curr, &layout_work.fig.spacing ); break; case e_font: cvterr = i_font_number( p, curr, &layout_work.fig.font ); if( layout_work.fig.font >= wgml_font_cnt ) { layout_work.fig.font = 0; } break; case e_default_place: cvterr = i_place( p, curr, &layout_work.fig.default_place ); break; case e_default_frame: cvterr = i_default_frame( p, curr, &layout_work.fig.default_frame ); break; default: out_msg( "WGML logic error.\n"); cvterr = true; break; } if( cvterr ) { // there was an error err_count++; g_err( err_att_val_inv ); file_mac_info(); } break; // break out of for loop } } if( cvterr < 0 ) { err_count++; g_err( err_att_name_inv ); file_mac_info(); } cc = get_lay_sub_and_value( &l_args ); // get one with value } scan_start = scan_stop; return; }