<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">

<html>

<!--(==============================================================)-->
<!--(Document created with RoboEditor. )============================-->
<!--(==============================================================)-->

<head>

<title>uf_mom_extend examples</title>

<!--(Meta)==========================================================-->

<meta name=generator content="RoboHELP by eHelp Corporation - www.ehelp.com">
<meta name=generator-major-version content=0.1>
<meta name=generator-minor-version content=1>
<meta name=filetype content=kadov>
<meta name=filetype-version content=1>
<meta name=page-count content=1>
<meta name=layout-height content=9516>
<meta name=layout-width content=580>
<meta name=date content="02 1, 2006 9:54:17 AM">


<!--(Links)=========================================================-->

<link rel="StyleSheet" href="../css/main_styles.css">



</head>

<!--(Body)==========================================================-->


<body class="bodydocs" onLoad="top.pageLoader()" bgcolor="#FFFFFF">


<h1>uf_mom_extend Examples</h1>

<p>The following examples may help further explain the uf_mom_extend function. 
 <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->Comments 
 are called out in with a slash star (/*) and <span style="color: #008000;">green.</span></p>

<p>&nbsp;</p>

<p style="margin-left: 40px; color: #008000;">/*retrieve_mom_component_part_attr.c</p>

<p style="margin-left: 40px; color: #008000;">Description:</p>

<p style="margin-left: 80px; color: #008000;">This example extends the 
 TCL interpreter so that it can reteive component part attributes and write 
 the values back into TCL.</p>

<p style="margin-left: 80px; color: #008000;">The first arg is the primary 
 search title - once this is found the secondary search titles ( the remaining 
 args ) are sought.</p>

<p style="margin-left: 80px; color: #008000;">Compile this program and 
 put the dll in your UGII_CAM_POST_DIR.</p>

<p style="margin-left: 80px; color: #008000;">Look in UGANSWER for the 
 pb_cmd_for_comp_part_attr.tcl file which has the corrosponding procs that 
 load this function into memory and calls it.</p>

<p style="color: #008000; margin-left: 40px;">*/</p>

<p style="margin-left: 0px; color: #008000;">&nbsp;</p>

<p style="margin-left: 0px; color: #008000;">/* Include files */</p>

<p style="margin-left: 0px;"><span style="color: #0000ff;">#include</span> 
 &lt;stdio.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;stdlib.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;string.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;stdio.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_ui.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_param.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_mom.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_cam.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_cam_errors.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_obj.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_object_types.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_modl.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_cfi.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_assem.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_part.h&gt;<br>
<span style="color: #0000ff;">#include</span> &lt;uf_attr.h&gt;</p>

<p style="margin-left: 0px;">&nbsp;</p>

<p style="margin-left: 0px;"><span style="color: #0000ff;">#define</span> 
 DEBUG_ <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->FALSE<br>
<span style="color: #0000ff;">#define</span> MAX_ARGC 10<br>
<span style="color: #0000ff;">#define</span> ARG_VAL_STR_LENGTH 33</p>

<p style="margin-left: 0px;"><span style="color: #0000ff;">#define</span> 
 UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">static int</span> report_error( char *file, 
 int line, char *call, int irc)</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span> 
 (irc)</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->char</span> err[133],<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->msg[133];</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg, 
 &quot;*** ERROR code %d at line %d in %s:\n+++ &quot;,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->irc, 
 line, file);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_get_fail_message(irc, 
 err);</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/* 
 <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->NOTE: <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->UF_print_syslog 
 is new in V18 */</span></p>

<p><span style="color: #008000;"><!--kadov_tag{{<spaces>}}-->&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_print_syslog(msg, 
 FALSE);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_print_syslog(err, 
 FALSE);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_print_syslog(&quot;\n&quot;, 
 FALSE);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_print_syslog(call, 
 FALSE);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_print_syslog(&quot;;\n&quot;, 
 FALSE);</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;">&nbsp;<!--kadov_tag{{</spaces>}}-->if</span> (!UF_UI_open_listing_window())</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(msg);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(err);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(&quot;\n&quot;);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(call);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(&quot;;\n&quot;);</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->return</span>(irc);</p>

<p>}</p>

<p><span style="color: #0000ff;">static void</span> PrintErrorMessage( 
 <span style="color: #0000ff;">int</span> errorCode );</p>

<p><span style="color: #0000ff;">#define</span> WRITE(X) <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_open_listing_window(); 
 UF_UI_write_listing_window(X)</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">void</span> Debug_write(<span style="color: #0000ff;">char</span> 
 *string)</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->char</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->msg[MAX_LINE_SIZE+1];</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">if</span> (DEBUG_)</p>

<p>{</p>

<p>sprintf(msg,&quot;%s\n&quot;,string);<br>
WRITE(msg);</p>

<p>}</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}--></p>

<p>}</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">static int</span> allocate_memory(<span 
 style="color: #0000ff;">unsigned int</span> nbytes, <span style="color: #0000ff;">void</span> 
 **where)</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->int</span></p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->resp;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*where 
 = UF_allocate_memory(nbytes, &amp;resp);</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&nbsp;<!--kadov_tag{{</spaces>}}-->return</span> 
 resp;</p>

<p>}</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">static int</span> make_an_array(uf_list_p_t 
 *object_list, tag_t **objects)</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->int</span></p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->ii,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->n;<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->uf_list_p_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->temp;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_MODL_ask_list_count(*object_list, 
 &amp;n));</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(allocate_memory(n 
 * <span style="color: #0000ff;">sizeof</span>(tag_t), (<span style="color: #0000ff;">void</span> 
 **)objects));</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->for 
 (ii = 0, temp = *object_list; ii &lt; n; temp = temp-&gt;next, ii++)<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->(*objects)[ii] 
 = temp-&gt;eid;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_MODL_delete_list(object_list));</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->return</span> 
 n;</p>

<p>}</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">static</span> logical add_proto_to_list(tag_t 
 comp, void *user_data)</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->tag_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->proto 
 = UF_ASSEM_ask_prototype_of_occ(comp);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->uf_list_p_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*list 
 = (uf_list_p_t *)user_data;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_MODL_put_list_item(*list, 
 proto));</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->return 
 TRUE;</p>

<p>}</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">static</span> void report_load_status(UF_PART_load_status_p_t 
 status)</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->char</span></p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->msg[133];</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->int</span></p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->ii;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span> 
 (status-&gt;n_parts &gt; 0)</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_open_listing_window();<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(&quot;Load 
 notes:\n&quot;);</p>

<p>&nbsp;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->for</span> (ii = 
 0; ii &lt; status-&gt;n_parts; ii++)</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(&quot; 
 <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->&quot;);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(status-&gt;file_names[ii]);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(&quot; 
 - &quot;);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_get_fail_message(status-&gt;statuses[ii], 
 msg);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(msg);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(&quot;\n&quot;);</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_write_listing_window(&quot;\n&quot;);</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_free(status-&gt;statuses);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_free_string_array(status-&gt;n_parts, 
 status-&gt;file_names);</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p>}</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">static int</span> ask_all_assembly_parts(tag_t 
 part, tag_t **parts)</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->tag_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->cset;<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->uf_list_p_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->part_list;<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_PART_load_status_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->status;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_MODL_create_list(&amp;part_list));<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_MODL_put_list_item(part_list, 
 part));</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_ASSEM_ask_all_comp_cset(part, 
 &amp;cset));<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span> 
 (cset != NULL_TAG)</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_PART_open_cset(cset, 
 &amp;status));<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->report_load_status(&amp;status);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_ASSEM_apply_to_cset(cset, 
 add_proto_to_list, &amp;part_list));</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p>&nbsp;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->return</span> 
 make_an_array(&amp;part_list, parts);</p>

<p>}</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">extern int</span> extn_rtv_mom_cp_part_attr(<br>
 <span style="color: #0000ff;">void</span> *client_dat, <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<span 
 style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/* I This is mom_object 
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*/<br>
</span> <span style="color: #0000ff;">void</span> *interp, <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #008000;">&nbsp;<!--kadov_tag{{</spaces>}}-->/* I pointer 
 to the TCL interpreter <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->*/<br>
</span> <span style="color: #0000ff;">int</span> <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->argc, 
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/* I count of the 
 number of arguments <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->*/<br>
</span> <span style="color: #0000ff;">char</span> **argv <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/* I array of arguments 
 values <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*/</span> 
 <br>
 );</p>

