Date: 18-APR-2005
Subject: Sample Open C API program : test undo stack size
Note: GTAC provides programming examples for illustration only, and
assumes that you are familiar with the programming language being
demonstrated and the tools used to create and debug procedures. GTAC
support professionals can help explain the functionality of a particular
procedure, but we will not modify these examples to provide added
functionality or construct procedures to meet your specific needs.
/*HEAD TEST_UNDO_STACK_SIZE CCC UFUN */
#include <stdio.h>
#include <string.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_undo.h>
#include <uf_curve.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);
}
static void init_array(double *array, int n)
{
int
ii;
for (ii = 0; ii < n; ii++) array[ii] = 0;
}
static void do_it(void)
{
int
another_mark,
ii = 0,
mark_exists,
mark_id;
UF_CURVE_line_t
line_data;
tag_t
line_tag;
char
msg[UF_UI_MAX_STRING_LEN+1];
init_array(line_data.start_point, 3);
init_array(line_data.end_point, 3);
line_data.end_point[0] = 1.0;
UF_CALL(UF_UNDO_set_mark (UF_UNDO_visible, NULL_TAG, &mark_id));
do
{
sprintf(msg, "Mark %d...", ii++);
UF_CALL(UF_UI_set_status(msg));
UF_CALL(UF_CURVE_create_line(&line_data, &line_tag));
UF_CALL(UF_UNDO_set_mark (UF_UNDO_visible, NULL_TAG, &another_mark));
line_data.start_point[1] = ii;
line_data.end_point[1] = ii;
UF_CALL(UF_UNDO_ask_mark_exist(mark_id, NULL, &mark_exists));
} while (mark_exists && ii < 1000);
}
void ufusr(char *param, int *retcode, int paramLen)
{
if (!UF_CALL(UF_initialize()))
{
do_it();
UF_CALL(UF_terminate());
}
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}