/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <ProToolkit.h>
#include <ProParameter.h>
#include <ProMaterial.h>
#include <ProParamDriver.h>
#include <ProUtil.h>
#include <ProModelitem.h>
#include <ProRelSet.h>
#include <ProTKRunTime.h>
#include <PTApplsUnicodeUtils.h>
#define PTTestResfileWrite(str)\
ProTKFprintf(file_ptr, "%s\n", str);
#define PTTestResfileStringWrite(str)\
ProTKFprintf(file_ptr, "%s", str);
static char line [500];
static ProParamtableSet* tableset_array;
static PTUDFExParamInfoFormat format;
static FILE* file_ptr;
/*====================================================================*\
FUNCTION: PTUDFExParamvalueWrite_very_low
PURPOSE: Write the value of a parameter value.
\*====================================================================*/
ProError PTUDFExParamvalueWrite_very_low (ProParamvalue* value,
ProBoolean short_version)
{
ProParamvalueType type;
double d_val;
int i_val;
short b_val;
ProLine s_val;
char val [PRO_LINE_SIZE];
status = ProParamvalueTypeGet (value, &type);
PT_TEST_LOG_SUCC ("ProParamvalueTypeGet()");
switch (type)
{
case PRO_PARAM_DOUBLE:
{
status = ProParamvalueValueGet (value, type, (void *) &d_val);
PT_TEST_LOG_SUCC ("ProParamvalueValueGet()");
ProTKSprintf (line, (short_version ? "%8.10lf" :
" - Param value (double): %8.10lf"), d_val);
break;
}
case PRO_PARAM_STRING:
{
status = ProParamvalueValueGet (value, type, (void *) s_val);
PT_TEST_LOG_SUCC ("ProParamvalueValueGet()");
ProTKSprintf (line, (short_version ? "%s" :
" - Param value (string): %s"),
ProWstringToString (val, s_val));
break;
}
case PRO_PARAM_INTEGER:
{
status = ProParamvalueValueGet (value, type, (void *) &i_val);
PT_TEST_LOG_SUCC ("ProParamvalueValueGet()");
ProTKSprintf (line, (short_version ? "%d" :
" - Param value (integer): %d"), i_val);
break;
}
case PRO_PARAM_BOOLEAN:
{
status = ProParamvalueValueGet (value, type, (void *) &b_val);
PT_TEST_LOG_SUCC ("ProParamvalueValueGet()");
ProTKSprintf (line, (short_version ? "%s":
" - Param value (boolean): %s"),
b_val?"TRUE":"FALSE");
break;
}
case PRO_PARAM_NOTE_ID:
{
status = ProParamvalueValueGet (value, type, (void *) &i_val);
PT_TEST_LOG_SUCC ("ProParamvalueValueGet()");
ProTKSprintf (line, (short_version ? "%d" :
" - Param value (note_id): %d"), i_val);
break;
}
case PRO_PARAM_VOID:
{
ProTKSprintf (line, (short_version ? "":" + Param value (void)"));
break;
}
default:
return PRO_TK_GENERAL_ERROR;
}
if (short_version)
{
PTTestResfileStringWrite (line);
}
else
{
PTTestResfileWrite (line);
}
return PRO_TK_NO_ERROR;
}
/*====================================================================*\
FUNCTION: PTUDFExParamvalueShortversionWrite_low
PURPOSE: Write only the value of a parameter value.
\*====================================================================*/
ProError PTUDFExParamvalueShortversionWrite_low (ProParamvalue* value)
{
PTUDFExParamvalueWrite_very_low (value, PRO_B_TRUE);
}
/*====================================================================*\
FUNCTION: PTUDFExParamvalueCSVWrite_low
PURPOSE: Write the value and type of a parameter value in a CSV format.
\*====================================================================*/
ProError PTUDFExParamvalueCSVWrite_low (ProParamvalue* value)
{
switch (value->type)
{
case PRO_PARAM_INTEGER:
PTTestResfileStringWrite ("INTEGER");
break;
case PRO_PARAM_DOUBLE:
PTTestResfileStringWrite ("DOUBLE");
break;
case PRO_PARAM_BOOLEAN:
PTTestResfileStringWrite ("BOOLEAN");
break;
case PRO_PARAM_STRING:
PTTestResfileStringWrite ("STRING");
break;
case PRO_PARAM_VOID:
PTTestResfileStringWrite ("VOID");
break;
}
PTTestResfileStringWrite (",");
PTUDFExParamvalueWrite_very_low (value, PRO_B_TRUE);
PTTestResfileStringWrite (",");
}
/*====================================================================*\
FUNCTION: PTUDFExParamvalueWrite_low
PURPOSE: Write the value and type of a parameter value in a deascriptive
text format.
\*====================================================================*/
ProError PTUDFExParamvalueWrite_low (ProParamvalue* value)
{
PTUDFExParamvalueWrite_very_low (value, PRO_B_FALSE);
}
/*====================================================================*\
FUNCTION: PTUDFExParamlimitWrite_low
PURPOSE: Write text information about a parameter upper or lower bound.
\*====================================================================*/
static ProError PTUDFExParamlimitWrite_low (char* label, ProParamLimit* limit)
{
char* limit_string;
ProTKSprintf (line, " + %s Value Info:", label);
PTTestResfileWrite (line);
switch (limit->type)
{
case PRO_PARAM_UNLIMITED:
limit_string = "Unlimited";
break;
case PRO_PARAM_GREATER_THAN:
limit_string = "Greater than";
break;
case PRO_PARAM_GREATER_THAN_OR_EQUAL:
limit_string = "Greater than or equal to";
break;
case PRO_PARAM_LESS_THAN:
limit_string = "Less than";
break;
case PRO_PARAM_LESS_THAN_OR_EQUAL:
limit_string = "Less than or equal to";
break;
}
ProTKSprintf (line," + Parameter Limit Type : %s", limit_string);
PTTestResfileWrite (line);
PTUDFExParamvalueWrite_low (&limit->value);
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExParamtableEntryWrite_low
PURPOSE: Write text information about a parameter table entry.
\*====================================================================*/
static ProError PTUDFExParamtableEntryWrite_low (ProParamtableEntry entry)
{
ProName name;
ProCharName c_name;
ProParamvalue value;
ProParamLimit min, max;
PTTestResfileWrite ("-----------------------------------------------------");
status = ProParamtableentryNameGet (entry, name);
PT_TEST_LOG_SUCC ("ProParamtableentryNameGet()");
ProWstringToString (c_name, name);
status = ProParamtableentryValueGet (entry, &value);
PT_TEST_LOG_NOT_FOUND_OK ("ProParamtableentryValueGet()");
ProTKSprintf (line, " * Entry: %s, value: ", c_name);
PTTestResfileStringWrite (line);
if (status == PRO_TK_NO_ERROR)
{
PTUDFExParamvalueShortversionWrite_low (&value);
PTTestResfileWrite ("");
}
else
{
PTTestResfileWrite ("NULL");
}
status = ProParamtableentryRangeGet (entry, &min, &max);
PT_TEST_LOG_NOT_FOUND_OK ("ProParamtableentryRangeGet()");
if ( status == PRO_TK_NO_ERROR)
{
PTTestResfileStringWrite (" "); /* Indent */
PTUDFExParamlimitWrite_low ("Minimum", &min);
PTTestResfileStringWrite (" "); /* Indent */
PTUDFExParamlimitWrite_low ("Maximum", &max);
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExParamtableSetWrite_low
PURPOSE: Write text information about a parameter table set.
\*====================================================================*/
ProError PTUDFExParamtableSetWrite_low (ProParamtableSet table_set, ProBoolean include_entries)
{
ProPath table_path;
ProName label;
char buff [500];
int i, size;
ProParamtableEntry* entries;
PTTestResfileWrite (" - Member of a restricted table set:");
status = ProParamtablesetTablepathGet (table_set, table_path);
PT_TEST_LOG_SUCC ("ProParamtablesetTablepathGet()");
ProWstringToString (buff, table_path);
ProTKSprintf (line, " = Name/path: %s", buff);
PTTestResfileWrite (line);
status = ProParamtablesetLabelGet (table_set, label);
PT_TEST_LOG_SUCC ("ProParamtablesetLabelGet()");
ProWstringToString (buff, label);
ProTKSprintf (line, " = Label param: %s", buff);
PTTestResfileWrite (line);
status = ProParamtablesetEntriesGet (table_set, &entries);
PT_TEST_LOG_SUCC ("ProParamtablesetEntriesGet()");
status = ProArraySizeGet (entries, &size);
PT_TEST_LOG_SUCC ("ProArraySizeGet()");
if (include_entries)
{
ProTKSprintf (line, " = %d entries: ", size);
PTTestResfileWrite (line);
for (i = 0; i < size; i ++)
{
PTUDFExParamtableEntryWrite_low (entries[i]);
}
}
else
{
ProTKSprintf (line, " = %d entries. ", size);
PTTestResfileWrite (line);
}
status = ProParamtableentryProarrayFree (entries);
PT_TEST_LOG_SUCC ("ProParamtableentryProarrayFree()");
}
/*====================================================================*\
FUNCTION: PTUDFExWriteModelitem
PURPOSE: Write information about a modelitem or parameter owner.
\*====================================================================*/
static ProError PTUDFExWriteModelitem (ProModelitem* item)
{
ProMdlType mdl_type;
char c_item_type [PRO_NAME_SIZE];
ProMdlName mdl_name;
char c_file_name [PRO_MDLNAME_SIZE];
status = ProMdlMdlnameGet (item->owner, mdl_name);
ProWstringToString (c_file_name, mdl_name);
status = ProMdlTypeGet (item->owner, &mdl_type);
switch (mdl_type)
{
case PRO_MDL_PART:
strcat (c_file_name, ".prt");
break;
case PRO_MDL_ASSEMBLY:
strcat (c_file_name, ".asm");
break;
}
switch (item->type)
{
case PRO_TYPE_UNUSED:
case PRO_PART:
case PRO_ASSEMBLY:
strcpy (c_item_type, "");
break;
case PRO_FEATURE:
strcpy (c_item_type, "Feature");
break;
case PRO_ANNOTATION_ELEM:
strcpy (c_item_type, "Annotation Elem");
break;
}
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
if (item->type == PRO_TYPE_UNUSED)
{
ProTKSprintf (line, "model %s", c_file_name);
}
else
{
ProTKSprintf (line, "%s id %d (%s)", c_item_type,
item->id, c_file_name);
}
PTTestResfileWrite (line);
break;
case PT_UDF_EX_PARAM_INFO_CSV:
ProTKSprintf (line, "%s,%s,%d,", c_file_name, c_item_type,
item->id);
PTTestResfileStringWrite (line);
break;
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExWriteParameterBasics
PURPOSE: Write the parameter name & owner details.
\*====================================================================*/
static ProError PTUDFExWriteParameterBasics (ProParameter* param)
{
char c_name [PRO_NAME_SIZE*4];
ProModelitem owner_item;
ProMdl owner_mdl;
ProWstringToString (c_name, param->id);
switch (param->owner.type)
{
case PRM_MODEL:
owner_item.owner = param->owner.who.model;
owner_item.id = -1;
owner_item.type = PRO_TYPE_UNUSED;
break;
case PRM_ITEM:
memcpy (&owner_item, ¶m->owner.who.item, sizeof (ProModelitem));
break;
}
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
PTTestResfileWrite ("---------------------------------------------------------");
ProTKSprintf (line, "Parameter: %s owned by ", c_name);
PTTestResfileStringWrite (line);
PTUDFExWriteModelitem (&owner_item);
break;
case PT_UDF_EX_PARAM_INFO_CSV:
ProTKSprintf (line, "%s,", c_name);
PTTestResfileStringWrite (line);
PTUDFExWriteModelitem (&owner_item);
break;
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExWriteParameterValue
PURPOSE: Write the parameter value and units details.
\*====================================================================*/
static ProError PTUDFExWriteParameterValue (ProParamvalue* value, char* unit_name)
{
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
if (strlen (unit_name) > 0)
ProTKSprintf (line, " + Scaled Value, in %s:", unit_name);
else
ProTKSprintf (line, " + Value");
PTTestResfileWrite (line);
PTUDFExParamvalueWrite_low (value);
break;
case PT_UDF_EX_PARAM_INFO_CSV:
PTUDFExParamvalueCSVWrite_low (value);
ProTKSprintf (line, "%s,",unit_name);
PTTestResfileStringWrite (line);
break;
}
}
/*====================================================================*\
FUNCTION: PTUDFExWriteDescription
PURPOSE: Write the parameter description.
\*====================================================================*/
static ProError PTUDFExWriteDescription (wchar_t* description)
{
char* c_descr;
int length;
status = ProWstringLengthGet (description, &length);
c_descr = (char*) calloc (3* (length + 1), sizeof (char));
ProWstringToString (c_descr, description);
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
ProTKSprintf (line, " + Description: %s", c_descr);
PTTestResfileWrite (line);
break;
case PT_UDF_EX_PARAM_INFO_CSV:
ProTKSprintf (line, "%s,", c_descr);
PTTestResfileStringWrite (line);
break;
}
free (c_descr);
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExWriteDesignation
PURPOSE: Write the parameter designation status.
\*====================================================================*/
static ProError PTUDFExWriteDesignation (ProBoolean is_designated)
{
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
ProTKSprintf (line, " + %s", is_designated ? "Designated.": "Not designated.");
PTTestResfileWrite (line);
break;
case PT_UDF_EX_PARAM_INFO_CSV:
ProTKSprintf (line, "%s,", is_designated ? "TRUE": "FALSE");
PTTestResfileStringWrite (line);
break;
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExWriteEnumeration
PURPOSE: Write the details about an enumeration restriction.
\*====================================================================*/
static ProError PTUDFExWriteEnumeration (ProBoolean is_enum, ProParamvalue* values_array)
{
int num_values, i;
ProParamvalue value;
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
ProTKSprintf (line, " + %s ", (is_enum == PRO_B_TRUE) ? "Enumerated:":"Not enumerated." );
PTTestResfileWrite (line);
if (is_enum == PRO_B_TRUE)
{
ProArraySizeGet ( values_array, &num_values);
for (i = 0 ; i< num_values; i++)
{
value = values_array[i];
PTTestResfileStringWrite ("\t");
PTUDFExParamvalueWrite_low (&value);
}
}
break;
case PT_UDF_EX_PARAM_INFO_CSV:
if (is_enum == PRO_B_TRUE)
{
ProArraySizeGet ( values_array, &num_values);
for (i = 0 ; i< num_values; i++)
{
value = values_array[i];
PTUDFExParamvalueShortversionWrite_low (&value);
if (i != num_values - 1)
PTTestResfileStringWrite ("|");
}
}
PTTestResfileStringWrite (",");
break;
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExWriteRange
PURPOSE: Write the details about range restriction.
\*====================================================================*/
static ProError PTUDFExWriteRange (ProBoolean has_range, ProParamLimit* min, ProParamLimit* max)
{
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
ProTKSprintf (line, " + %s " , (has_range == PRO_B_TRUE) ? "Has range." : "Doesn't have range.");
PTTestResfileWrite (line);
if ( has_range == PRO_B_TRUE)
{
PTUDFExParamlimitWrite_low ("Minimum", min);
PTUDFExParamlimitWrite_low ("Maximum", max);
}
break;
case PT_UDF_EX_PARAM_INFO_CSV:
if ( has_range == PRO_B_TRUE)
{
switch (min->type)
{
case PRO_PARAM_UNLIMITED:
PTTestResfileStringWrite ("(|");
break;
case PRO_PARAM_GREATER_THAN:
PTTestResfileStringWrite ("(");
PTUDFExParamvalueShortversionWrite_low (&min->value);
PTTestResfileStringWrite ("|");
break;
case PRO_PARAM_GREATER_THAN_OR_EQUAL:
PTTestResfileStringWrite ("[");
PTUDFExParamvalueShortversionWrite_low (&min->value);
PTTestResfileStringWrite ("|");
break;
}
switch (max->type)
{
case PRO_PARAM_UNLIMITED:
PTTestResfileStringWrite (")");
break;
case PRO_PARAM_LESS_THAN:
PTUDFExParamvalueShortversionWrite_low (&max->value);
PTTestResfileStringWrite (")");
break;
case PRO_PARAM_LESS_THAN_OR_EQUAL:
PTUDFExParamvalueShortversionWrite_low (&max->value);
PTTestResfileStringWrite ("]");
break;
}
}
PTTestResfileStringWrite (",");
break;
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExWriteTable
PURPOSE: Write informaiton about the table set label for this parameter.
\*====================================================================*/
static ProError PTUDFExWriteTable (ProName label)
{
char c_label [PRO_NAME_SIZE * 4];
ProWstringToString (c_label, label);
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
if (strlen (c_label) > 0)
{
ProTKSprintf (line, " + Member of table row %s", c_label);
PTTestResfileWrite (line);
}
else
{
PTTestResfileWrite (" + Doesn't belong to a table.");
}
break;
case PT_UDF_EX_PARAM_INFO_CSV:
if (strlen (c_label) > 0)
{
ProTKSprintf (line, "%s", c_label);
PTTestResfileStringWrite (line);
}
PTTestResfileStringWrite (",");
break;
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExWriteParameterEnd
PURPOSE: Close the section relating to the current parameter.
\*====================================================================*/
static ProError PTUDFExWriteParameterEnd ()
{
switch (format)
{
case PT_UDF_EX_PARAM_INFO_TEXT:
PTTestResfileWrite ("---------------------------------------------------------");
break;
case PT_UDF_EX_PARAM_INFO_CSV:
PTTestResfileWrite ("");
break;
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExParameterWrite_low
PURPOSE: Write all details about a single parameter.
\*====================================================================*/
ProError PTUDFExParameterWrite_low (ProParameter* param)
{
ProBoolean is_designated= PRO_B_FALSE;
ProParamvalue value, *array_values;
char unit_name [PRO_LINE_SIZE];
ProUnititem units;
ProBoolean has_range, is_enum;
ProParamLimit max, min;
ProParamtableSet table_set;
wchar_t* description;
ProName label;
ProError descr_status;
/* Basics (name, owner) */
PTUDFExWriteParameterBasics (param);
/* Value */
status = ProParameterScaledvalueGet (param, &value);
PT_TEST_LOG_SUCC ("ProParameterScaledvalueGet()");
status = ProParameterUnitsGet ( param, &units);
PT_TEST_LOG_NOT_FOUND_OK ("ProParametersUnitsGet");
if (status == PRO_TK_NO_ERROR)
ProWstringToString ( unit_name, units.name);
else
strcpy (unit_name, "");
PTUDFExWriteParameterValue (&value, unit_name);
/* Description */
descr_status = ProParameterDescriptionGet (param, &description);
PT_TEST_LOG_NOT_FOUND_OK ("ProParameterDescriptionGet()");
if (descr_status != PRO_TK_NO_ERROR)
description = L"";
PTUDFExWriteDescription (description);
if (descr_status == PRO_TK_NO_ERROR)
{
ProWstringFree (description);
}
/* Designation */
status = ProParameterDesignationVerify (param, &is_designated);
PT_TEST_LOG_SUCC ("ProParameterDesignationVerify()");
PTUDFExWriteDesignation (is_designated);
/* Enumeration */
status = ProParameterIsEnumerated ( param, &is_enum, &array_values);
PT_TEST_LOG_SUCC ("ProParameterIsEnumerated");
PTUDFExWriteEnumeration (is_enum, array_values);
if (status == PRO_TK_NO_ERROR)
{
ProArrayFree ((ProArray *) &array_values);
}
/* Range */
status = ProParameterRangeGet (param, &has_range, &min, &max);
PT_TEST_LOG_SUCC ("ProParameterRangeGet");
PTUDFExWriteRange (has_range, &min, &max);
/* Table set */
status = ProParameterTablesetGet (param, &table_set);
PT_TEST_LOG_NOT_FOUND_OK ("ProParameterTablesetGet");
if (status == PRO_TK_NO_ERROR)
{
status = ProParamtablesetLabelGet (table_set, label);
PT_TEST_LOG_SUCC ("ProParamtablesetLabelGet()");
}
else
{
ProStringToWstring (label, "");
}
PTUDFExWriteTable (label);
PTUDFExWriteParameterEnd ();
return PRO_TK_NO_ERROR;
}
/*====================================================================*\
FUNCTION: PTUDFExParamVisitAction
PURPOSE: Visit action to write all details about parameters.
\*====================================================================*/
ProError PTUDFExParamVisitAction (ProParameter* param, ProError status, ProAppData data)
{
ProMdl owner_model;
PTUDFExParameterWrite_low (param);
return PRO_TK_NO_ERROR;
}
/*====================================================================*\
FUNCTION: PTUDFExParamtableSetsWrite_low
PURPOSE: Write details about an array of parameter sets.
\*====================================================================*/
static ProError PTUDFExParamtableSetsWrite_low (ProParamtableSet* table_sets)
{
int i, size;
status = ProArraySizeGet (table_sets, &size);
PT_TEST_LOG_SUCC ("ProArraySizeGet()");
for (i = 0; i < size; i ++)
{
PTUDFExParamtableSetWrite_low (table_sets [i], PRO_B_TRUE);
}
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExParametersWrite_low
PURPOSE: Write details about the parameters and parameter sets on
this owner.
\*====================================================================*/
ProError PTUDFExParametersWrite_low (ProModelitem* owner)
{
status = ProArrayAlloc (0, sizeof (ProParamtableSet), 1,
(ProArray*) &tableset_array);
PT_TEST_LOG_SUCC ("ProArrayAlloc()");
status = ProParameterVisit (owner, NULL,
(ProParameterAction)PTUDFExParamVisitAction,
NULL);
PT_TEST_LOG_NOT_FOUND_OK ("ProParameterVisit()");
PTUDFExParamtableSetsWrite_low (tableset_array);
status = ProParamtablesetProarrayFree (tableset_array);
PT_TEST_LOG_SUCC ("ProParamtablesetProarrayFree()");
return PRO_TK_NO_ERROR;
}
/*====================================================================*\
FUNCTION: PTUDFExMdlParamtableSetsWrite_low
PURPOSE: Write details about all the parameter sets available to this model.
\*====================================================================*/
static ProError PTUDFExMdlParamtableSetsWrite_low (ProMdl mdl)
{
ProParamtableSet* table_sets;
int i, size;
status = ProMdlParamtablesetsCollect (mdl, &table_sets);
PT_TEST_LOG_SUCC ("ProMdlParamtablesetsCollect()");
PTUDFExParamtableSetsWrite_low (table_sets);
status = ProParamtablesetProarrayFree (table_sets);
PT_TEST_LOG_SUCC ("ProParamtablesetProarrayFree()");
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTUDFExParamtablesetByLabelGet
PURPOSE: Find a parameter set, by name.
\*====================================================================*/
ProError PTUDFExParamtablesetByLabelGet (ProMdl mdl, wchar_t* name,
ProParamtableSet* set)
{
ProParamtableSet* table_sets;
int i, size;
ProName label;
int result;
ProBoolean found = PRO_B_FALSE;
status = ProMdlParamtablesetsCollect (mdl, &table_sets);
PT_TEST_LOG_SUCC ("ProMdlParamtablesetsCollect()");
if (status != PRO_TK_NO_ERROR)
return (PRO_TK_E_NOT_FOUND);
status = ProArraySizeGet (table_sets, &size);
PT_TEST_LOG_SUCC ("ProArraySizeGet()");
for (i = 0; i < size; i ++)
{
status = ProParamtablesetLabelGet (table_sets[i], label);
PT_TEST_LOG_SUCC ("ProParamtablesetLabelGet()");
status = ProWstringCompare (label, name, PRO_VALUE_UNUSED, &result);
PT_TEST_LOG_SUCC ("ProWstringCompare()");
if (result == 0)
{
*set = table_sets[i];
found = PRO_B_TRUE;
continue;
}
ProParamtablesetFree (table_sets[i]);
}
ProArrayFree ((ProArray*)&table_sets);
if (found)
return (PRO_TK_NO_ERROR);
else
return (PRO_TK_E_NOT_FOUND);
}
/*====================================================================*\
FUNCTION: PTUDFExParamInfoWrite
PURPOSE: Write a text or CSV file with parameter info.
\*====================================================================*/
ProError PTUDFExParamInfoWrite (ProModelitem* param_owner,
PTUDFExParamInfoFormat f,
ProFileName output_file,
ProBoolean append,
ProParameterFilter filter_action,
ProAppData app_data)
{
ProError ret_status;
char filename [100];
char* flags = "w";
format = f;
ProWstringToString (filename, output_file);
if (append)
flags = "a";
file_ptr = PTApplsUnicodeFopen (filename, flags);
status = ProArrayAlloc (0, sizeof (ProParamtableSet), 1,
(ProArray*) &tableset_array);
PT_TEST_LOG_SUCC ("ProArrayAlloc()");
status = ProParameterVisit (param_owner, filter_action,
(ProParameterAction)PTUDFExParamVisitAction,
app_data);
PT_TEST_LOG_NOT_FOUND_OK ("ProParameterVisit()");
ret_status = status;
PTUDFExParamtableSetsWrite_low (tableset_array);
status = ProParamtablesetProarrayFree (tableset_array);
PT_TEST_LOG_SUCC ("ProParamtablesetProarrayFree()");
fclose (file_ptr);
return (ret_status);
}
/*====================================================================*\
FUNCTION: PTUDFExAEConstraintsWrite
PURPOSE: Write a text format file with table-imposed constraints.
\*====================================================================*/
ProError PTUDFExAEConstraintsWrite (ProModelitem* param_owner,
ProFileName output_file,
ProBoolean append)
{
ProError ret_status;
char filename [100];
char* flags = "w";
ProRelset rel_set;
wchar_t** constraints;
int size, i;
char c_constraint [PRO_LINE_SIZE * 4];
format = PT_UDF_EX_PARAM_INFO_TEXT;
ProWstringToString (filename, output_file);
if (append)
flags = "a";
file_ptr = PTApplsUnicodeFopen (filename, flags);
/* Write constraints on the AE parameters */
status = ProModelitemToRelset (param_owner, &rel_set);
PT_TEST_LOG_NOT_FOUND_OK ("ProModelitemToRelset()");
if (status == PRO_TK_NO_ERROR)
{
status = ProRelsetConstraintsGet (&rel_set, &constraints);
PT_TEST_LOG_NOT_FOUND_OK ("ProRelsetConstraintsGet()");
if (status == PRO_TK_NO_ERROR)
{
status = ProArraySizeGet (constraints, &size);
PT_TEST_LOG_SUCC ("ProArraySizeGet()");
if (size > 0)
{
ProTKSprintf (line, "There are %d table-imposed constraints on ",
size, c_constraint);
PTTestResfileStringWrite (line);
PTUDFExWriteModelitem (param_owner);
}
for (i = 0; i < size; i ++)
{
ProWstringToString (c_constraint, constraints[i]);
ProTKSprintf (line, " + Constraint %d: %s", i + 1, c_constraint);
PTTestResfileWrite (line);
}
ProWstringproarrayFree (constraints);
fclose (file_ptr);
return (PRO_TK_NO_ERROR);
}
}
ProTKSprintf (line, "There are no table-imposed constraints on ");
PTTestResfileStringWrite (line);
PTUDFExWriteModelitem (param_owner);
fclose (file_ptr);
return (PRO_TK_NO_ERROR);
}