<p>&nbsp;</p>

<p><span style="color: #0000ff;">extern</span> DllExport <span style="color: #0000ff;">void</span> 
 entry_rtv_mom_cp_part_attr( <span style="color: #0000ff;">char</span> 
 *parm,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->int 
 *returnCode, int rlen )</p>

<p>{</p>

<p><span style="color: #0000ff;">int</span> ret_code = 0;<br>
<span style="color: #0000ff;">void</span> *interp <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->= 
 NULL;<br>
logical local_initialize = FALSE;</p>

<p>&nbsp;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_MOM_id_t 
 <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->mom_id;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<span style="color: #008000;">&nbsp;<!--kadov_tag{{</spaces>}}-->/* 
 Initialize the API environment */</span></p>

<p><span style="color: #008000;"><!--kadov_tag{{<spaces>}}-->&nbsp;</span>&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span>( UF_is_initialized() 
 == 0 )</p>

<p>{</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->ret_code 
 = UF_initialize();<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span>( 
 ret_code != 0 )</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/****UF_initialize 
 failed so return **/</span></p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->return;<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->local_initialize 
 = TRUE;</p>

<p>}</p>

<p style="color: #008000;">/* get the TCL intepreter id from the ufusr 
 param --*/</p>

<p>(<span style="color: #0000ff;">void</span>)UF_MOM_ask_interp_from_param 
 ( parm, &amp;interp );</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;<span style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/****Get 
 the mom_id by passing in the parm pointer ****/</span></p>

<p>UF_MOM_ask_mom( parm, &amp;mom_id );</p>

<p style="color: #008000;">/* now extend the TCL interpreter with the following 
 functions</p>

<p style="color: #008000;"><!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->* 
 the following TCL extensions will be added EXTN_rtv_mom_cp_part_attr */</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->ret_code 
 = UF_MOM_extend_xlator ( mom_id, &quot;EXTN_rtv_mom_cp_part_attr&quot;,</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->extn_rtv_mom_cp_part_attr 
 );</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;<span style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/*** 
 If ret_code is non zero then an error has occured and</span></p>

<p style="color: #008000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->so 
 print the error ***/</p>

<p style="color: #008000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span><span style="color: #000000;">( 
 ret_code )<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->PrintErrorMessage( 
 ret_code );</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*returnCode 
 = 0;</p>

<p style="color: #008000;"><span style="color: #0000ff;"><!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->if</span><span 
 style="color: #000000;">( local_initialize == TRUE )<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_terminate();</span></p>

<p style="color: #000000;">}</p>

<p style="color: #008000;"><!--kadov_tag{{<spaces>}}-->&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->extern 
 int</span><span style="color: #000000;"> extn_rtv_mom_cp_part_attr(<br>
</span><span style="color: #0000ff;"> void</span><span style="color: #000000;"> 
 *client_data,</span> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->/* 
 I This is mom_object <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*/<br>
<span style="color: #0000ff;"> void</span><span style="color: #000000;"> 
 *interp,</span> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->/* 
 I pointer to the TCL interpreter <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*/<br>
 <span style="color: #0000ff;">int</span> <span style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->argc,</span> 
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->/* 
 I count of the number of arguments <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->*/<br>
 <span style="color: #0000ff;">char</span> <span style="color: #000000;">**argv</span> 
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->/* 
 I array of arguments values <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*/ 
 )</p>

<p style="color: #008000;"><!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}--></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->char</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->part_spec[UF_CFI_MAX_PATH_NAME_SIZE],<br>
msg[MAX_LINE_SIZE+1],<br>
client_attr_titles[MAX_ARGC][ARG_VAL_STR_LENGTH],<br>
str[33],<br>
mom_var_str[33];</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->int</span> ret_code 
 =0,</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->i,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->ii,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->j,<br>
jj,<br>
k,<br>
num,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->n_parts,<br>
arg_length;</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->tag_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*parts,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->part 
 = UF_PART_ask_display_part();</p>

<p style="color: #000000;">&nbsp;</p>

<p style="color: #000000;">logical<br>
local_initialize = FALSE,<br>
is_initialized = FALSE,<br>
key_title_found = FALSE;</p>

<p style="color: #000000;"><span style="color: #000000;"><br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_ATTR_part_attr_t<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->*attrs;</span></p>

<p style="color: #000000;">UF_MOM_id_t <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->mom_id_tag;</p>

<p style="color: #000000;">sprintf(msg,&quot;In extn_rtv_mom_cp_part_attr&quot;);<br>
Debug_write(msg);</p>

<p style="color: #000000;">&nbsp;</p>

<p style="color: #000000;"><span style="color: #0000ff;">if</span>( UF_is_initialized() 
 == 0 )</p>

<p style="color: #000000;">{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;UF_is_initialized() 
 == 0&quot;);<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->ret_code 
 = UF_initialize();</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;ret_code 
 is %d&quot;,ret_code);<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span>( ret_code 
 != 0 )</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #008000;">&nbsp;<!--kadov_tag{{</spaces>}}-->/****UF_initialize 
 failed so return **/</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->return</span> 1;</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->local_initialize 
 = TRUE;</p>

<p style="color: #000000;">}</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->mom_id_tag 
 = ( UF_MOM_id_t )client_data;</p>

<p style="color: #000000;">UF_CAM_is_session_initialized(&amp;is_initialized);</p>

<p style="color: #000000;"><span style="color: #0000ff;">if</span>( is_initialized 
 == TRUE )</p>

<p style="color: #000000;">{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;is_initialized 
 == TRUE&quot;);<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->for</span> (i = 1; 
 i &lt; argc; i++)</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;i 
 is %d&quot;,i);<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->arg_length 
 = (int)strlen(argv[i]);<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;argv[%d] 
 is %d chars long&quot;,i, arg_length );<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span>(arg_length 
 &gt; ARG_VAL_STR_LENGTH )</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p style="color: #000000;">sprintf(msg,&quot;ERROR - argv[%d] is greater 
 than %d chars&quot;,<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->i,ARG_VAL_STR_LENGTH 
 );<br>
uc1601(msg,1);<br>
Debug_write(msg);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->else</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p style="color: #000000;">strcpy(client_attr_titles[i-1],argv[i]);<br>
<span style="color: #000000;">sprintf(msg,&quot;client_attr_titles[%d] 
 is %s&quot;,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->i-1, 
 client_attr_titles[i-1]);<br>
Debug_write(msg);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;"><span style="color: #0000ff;">if</span> ((n_parts 
 = ask_all_assembly_parts(part, &amp;parts)) &gt; 0)</p>

<p style="color: #000000;">{<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;</span><span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->for</span><span style="color: #000000;"> 
 (ii = 0; ii &lt; n_parts; ii++)<br>
{<br>
sprintf(msg,&quot;ii = %d&quot;,ii);<br>
Debug_write(msg);<br>
UF_CALL(UF_PART_ask_part_name(parts[ii], part_spec));<br>
sprintf(msg,&quot;%s&quot;,part_spec);<br>
Debug_write(part_spec);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_ATTR_ask_part_attrs(parts[ii], 
 &amp;num, &amp;attrs));</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->for</span> (j = 0; 
 j &lt; num; j++)</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;j 
 = %d&quot;,j);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span>(strcmp(attrs[j].title,client_attr_titles[0]) 
 == 0 )</p>

<p style="color: #000000;"><span style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{<br>
sprintf(msg,&quot;%s = %s&quot;,<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->attrs[j].title,attrs[j].string_value);<br>
Debug_write(msg);<br>
sprintf(str,&quot;%s&quot;,attrs[j].string_value);<br>
sprintf(mom_var_str,&quot;attr_comp_PART(1)&quot;);<br>
Debug_write(mom_var_str);<br>
UF_CALL(UF_MOM_set_string(mom_id_tag,mom_var_str,str));<br>
key_title_found = TRUE;</span></p>

<p style="color: #008000;">/* start looking for secondary titles */</p>

<p style="color: #000000;"><span style="color: #0000ff;">for</span> (jj 
 = 1; jj &lt; argc-1 ; jj++)</p>

<p style="color: #000000;">{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;jj 
 = %d&quot;,jj);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->for</span> 
 (k = 0; k &lt; num; k++)</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;k 
 = %d&quot;,k);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span>(strcmp(attrs[k].title,client_attr_titles[jj])<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->== 
 0 )</p>

