http://uganswer.ugs.com /*HEAD REPORT_PART_ATTRIBUTES_WITHOUT_OPENING_PART CCC UFUN */
#include <stdio.h>
#include <string.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_cfi.h>
#include <uf_attr.h>
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
static int report_error( char *file, int line, char *call, int irc)
{
if (irc)
{
char err[133],
msg[133];
sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ",
irc, line, file);
UF_get_fail_message(irc, err);
/* NOTE: UF_print_syslog is new in V18 */
UF_print_syslog(msg, FALSE);
UF_print_syslog(err, FALSE);
UF_print_syslog("\n", FALSE);
UF_print_syslog(call, FALSE);
UF_print_syslog(";\n", FALSE);
if (!UF_UI_open_listing_window())
{
UF_UI_write_listing_window(msg);
UF_UI_write_listing_window(err);
UF_UI_write_listing_window("\n");
UF_UI_write_listing_window(call);
UF_UI_write_listing_window(";\n");
}
}
return(irc);
}
#define WRITE(X) UF_UI_open_listing_window(); UF_UI_write_listing_window(X)
static void combine_directory_and_wildcard(char *dir, char *fltr, char *spec)
{
if (!strcmp(dir, ""))
strcpy(spec, fltr);
else
{
UF_CALL(uc4575(dir, 0, "junk.xxx", spec));
strcpy(strstr(spec, "junk.xxx"), fltr);
}
}
static logical prompt_for_part_name(char *prompt, char *fspec)
{
int
resp;
char
filter[MAX_FSPEC_SIZE+1],
*p_dir,
*p_ext;
UF_CALL(UF_UI_ask_dialog_directory(UF_UI_PART_DIR, &p_dir));
UF_CALL(UF_UI_ask_dialog_filter(UF_UI_PART_OPEN_FLTR, &p_ext));
combine_directory_and_wildcard(p_dir, p_ext, filter);
UF_free(p_dir);
UF_free(p_ext);
if (!UF_CALL(UF_UI_create_filebox(prompt, "Part Name", filter, "", fspec,
&resp)) && (resp != UF_UI_CANCEL)) return TRUE;
else return FALSE;
}
static void do_it(void)
{
int
ii,
n_attrs;
UF_ATTR_part_attr_p_t
attrs;
char
msg[UF_UI_MAX_STRING_LEN],
part_name[MAX_FSPEC_SIZE+1] = { "" };
while (prompt_for_part_name("List attributes", part_name))
{
UF_CALL(UF_ATTR_ask_part_attrs_in_file(part_name,&n_attrs,&attrs));
sprintf(msg, "%s has %d attributes\n", part_name, n_attrs);
WRITE(msg);
for (ii = 0; ii < n_attrs; ii++)
{
sprintf(msg, " %d. %s = %s\n", ii+1, attrs[ii].title,
attrs[ii].string_value);
WRITE(msg);
}
if (n_attrs > 0) UF_free(attrs);
}
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int paramLen)
{
if (UF_CALL(UF_initialize())) return;
do_it();
UF_terminate();
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP