static int write_action_functions(GenCodeInfo genCodeInfo, ABObj obj) { File codeFile = genCodeInfo->code_file; static char msg[256], *s; AB_TRAVERSAL trav; ABObj action = NULL; ABObj fromObj = NULL; /* for error reports */ int i = 0; /* * Auto-named functions */ for (trav_open(&trav, obj, AB_TRAV_ACTIONS_FOR_OBJ | AB_TRAV_MOD_SAFE), i = 0; (action = trav_next(&trav)) != NULL; ++i) { if ( mfobj_has_flags(action, CGenFlagIsDuplicateDef) || mfobj_has_flags(action, CGenFlagWriteDefToProjFile)) { continue; } if (action->info.action.auto_named) { abmfP_write_action_function(genCodeInfo, action); abio_puts(genCodeInfo->code_file, "\n"); } } /* don't close traversal, yet */ /* * User-named functions */ for (trav_reset(&trav); (action = trav_next(&trav)) != NULL; ++i) { if ( mfobj_has_flags(action, CGenFlagIsDuplicateDef) || mfobj_has_flags(action, CGenFlagWriteDefToProjFile)) { continue; } if (!(action->info.action.auto_named)) { abmfP_write_action_function(genCodeInfo, action); abio_puts(genCodeInfo->code_file, "\n"); } } trav_close(&trav); return OK; }
/* * Write the project.c file. */ int abmfP_write_project_c_file( GenCodeInfo genCodeInfo, STRING codeFileName, BOOL prepareForMerge, ABObj project ) { File codeFile = genCodeInfo->code_file; STRING errmsg = NULL; STRING *p = NULL; ABObj win_obj = NULL; ABObj obj = NULL; ABObj action = NULL; AB_ACTION_INFO *action_info = NULL; AB_TRAVERSAL trav; ABObj module = NULL; int numFuncsWritten = 0; char projectName[1024]; *projectName = 0; /* * Write file header. */ abmfP_write_user_header_seg(genCodeInfo); abio_puts(codeFile, nlstr); sprintf(projectName, "project %s", obj_get_name(project)); abmfP_write_file_header( genCodeInfo, codeFileName, FALSE, projectName, util_get_program_name(), ABMF_MODIFY_USER_SEGS, " * Contains: main() and cross-module connections" ); /* * Write includes. */ write_includes(genCodeInfo, project); /* * Write user segment */ abmfP_write_user_file_top_seg(genCodeInfo); /* i18n variable declarations */ if (genCodeInfo->i18n_method == ABMF_I18N_XPG4_API) write_i18n_var_declrs(genCodeInfo, project); write_option_desc_list(genCodeInfo, project); write_app_resources(genCodeInfo, project); write_app_resource_var(genCodeInfo, project); /* * Write main(). */ write_main(genCodeInfo, project); /* * Write callback funcs. */ numFuncsWritten = 0; for (trav_open(&trav, project, AB_TRAV_ACTIONS); (action = trav_next(&trav)) != NULL;) { action_info = &(action->info.action); /* If the function name for the action is not NULL AND * the action is a cross-module connection OR the action * is a shared connection, then write it out. */ if ( (abmfP_get_action_name(action) != NULL) && ( obj_is_cross_module(action) || ( (!mfobj_has_flags(action, CGenFlagIsDuplicateDef)) && (mfobj_has_flags(action, CGenFlagWriteDefToProjFile)) && (obj_get_func_type(action) == AB_FUNC_USER_DEF) ) ) ) { ++numFuncsWritten; abmfP_write_action_function(genCodeInfo, action); } } trav_close(&trav); if (numFuncsWritten > 0) { abio_puts(codeFile, nlstr); } abmfP_write_user_file_bottom_seg(genCodeInfo); return OK; }