<p style="color: #000000;"><span style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(msg,&quot;%s 
 = %s&quot;,<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->attrs[k].title,attrs[k].string_value);</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(msg);<br>
<span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(str,&quot;%s&quot;,attrs[k].string_value);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->sprintf(mom_var_str,&quot;attr_comp_PART(%d)&quot;,jj+1);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Debug_write(mom_var_str);<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_CALL(UF_MOM_set_string(mom_id_tag,mom_var_str,str));</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;">} </p>

<p style="color: #000000;">} <span style="color: #008000;">/* end of for 
 (j = 0; j &lt; num; j++) */</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span> (num &gt; 
 0) UF_free( attrs);</p>

<p style="color: #000000;"><span style="color: #0000ff;">if</span> ( key_title_found 
 == TRUE )</p>

<p style="color: #000000;">{</p>

<p style="color: #000000;">ii = n_parts;</p>

<p style="color: #000000;">}</p>

<p style="color: #000000;">} <span style="color: #008000;">/* end of for 
 (ii = 0; ii &lt; n_parts; ii++) */</span></p>

<p style="color: #000000;">UF_free(parts);</p>

<p style="color: #000000;">}</p>

<p style="color: #000000;">}<span style="color: #008000;"> /* end of if( 
 is_initialized == TRUE ) */</span></p>

<p style="color: #000000;"><span style="color: #0000ff;">if</span>( local_initialize 
 == TRUE )</p>

<p style="color: #000000;">{</p>

<p style="color: #000000;">UF_terminate();</p>

<p style="color: #000000;">}</p>

<p style="color: #000000;"><span style="color: #0000ff;">return</span> 
 ret_code;</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #008000;">/*****************************************************************************</p>

<p style="color: #008000;">** <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->Utilities</p>

<p style="color: #008000;">*****************************************************************************/</p>

<p style="color: #008000;">/* Unload Handler<br>
<span style="color: #008000;">** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->This 
 function specifies when to unload your application from Unigraphics.<br>
** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->If 
 your application registers a callback (from a MenuScript item or a<br>
** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->User 
 Defined Object for example), this function MUST return<br>
** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->&quot;UF_UNLOAD_UG_TERMINATE&quot;. 
 <br>
** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->In 
 this example the dll should not be unloaded IMMEDIATELY because we are<br>
** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->going 
 to call the extension function we have registered */</span></p>

<p style="color: #000000;"><span style="color: #0000ff;">extern int</span> 
 ufusr_ask_unload( <span style="color: #0000ff;">void</span> )</p>

<p style="color: #000000;">{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->return</span>( UF_UNLOAD_UG_TERMINATE 
 );</p>

<p style="color: #000000;">}</p>

<p style="color: #008000;">/* PrintErrorMessage</p>

<p style="color: #008000;">**<br>
<span style="color: #008000;">** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Prints 
 error messages to standard error and the Unigraphics status<br>
** <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->line. 
 */</span></p>

<p style="color: #000000;"><span style="color: #0000ff;">static void</span> 
 PrintErrorMessage( <span style="color: #0000ff;">int</span> errorCode 
 )</p>

<p style="color: #000000;">{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->if</span> ( 0 != 
 errorCode )</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->{</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/* Retrieve the associated 
 error message */</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #0000ff;"><!--kadov_tag{{</spaces>}}-->char</span> message[133];<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_get_fail_message( 
 errorCode, message );</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span 
 style="color: #008000;"><!--kadov_tag{{</spaces>}}-->/* Print out the 
 message */<br>
</span><span style="color: #000000;"> <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->UF_UI_set_status( 
 message );</span></p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->fprintf( 
 stderr, &quot;%s\n&quot;, message );</p>

<p style="color: #000000;"><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p style="color: #000000;">}</p>

<p style="color: #000000;">&nbsp;</p>

<p style="border-top-width: 1px;
			border-top-color: #000000;
			border-top-style: Solid;">&nbsp;</p>

<p style="color: #008000;">*/=============================================================</p>

