Initial import of the CDE 2.1.30 sources from the Open Group.
This commit is contained in:
503
cde/programs/dtappbuilder/src/abmf/write_code.c
Normal file
503
cde/programs/dtappbuilder/src/abmf/write_code.c
Normal file
@@ -0,0 +1,503 @@
|
||||
/*
|
||||
* $XConsortium: write_code.c /main/3 1995/11/06 18:18:22 rswiston $
|
||||
*
|
||||
* @(#)write_code.c 1.18 16 Feb 1994 cde_app_builder/src/abmf
|
||||
*
|
||||
* RESTRICTED CONFIDENTIAL INFORMATION:
|
||||
*
|
||||
* The information in this document is subject to special restrictions in a
|
||||
* confidential disclosure agreement between HP, IBM, Sun, USL, SCO and
|
||||
* Univel. Do not distribute this document outside HP, IBM, Sun, USL, SCO,
|
||||
* or Univel without Sun's specific written approval. This document and all
|
||||
* copies and derivative works thereof must be returned or destroyed at Sun's
|
||||
* request.
|
||||
*
|
||||
* Copyright 1993 Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* write_code.c
|
||||
*
|
||||
* Writes entire files, projects, et cetera.
|
||||
*/
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define _POSIX_SOURCE 1
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <limits.h>
|
||||
#include <sys/stat.h>
|
||||
#include <ab_private/util.h>
|
||||
#include <ab_private/util_err.h>
|
||||
#include <ab_private/abio.h>
|
||||
#include "utilsP.h"
|
||||
#include "instancesP.h"
|
||||
#include "write_codeP.h"
|
||||
#include "msg_file.h"
|
||||
|
||||
/*************************************************************************
|
||||
** **
|
||||
** Constants (#define and const) **
|
||||
** **
|
||||
**************************************************************************/
|
||||
|
||||
/*************************************************************************
|
||||
** **
|
||||
** Private Functions (C declarations and macros) **
|
||||
** **
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
|
||||
/************************************************************************
|
||||
** **
|
||||
** Data **
|
||||
** **
|
||||
**************************************************************************/
|
||||
char *const abmfP_cmt_user_code_start = "DTB_USER_CODE_START";
|
||||
char *const abmfP_cmt_user_code_end = "DTB_USER_CODE_END";
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
** **
|
||||
** Function Definitions **
|
||||
** **
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
** **
|
||||
** GenCodeInfo type **
|
||||
** **
|
||||
*************************************************************************/
|
||||
|
||||
int
|
||||
abmfP_gencode_construct(GenCodeInfo gen)
|
||||
{
|
||||
gen->code_file = NULL;
|
||||
gen->resource_file = NULL;
|
||||
gen->prototype_funcs = TRUE;
|
||||
gen->dumped_resources = AB_ARG_CLASS_FLAGS_NONE;
|
||||
gen->i18n_method = ABMF_I18N_NONE;
|
||||
gen->msg_src_file_name = (STRING)NULL;
|
||||
gen->msg_file_obj = (MsgFile)NULL;
|
||||
|
||||
/* init cur_func substructure */
|
||||
abmfP_gencode_enter_func(gen);
|
||||
gen->writing_func = FALSE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_gencode_destruct(GenCodeInfo gen)
|
||||
{
|
||||
abmfP_gencode_exit_func(gen);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*/
|
||||
int
|
||||
abmfP_gencode_enter_func(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
genCodeInfo->writing_func= TRUE;
|
||||
genCodeInfo->cur_func.ip_obj = NULL;
|
||||
genCodeInfo->cur_func.create_obj = NULL;
|
||||
genCodeInfo->cur_func.args_var = NULL;
|
||||
genCodeInfo->cur_func.args_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.counter_var = NULL;
|
||||
genCodeInfo->cur_func.counter_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.arg_counter_var = NULL;
|
||||
genCodeInfo->cur_func.arg_counter_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.display_var = NULL;
|
||||
genCodeInfo->cur_func.display_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.drawable_var = NULL;
|
||||
genCodeInfo->cur_func.drawable_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.icon_pixmap_var = NULL;
|
||||
genCodeInfo->cur_func.icon_pixmap_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.icon_mask_pixmap_var = NULL;
|
||||
genCodeInfo->cur_func.icon_mask_pixmap_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.label_pixmap_var = NULL;
|
||||
genCodeInfo->cur_func.label_pixmap_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.label_str_var = NULL;
|
||||
genCodeInfo->cur_func.label_str_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.label_xmstr_var = NULL;
|
||||
genCodeInfo->cur_func.label_xmstr_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.acceltext_xmstr_var = NULL;
|
||||
genCodeInfo->cur_func.acceltext_xmstr_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.label_array_var = NULL;
|
||||
genCodeInfo->cur_func.label_array_has_nulls = FALSE;
|
||||
genCodeInfo->cur_func.mnemonic_array_var = NULL;
|
||||
genCodeInfo->cur_func.mnemonic_array_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.name_array_var = NULL;
|
||||
genCodeInfo->cur_func.name_array_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.name_param = NULL;
|
||||
genCodeInfo->cur_func.name_param_has_value = FALSE;
|
||||
genCodeInfo->cur_func.parent_param = NULL;
|
||||
genCodeInfo->cur_func.parent_param_has_value = FALSE;
|
||||
genCodeInfo->cur_func.return_code_var = NULL;
|
||||
genCodeInfo->cur_func.return_code_var_has_value = FALSE;
|
||||
|
||||
genCodeInfo->cur_func.title_str_var = NULL;
|
||||
genCodeInfo->cur_func.title_str_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.value_str_var = NULL;
|
||||
genCodeInfo->cur_func.value_str_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.icon_name_str_var = NULL;
|
||||
genCodeInfo->cur_func.icon_name_str_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.ok_label_xmstr_var = NULL;
|
||||
genCodeInfo->cur_func.ok_label_xmstr_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.directory_xmstr_var = NULL;
|
||||
genCodeInfo->cur_func.directory_xmstr_var_has_value = FALSE;
|
||||
genCodeInfo->cur_func.pattern_xmstr_var = NULL;
|
||||
genCodeInfo->cur_func.pattern_xmstr_var_has_value = FALSE;
|
||||
|
||||
strlist_construct(&(genCodeInfo->cur_func.submenu_params));
|
||||
strlist_set_is_unique(
|
||||
&(genCodeInfo->cur_func.submenu_params), FALSE);
|
||||
|
||||
strlist_construct(&(genCodeInfo->cur_func.submenu_param_types));
|
||||
strlist_set_is_unique(
|
||||
&(genCodeInfo->cur_func.submenu_params), FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*/
|
||||
int
|
||||
abmfP_gencode_exit_func(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
genCodeInfo->writing_func= FALSE;
|
||||
istr_destroy(genCodeInfo->cur_func.args_var);
|
||||
istr_destroy(genCodeInfo->cur_func.counter_var);
|
||||
istr_destroy(genCodeInfo->cur_func.arg_counter_var);
|
||||
istr_destroy(genCodeInfo->cur_func.display_var);
|
||||
istr_destroy(genCodeInfo->cur_func.drawable_var);
|
||||
istr_destroy(genCodeInfo->cur_func.icon_pixmap_var);
|
||||
istr_destroy(genCodeInfo->cur_func.icon_mask_pixmap_var);
|
||||
istr_destroy(genCodeInfo->cur_func.label_pixmap_var);
|
||||
istr_destroy(genCodeInfo->cur_func.label_str_var);
|
||||
istr_destroy(genCodeInfo->cur_func.label_xmstr_var);
|
||||
istr_destroy(genCodeInfo->cur_func.acceltext_xmstr_var);
|
||||
istr_destroy(genCodeInfo->cur_func.label_array_var);
|
||||
istr_destroy(genCodeInfo->cur_func.mnemonic_array_var);
|
||||
istr_destroy(genCodeInfo->cur_func.name_array_var);
|
||||
istr_destroy(genCodeInfo->cur_func.name_param);
|
||||
istr_destroy(genCodeInfo->cur_func.parent_param);
|
||||
istr_destroy(genCodeInfo->cur_func.return_code_var);
|
||||
strlist_make_empty(&(genCodeInfo->cur_func.submenu_params));
|
||||
strlist_make_empty(&(genCodeInfo->cur_func.submenu_param_types));
|
||||
istr_destroy(genCodeInfo->cur_func.title_str_var);
|
||||
istr_destroy(genCodeInfo->cur_func.value_str_var);
|
||||
istr_destroy(genCodeInfo->cur_func.icon_name_str_var);
|
||||
istr_destroy(genCodeInfo->cur_func.ok_label_xmstr_var);
|
||||
istr_destroy(genCodeInfo->cur_func.directory_xmstr_var);
|
||||
istr_destroy(genCodeInfo->cur_func.pattern_xmstr_var);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
abmfP_obj_is_struct_obj(ABObj obj)
|
||||
{
|
||||
return (obj_is_window(obj) || obj_is_message(obj));
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL
|
||||
abmfP_obj_has_struct_field(ABObj obj)
|
||||
{
|
||||
switch (obj_get_type(obj))
|
||||
{
|
||||
case AB_TYPE_ITEM:
|
||||
return FALSE; /* all items are substruct fields */
|
||||
}
|
||||
|
||||
if (obj_has_flag(obj, NoCodeGenFlag))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch (obj_get_type(obj))
|
||||
{
|
||||
case AB_TYPE_MODULE:
|
||||
case AB_TYPE_PROJECT:
|
||||
case AB_TYPE_UNKNOWN:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL
|
||||
abmfP_obj_has_substruct_field(ABObj obj)
|
||||
{
|
||||
return ((obj_is_item(obj)) &&
|
||||
(obj_get_item_type(obj) != AB_ITEM_FOR_LIST) &&
|
||||
(obj_get_item_type(obj) != AB_ITEM_FOR_COMBO_BOX) &&
|
||||
(obj_get_item_type(obj) != AB_ITEM_FOR_SPIN_BOX));
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
abmfP_obj_has_field(ABObj obj)
|
||||
{
|
||||
return ( abmfP_obj_has_struct_field(obj)
|
||||
|| abmfP_obj_has_substruct_field(obj) );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* A substruct consists of any items the object may have. List items
|
||||
* never have fields, because they are not widgets.
|
||||
*/
|
||||
BOOL
|
||||
abmfP_obj_is_substruct_obj(ABObj obj)
|
||||
{
|
||||
ABObj item = NULL;
|
||||
if (mfobj_has_flags(obj, CGenFlagIsSubstructObjValid))
|
||||
{
|
||||
goto epilogue;
|
||||
}
|
||||
|
||||
mfobj_set_flags(obj, CGenFlagIsSubstructObjValid);
|
||||
item = obj_get_item(obj, 0);
|
||||
if ((item != NULL) &&
|
||||
(obj_get_item_type(item) != AB_ITEM_FOR_LIST) &&
|
||||
(obj_get_item_type(item) != AB_ITEM_FOR_COMBO_BOX) &&
|
||||
(obj_get_item_type(item) != AB_ITEM_FOR_SPIN_BOX))
|
||||
{
|
||||
mfobj_set_flags(obj, CGenFlagIsSubstructObj);
|
||||
}
|
||||
|
||||
epilogue:
|
||||
return mfobj_has_flags(obj, CGenFlagIsSubstructObj);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The substruct consists of our composite subobjects and items
|
||||
*/
|
||||
static int
|
||||
count_possible_substruct_fields(ABObj obj)
|
||||
{
|
||||
return obj_get_num_items(obj);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* A substruct object is one that could have a structure defined to
|
||||
* define it (as opposed to being only a widget).
|
||||
*/
|
||||
BOOL
|
||||
abmfP_obj_could_be_substruct_obj(ABObj obj)
|
||||
{
|
||||
return abmfP_obj_is_substruct_obj(obj);
|
||||
}
|
||||
|
||||
int
|
||||
abmfP_write_user_start_comment(
|
||||
GenCodeInfo genCodeInfo,
|
||||
STRING desc
|
||||
)
|
||||
{
|
||||
abio_printf(genCodeInfo->code_file, "/*** %s %s ***/\n",
|
||||
abmfP_cmt_user_code_start,
|
||||
desc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_long_start_comment(
|
||||
GenCodeInfo genCodeInfo,
|
||||
STRING desc
|
||||
)
|
||||
{
|
||||
File codeFile = genCodeInfo->code_file;
|
||||
if (desc == NULL)
|
||||
{
|
||||
desc = "Add additional code here";
|
||||
}
|
||||
abio_printf(codeFile, "/**************************************************************************\n");
|
||||
abio_printf(codeFile, " *** %s\n", abmfP_cmt_user_code_start);
|
||||
abio_printf(codeFile, " ***\n");
|
||||
abio_printf(codeFile, " *** %s\n", desc);
|
||||
abio_printf(codeFile, " ***/\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_end_comment(
|
||||
GenCodeInfo genCodeInfo,
|
||||
STRING desc
|
||||
)
|
||||
{
|
||||
abio_printf(genCodeInfo->code_file, "/*** %s %s ***/\n",
|
||||
abmfP_cmt_user_code_end,
|
||||
desc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_long_end_comment(
|
||||
GenCodeInfo genCodeInfo,
|
||||
STRING desc
|
||||
)
|
||||
{
|
||||
File codeFile = genCodeInfo->code_file;
|
||||
if (desc == NULL)
|
||||
{
|
||||
desc = "End of user code section";
|
||||
}
|
||||
|
||||
abio_printf(codeFile, "/*** %s\n", abmfP_cmt_user_code_end);
|
||||
abio_printf(codeFile, " ***\n");
|
||||
abio_printf(codeFile, " *** %s\n", desc);
|
||||
abio_printf(codeFile, " ***\n");
|
||||
abio_printf(codeFile, " **************************************************************************/\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_seg(GenCodeInfo genCodeInfo, STRING desc, STRING contents)
|
||||
{
|
||||
File codeFile = genCodeInfo->code_file;
|
||||
|
||||
/* start comment */
|
||||
abio_printf(codeFile, "/*** %s vvv %s below vvv ***/\n",
|
||||
abmfP_cmt_user_code_start,
|
||||
desc);
|
||||
|
||||
/* contents */
|
||||
if (contents != NULL)
|
||||
{
|
||||
abio_puts(codeFile, contents);
|
||||
}
|
||||
|
||||
/* end comment */
|
||||
abio_printf(codeFile, "/*** %s ^^^ %s above ^^^ ***/\n",
|
||||
abmfP_cmt_user_code_end,
|
||||
desc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_long_seg(GenCodeInfo genCodeInfo, STRING desc)
|
||||
{
|
||||
abio_puts(genCodeInfo->code_file, nlstr);
|
||||
abmfP_write_user_long_start_comment(genCodeInfo, desc);
|
||||
abio_puts(genCodeInfo->code_file, nlstr);
|
||||
abmfP_write_user_long_end_comment(genCodeInfo, NULL);
|
||||
abio_puts(genCodeInfo->code_file, "\n\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_type_and_var_seg(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
return abmfP_write_user_seg(genCodeInfo,
|
||||
"Add type and variable definitions", NULL);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_struct_fields_seg(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
return abmfP_write_user_seg(genCodeInfo, "Add structure fields", NULL);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_funcs_seg(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
return abmfP_write_user_seg(genCodeInfo, "Add user-defined functions", NULL);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_code_seg(GenCodeInfo genCodeInfo, STRING contents)
|
||||
{
|
||||
return abmfP_write_user_seg(genCodeInfo, "Add C code", contents);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_var_seg(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
return abmfP_write_user_seg(genCodeInfo, "Add C variables", NULL);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_var_and_code_seg(GenCodeInfo genCodeInfo, STRING contents)
|
||||
{
|
||||
return abmfP_write_user_seg(genCodeInfo,
|
||||
"Add C variables and code", contents);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_header_seg(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
return abmfP_write_user_seg(genCodeInfo, "Add file header", NULL);
|
||||
}
|
||||
|
||||
int
|
||||
abmfP_write_user_file_top_seg(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
File codeFile = genCodeInfo->code_file;
|
||||
|
||||
abio_printf(codeFile, nlstr);
|
||||
abio_printf(codeFile, "/**************************************************************************\n");
|
||||
abio_printf(codeFile, " *** %s\n", abmfP_cmt_user_code_start);
|
||||
abio_printf(codeFile, " ***\n");
|
||||
abio_printf(codeFile, " *** All necessary header files have been included.\n");
|
||||
abio_printf(codeFile, " ***\n");
|
||||
abio_printf(codeFile, " *** Add include files, types, macros, externs, and user functions here.\n");
|
||||
abio_printf(codeFile, " ***/\n");
|
||||
|
||||
abio_puts(codeFile, nlstr);
|
||||
abmfP_write_user_long_end_comment(genCodeInfo, NULL);
|
||||
abio_puts(codeFile, "\n\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
abmfP_write_user_file_bottom_seg(GenCodeInfo genCodeInfo)
|
||||
{
|
||||
File codeFile = genCodeInfo->code_file;
|
||||
|
||||
abio_printf(codeFile, nlstr);
|
||||
abio_printf(codeFile, "/**************************************************************************\n");
|
||||
abio_printf(codeFile, " *** %s\n", abmfP_cmt_user_code_start);
|
||||
abio_printf(codeFile, " ***\n");
|
||||
abio_printf(codeFile, " *** All automatically-generated data and functions have been defined.\n");
|
||||
abio_printf(codeFile, " ***\n");
|
||||
abio_printf(codeFile, " *** Add new functions here, or at the top of the file.\n");
|
||||
abio_printf(codeFile, " ***/\n");
|
||||
abio_printf(codeFile, nlstr);
|
||||
abmfP_write_user_long_end_comment(genCodeInfo, NULL);
|
||||
abio_puts(codeFile, "\n\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user