<p style="color: #008000;">proc PB_CMD_init_for_extended_libraries { } 
 {</p>

<p style="color: #008000;">#=============================================================</p>

<p style="color: #008000;">###############################################################################<br>
<span style="color: #008000;"># <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->This 
 proc is to be placed in the Start of Program as the first <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->custom 
 command. It's purpose is to load the extended function into <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->memory 
 so that it can be used at a later time.( see docs on <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->MOM_run_user_function 
 ). This proc also initializes the mom_vars <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->for 
 the extended function to write to. Reserving and initializing <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->these 
 mom_vars MUST be done for successful execution. In this case<br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->the 
 mom_var is a string so it is initialized as &quot;&quot; ( an empty string). 
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->We 
 set the names of the attribute titles to be searched for in the <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->component 
 part. mom_attr_comp_PART_title(1) is the primary search title <br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->once 
 this is found, the current component part file is searched and the <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->secondary 
 attributes are searched for and written back to the array <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->mom_attr_comp_PART 
 - the extended function will terminate and return <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->to 
 TCL. The extended function needs to be unloaded at <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Program 
 End Sequence - see PB_CMD_unload_extended_libraries <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->Look 
 in UGANSWER NXOPEN for Sample CAM API program to <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->retreive_mom_component_part_attr. 
 Compile this sample CAM API program <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->and 
 put the dll in your UGII_CAM_POST_DIR <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->#<br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->############################################################################## 
 */</span></p>

<p>global external_lib_rtv_mom_component_part_attr<br>
global mom_attr_comp_PART_title<br>
global mom_attr_comp_PART</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->set 
 external_lib_rtv_mom_component_part_attr [MOM_ask_env_var UGII_CAM_POST_DIR]retrieve_mom_component_part_attr.dll<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->MOM_run_user_function 
 $external_lib_rtv_mom_component_part_attr &quot;entry_rtv_mom_cp_part_attr&quot;</p>

<p style="color: #008000;">*/ initialize the mom variable array that will 
 be written to by the extended function <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->*/</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->for 
 { set i 1 } { $i &lt;= 4 } { incr i } { <br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->set 
 mom_attr_comp_PART($i) &quot;&quot;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->set 
 mom_attr_comp_PART_title(1) &quot;ITEM_NUMBER&quot;<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->set mom_attr_comp_PART_title(2) 
 &quot;DESCRIPTION&quot;<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->set mom_attr_comp_PART_title(3) 
 &quot;MATERIAL&quot;<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->set mom_attr_comp_PART_title(4) 
 &quot;REVISION&quot;</p>

<p style="color: #008000;">*/ call the extended function <!--kadov_tag{{<spaces>}}-->&nbsp;<!--kadov_tag{{</spaces>}}-->*/</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->EXTN_rtv_mom_cp_part_attr 
 $mom_attr_comp_PART_title(1) $mom_attr_comp_PART_title(2) \<br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->$mom_attr_comp_PART_title(3) 
 $mom_attr_comp_PART_title(4)</p>

<p>}</p>

<p style="color: #008000;">#=============================================================</p>

<p style="color: #008000;">proc PB_CMD_output_comp_part_attributes { } 
 {</p>

<p style="color: #008000;">#=============================================================</p>

<p style="color: #008000;">###############################################################################<br>
<span style="color: #008000;"># <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->This 
 proc writes the title and value of the component part attributes <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->This 
 custom command is usually placed in Start of Program <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->- 
 just after the % <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}--><br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->##############################################################################</span></p>

<p>global mom_attr_comp_PART_title<br>
global mom_attr_comp_PART</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->for 
 { set i 1 } { $i &lt;= 4 } { incr i } { <br>
 <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->MOM_output_literal 
 &quot;($mom_attr_comp_PART_title($i) $mom_attr_comp_PART($i))&quot;</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->}</p>

<p>}</p>

<p style="color: #008000;">#=============================================================</p>

<p style="color: #008000;">proc PB_CMD_unload_extended_libraries { } {</p>

<p style="color: #008000;">#=============================================================</p>

<p style="color: #008000;">################################################################################<br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->#<br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->This 
 proc unloads the extended function(s) <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->#<br>
# <!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->#<br>
################################################################################</p>

<p>global external_lib_rtv_mom_component_part_attr</p>

<p style="color: #008000;">/* unload extended function */</p>

<p><!--kadov_tag{{<spaces>}}-->&nbsp;&nbsp;<!--kadov_tag{{</spaces>}}-->MOM_unload_library 
 $external_lib_rtv_mom_component_part_attr</p>

<p>}</p>

</body>

</html>
