/*
 
uf_path.h
File Description:
    This is the Open C API interface to creating a tool path for an operation.

******************************************************************************/


#ifndef UF_PATH_H
#define UF_PATH_H


/***************************************************************************

 ***************************************************************************/


#include <uf_defs.h>
#include <libufun_cam_exports.h>

/***************************************************************************

 ***************************************************************************/


#define ERROR_UF_PATH_base     1365000



/********************************** Defines ***********************************/

#define UF_PATH_BAD_INPUT   (ERROR_UF_PATH_base + 1)


/********************************** TypeDefs **********************************/

/* UF_PATH_id_t is the identifier for referring to a UF_PATH */
typedef void   *UF_PATH_id_t;  /* is the identifier for referring to a
                                 UF_PATH. NOTE: A path identifier of
                                 the type UF_PATH_id_t has to be used
                                 as the input for all functions querying a
                                 path.
                              */
 


/****************************************************************************

   A path identifier of the type UF_PATH_id_t has to be used as the
   input for all functions querying a path

*****************************************************************************/



/****************************************************************************

  CAUTION: Do not use the xxxx_LAST_ELEMENT member of the following enums.

*****************************************************************************/


/*****************************************************************************

  The following two enums correspond to the CLAMP/ post command.
  Use axis type when using UF_PATH_CLAMP_AXIS_ON or UF_PATH_CLAMP_AXIS_OFF
  and UF_PATH_CLAMP_AXIS_NONE when using UF_PATH_CLAMP_ON or UF_PATH_CLAMP_OFF.
******************************************************************************/


enum UF_PATH_clamp_status_e
       {
          UF_PATH_CLAMP_ON,                  /* Generate CLAMP/ON */
          UF_PATH_CLAMP_OFF,                 /* Generate CLAMP/OFF */
          UF_PATH_CLAMP_AXIS_ON,             /* Generate CLAMP/<axis_type>,ON
                                             */

          UF_PATH_CLAMP_AXIS_OFF,            /* Generate CLAMP/<axis_type>,OFF
                                             */

          UF_PATH_CLAMP_STATUS_LAST_ELEMENT  /* Place holder do not use. */
       } ;
typedef enum UF_PATH_clamp_status_e UF_PATH_clamp_status_t;


enum UF_PATH_axis_e
       {
          UF_PATH_XAXIS,             /* Set axis type to X axis */
          UF_PATH_YAXIS,             /* Set axis type to Y axis */
          UF_PATH_ZAXIS,             /* Set axis type to Z axis */
          UF_PATH_AAXIS,             /* Set axis type to A axis */
          UF_PATH_BAXIS,             /* Set axis type to B axis */
          UF_PATH_CAXIS,             /* Set axis type to C axis */
          UF_PATH_AXIS_NONE,         /* Set axis type to none, to be used
                                        with UF_PATH_CLAMP_ON or
                                        UF_PATH_CLAMP_OFF */

          UF_PATH_AXIS_LAST_ELEMENT  /* Place holder, do not use */
       } ;
typedef enum UF_PATH_axis_e UF_PATH_axis_t;
/****************************************************************************

  Specify the head of the turret in a lathe. This is
  to be used in the TURRET/ (tool change) post command and the SELECT/HEAD
  (select head) post commands.

******************************************************************************/


enum UF_PATH_head_type_e
       {
          UF_PATH_HEADTYPE_NONE,        /* For no HEAD option */
          UF_PATH_HEADTYPE_FRONT,       /* For FRONT HEAD option */
          UF_PATH_HEADTYPE_REAR,        /* For REAR HEAD option */
          UF_PATH_HEADTYPE_RIGHT,       /* For RIGHT HEAD option */
          UF_PATH_HEADTYPE_LEFT,        /* For LEFT HEAD option */
          UF_PATH_HEADTYPE_SIDE,        /* For SIDE HEAD option */
          UF_PATH_HEADTYPE_SADDLE,      /* For SADDLE HEAD option */
          UF_PATH_HEADTYPE_LAST_ELEMENT /* Placeholder, do not use */
       } ;
typedef enum UF_PATH_head_type_e UF_PATH_head_type_t;

/****************************************************************************
  Specify the plane for the CUTCOM/ post command.
*****************************************************************************/


enum UF_PATH_plane_type_e
       {
          UF_PATH_PLANE_TYPE_NONE,        /* A cutter compensation plane is
                                             not specified. */

          UF_PATH_PLANE_TYPE_XY,          /* The cutter compensation plane is
                                             in the XY plane. */

          UF_PATH_PLANE_TYPE_XZ,          /* The cutter compensation plane is
                                             in the XZ plane. */

          UF_PATH_PLANE_TYPE_YZ,          /* The cutter compensation plane is
                                             in the YZ plane. */

          UF_PATH_PLANE_TYPE_LAST_ELEMENT /* Placeholder, do not use */
       } ;
typedef enum UF_PATH_plane_type_e UF_PATH_plane_type_t;
       
/****************************************************************************

  Specify the mode for the CUTCOM/ post command.

*****************************************************************************/


enum UF_PATH_cutcom_mode_e
       {
          UF_PATH_CUTCOM_OFF,              /* Turn cutter compensation off. */
          UF_PATH_CUTCOM_ON,               /* Turn cutter compensation on. */
          UF_PATH_CUTCOM_LEFT,             /* Set cutter compensation material
                                              side to left. */

          UF_PATH_CUTCOM_RIGHT,            /* Set cutter compensation material
                                              side to right. */

          UF_PATH_CUTCOM_MODE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_cutcom_mode_e UF_PATH_cutcom_mode_t;
 
/****************************************************************************

  Specify positioning for the CUTCOM/ post command.
  Used for positioning the cutcom command in the path output relative to
  a certain motion type.

*****************************************************************************/


enum UF_PATH_cutcom_on_e
       {
          UF_PATH_CUTCOM_ON_BEFORE_ENGAGE, /* Set cutter compensation on before
                                              engage. */

          UF_PATH_CUTCOM_ON_AFTER_ENGAGE, /* Set cutter compensation on after
                                              engage. */

          UF_PATH_CUTCOM_ON_BEFORE_MOTION, /* Set cutter compensation on before
                                              first motion. */

          UF_PATH_CUTCOM_ON_LAST_ELEMENT   /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_cutcom_on_e UF_PATH_cutcom_on_t;

/****************************************************************************

  Specify positioning for the CUTCOM/ post command.
  Used for positioning the cutcom command in the path output relative to
  a certain motion type.

*****************************************************************************/


enum UF_PATH_cutcom_off_e
       {
          UF_PATH_CUTCOM_OFF_BEFORE_RETRACT, /* Set cutter compensation off
                                                before retract. */

          UF_PATH_CUTCOM_OFF_AFTER_RETRACT, /* Set cutter compensation off
                                                after retract. */

          UF_PATH_CUTCOM_OFF_AFTER_MOTION, /* Set cutter compensation off
                                                after motion. */

          UF_PATH_CUTCOM_OFF_LAST_ELEMENT  /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_cutcom_off_e UF_PATH_cutcom_off_t;

/****************************************************************************

  Specify the direction of motion.

*****************************************************************************/


enum UF_PATH_direction_e
       {
          UF_PATH_DIRECTION_NONE,        /* Direction not specified. */
          UF_PATH_DIRECTION_CLOCKWISE,   /* Set the direction to clockwise. */
          UF_PATH_DIRECTION_COUNTER_CLW, /* Set the direction counter clockwise
                                         */

          UF_PATH_DIRECTION_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_direction_e UF_PATH_direction_t;

/****************************************************************************

  Specify the spindle speed unit.

*****************************************************************************/

enum UF_PATH_spindle_mode_e
       {
          UF_PATH_SPINDLE_MODE_RPM,  /* Set the spindle speed mode to RPM,
                                        revolutions per minute. */

          UF_PATH_SPINDLE_MODE_SFM,  /* Set the spindle speed to SFM, surface
                                        feet per minute. */

          UF_PATH_SPINDLE_MODE_SMM,  /* Set the spindle speed to SMM, surface
                                        meters per minute. */

          UF_PATH_SPINDLE_MODE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_spindle_mode_e UF_PATH_spindle_mode_t;

/****************************************************************************

  Specify output mode of the coolant.

*****************************************************************************/


enum UF_PATH_coolant_type_e
       {
          UF_PATH_COOLANT_TYPE_ON,   /* Turn coolant on. */
          UF_PATH_COOLANT_TYPE_MIST,   /* Turn coolant on in mist mode. */
          UF_PATH_COOLANT_TYPE_FLOOD,  /* Turn coolant on in flood mode. */
          UF_PATH_COOLANT_TYPE_TAP,  /* Turn coolant on in tap mode. */
          UF_PATH_COOLANT_TYPE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_coolant_type_e UF_PATH_coolant_type_t;

/****************************************************************************

  Specify the units of the DELAY/ post command.

*****************************************************************************/


enum UF_PATH_dwell_unit_e
       {
          UF_PATH_DWELL_SECONDS,          /* Set delay units to seconds. */
          UF_PATH_DWELL_REVOLUTIONS,     /* Set delay units to refolutions. */
          UF_PATH_DWELL_UNIT_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_dwell_unit_e UF_PATH_dwell_unit_t;

/****************************************************************************

  Specify the object of rotation in the ROTATE/ post command.

*****************************************************************************/


enum UF_PATH_rotation_object_e
       {
          UF_PATH_ROTATION_OBJECT_TABLE, /* Set rotation object to TABLE. */
          UF_PATH_ROTATION_OBJECT_HEAD, /* Set rotation object to HEAD. */
          UF_PATH_ROTATION_OBJECT_AAXIS, /* Set rotation object to A axis. */
          UF_PATH_ROTATION_OBJECT_BAXIS, /* Set rotation object to B axis. */
          UF_PATH_ROTATION_OBJECT_CAXIS, /* Set rotation object to C axis. */
          UF_PATH_ROTATION_OBJECT_LAST_ELEMENT  /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_rotation_object_e UF_PATH_rotation_object_t;

/****************************************************************************

  Specify the mode of rotation in the ROTATE/ post command.

*****************************************************************************/

enum UF_PATH_rotation_type_e
       {
          UF_PATH_ROTATION_NONE,    /* Specifies the absolute angular position
                                       in degrees. */

          UF_PATH_ROTATION_ANGLE,    /* Specifies the absolute angular
                                        position using ATANGL. */

          UF_PATH_ROTATION_ABSOLUTE,    /* Specifies the absolute angular
                                           position in degrees using ABSOL. */

          UF_PATH_ROTATION_INCREMENTAL,    /* Specifies the incremental angular
                                              position in degrees from its
                                              present position. */

          UF_PATH_ROTATION_TYPE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;

typedef enum UF_PATH_rotation_type_e UF_PATH_rotation_type_t;

/****************************************************************************

  Output the output mode string to the SET/MODES post command

*****************************************************************************/


enum UF_PATH_output_mode_e
       {
          UF_PATH_OUTPUT_MODE_ABSOLUTE,    /* Output motion as absolute
                                              motion from MCS origin. */

          UF_PATH_OUTPUT_MODE_INCREMENTAL, /* Output motion as incremental
                                              motion from previous position. */

          UF_PATH_OUTPUT_MODE_NONE,        /* Do not specify an output mode. */
          UF_PATH_OUTPUT_MODE_LAST_ELEMENT /* Placeholder, do not use. */
       };
typedef enum UF_PATH_output_mode_e UF_PATH_output_mode_t;

/****************************************************************************

  Output the type of machine string to the SET/MODES post command

*****************************************************************************/

enum UF_PATH_machine_mode_e
       {
          UF_PATH_MACHINE_MILL,    /* Specify the output to be in MILL mode. */
          UF_PATH_MACHINE_TURN,    /* Specify the output to be in TURN mode. */
          UF_PATH_MACHINE_PUNCH,  /* Specify the output to be in PUNCH mode. */
          UF_PATH_MACHINE_LASER,  /* Specify the output to be in LASER mode. */
          UF_PATH_MACHINE_TORCH,  /* Specify the output to be in plasma-arc
                                     mode. */

          UF_PATH_MACHINE_WIRE,   /* Specify the output to be in Wire EDM
                                     mode. */

          UF_PATH_MACHINE_MODE_NONE, /* Don't specify an output machine mode.*/
          UF_PATH_MACHINE_MODE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_machine_mode_e UF_PATH_machine_mode_t;

/****************************************************************************

  Output for the SET/MODES post command

*****************************************************************************/

enum UF_PATH_parallel_mode_e
       {
          UF_PATH_PARALLEL_ZAXIS,   /* Output motion along Z axis. */
          UF_PATH_PARALLEL_WAXIS,   /* Output motion along W axis. */
          UF_PATH_PARALLEL_VAXIS,   /* Output motion along V axis. */
          UF_PATH_PARALLEL_MODE_NONE,   /* Do not specify motion axis. */
          UF_PATH_PARALLEL_MODE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_parallel_mode_e UF_PATH_parallel_mode_t;

/****************************************************************************

  Output for the SET/MODES post command

*****************************************************************************/

enum UF_PATH_arc_mode_e
       {
          UF_PATH_ARC_LINEAR,   /* Only use linear interpolation to handle
                                   contouring moves. */

          UF_PATH_ARC_CIRCULAR, /* Use circular and linear interpolation. */
          UF_PATH_ARC_MODE_NONE, /* Don't specify the interpolation mode. */
          UF_PATH_ARC_MODE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_arc_mode_e UF_PATH_arc_mode_t;

/****************************************************************************

  Output the feedrate for the SET/MODES post command

*****************************************************************************/

enum UF_PATH_feedrate_mode_e
       {
          UF_PATH_FEEDRATE_OUTPUT_OFF, /* Use the feed rate given in FEDRAT. */
          UF_PATH_FEEDRATE_OUTPUT_IPM, /* Always use IPM for the feed rate. */
          UF_PATH_FEEDRATE_OUTPUT_MMPM, /* Always use MMPM for the feed rate.
                                        */

          UF_PATH_FEEDRATE_OUTPUT_IPR, /* Always use IPR for the feed rate.
                                        */

          UF_PATH_FEEDRATE_OUTPUT_MMPR, /* Always use MMPR for the feed rate.
                                        */

          UF_PATH_FEEDRATE_OUTPUT_INVERS, /* Output feed rates as inverse time.
                                          */

          UF_PATH_FEEDRATE_OUTPUT_MODE_NONE, /* Don't specify feed rate mode.*/
          UF_PATH_FEEDRATE_MODE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;

typedef enum UF_PATH_feedrate_mode_e UF_PATH_feedrate_mode_t;

/****************************************************************************

  Used in the SEQNO/ post command. The sequence number,
  sequence frequency and the sequence increment are valid only if this enum    is set to be UF_PATH_SEQNO_N.

*****************************************************************************/

enum UF_PATH_seqno_e
       {
          UF_PATH_SEQNO_N,   /* N is the sequencing number type. */
          UF_PATH_SEQNO_OFF, /* Terminates the output of sequence numbers
                                for succeeding blocks. */

          UF_PATH_SEQNO_ON,  /* Resumes the output of sequence numbers for
                                succeeding blocks. */

          UF_PATH_SEQNO_AUTO, /* Outputs the CL source record number which
                                 caused the block of output as the sequence
                                 number. */

          UF_PATH_SEQNO_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_seqno_e UF_PATH_seqno_t;

/****************************************************************************

  Specify the flush type in the Wire EDM post commands.

*****************************************************************************/

enum UF_PATH_flush_type_e
       {
          UF_PATH_FLUSH_ON,   /* Begins flushing. */
          UF_PATH_FLUSH_OFF,  /* Ends flushing. */
          UF_PATH_FLUSH_TYPE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_flush_type_e UF_PATH_flush_type_t;

/****************************************************************************

  Specify the path guide type in the Wire EDM post commands.

*****************************************************************************/

enum UF_PATH_guide_e
       {
          UF_PATH_GUIDE_NONE,   /* Leaves the guide unspecified. */
          UF_PATH_GUIDE_UPPER,  /* Specifies upper guide flushing nozzle. */
          UF_PATH_GUIDE_LOWER,  /* Specifies lower guide flushing nozzle. */
          UF_PATH_GUIDE_ALL,    /* Specifies both upper and lower guide
                                   flushing nozzle. */

          UF_PATH_GUIDE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_guide_e UF_PATH_guide_t;

/****************************************************************************

  Specify the pressure type in the Wire EDM post commands.

*****************************************************************************/

enum UF_PATH_pressure_e
       {
          UF_PATH_PRESSURE_NONE,  /* Leave pressure unspecified. */
          UF_PATH_PRESSURE_LOW,   /* Specifies low flushing pressure. */
          UF_PATH_PRESSURE_MEDIUM,   /* Specifies medium flushing pressure. */
          UF_PATH_PRESSURE_HIGH,   /* Specifies high flushing pressure. */
          UF_PATH_PRESSURE_REGISTER,   /* Use the value in the flush register
                                          to specify the flushing pressure. */

          UF_PATH_PRESSURE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_pressure_e UF_PATH_pressure_t;

/****************************************************************************

  Specify the tank type in the Wire EDM post commands.

*****************************************************************************/

enum UF_PATH_tank_type_e
       {
          UF_PATH_TANK_IN,  /* Fill the flushing tank. */
          UF_PATH_TANK_OUT,  /* Empty the flushing tank. */
          UF_PATH_TANK_TYPE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;

typedef enum UF_PATH_tank_type_e UF_PATH_tank_type_t;

/****************************************************************************

  Specifying whether an OPSKIP/ON or an OPSKIP/OFF
  post command is to be output.

*****************************************************************************/

enum UF_PATH_op_skip_e
       {
          UF_PATH_OP_SKIP_ON,  /* Set OPSKIP on. */
          UF_PATH_OP_SKIP_OFF,  /* Set OPSKIP off. */
          UF_PATH_OP_SKIP_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_op_skip_e UF_PATH_op_skip_t;

/****************************************************************************

  Specify the motion shape.

*****************************************************************************/

enum UF_PATH_shape_e
       {
          UF_PATH_SHAPE_LINEAR=0,      /* Motion shape linear  */
          UF_PATH_SHAPE_CIRCULAR_CW=1, /* Motion shape circular clockwise. */
          UF_PATH_SHAPE_CIRCULAR_CCW=2, /* Motion shape circular counter
                                           clockwise. */

          UF_PATH_SHAPE_HELICAL_CW=5,  /* Motion shape helical clockwise. */
          UF_PATH_SHAPE_HELICAL_CCW=6,  /* Motion shape helical counter
                                           clockwise. */

          UF_PATH_SHAPE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;

typedef enum UF_PATH_shape_e UF_PATH_shape_t;
/****************************************************************************

  Specify the motion type. UF_PATH_MOTION_TYPE_DEPARTURE and
  UF_PATH_MOTION_TYPE_THREAD_TURN are to be
  used only in specifying motion types on a lathe.
 
*****************************************************************************/

enum UF_PATH_motion_type_e
       {
          UF_PATH_MOTION_TYPE_UNDEFINED=0,  /* Motion type undefined. */
          UF_PATH_MOTION_TYPE_RAPID=1, /* Motion type rapid. */
          UF_PATH_MOTION_TYPE_ENGAGE=2, /* Motion type engage. */
          UF_PATH_MOTION_TYPE_CUT=3, /* Motion type cut. */
          UF_PATH_MOTION_TYPE_RETRACT=4, /* Motion type retract. */
          UF_PATH_MOTION_TYPE_FIRST_CUT=5, /* Motion type first cut. */
          UF_PATH_MOTION_TYPE_APPROACH=6, /* Motion type approach. */
          UF_PATH_MOTION_TYPE_STEPOVER=7, /* Motion type stepover. */
          UF_PATH_MOTION_TYPE_DEPARTURE=8, /* Motion type departure.  This is
                                              only valid for a lathe. */

          UF_PATH_MOTION_TYPE_RETURN=9, /* Motion type return. */
          UF_PATH_MOTION_TYPE_TRAVERSAL=10, /* Motion type traversal. */
          UF_PATH_MOTION_TYPE_THREAD_TURN=11, /* Motion type thread.  This is
                                                 only valid for a lathe*/

          UF_PATH_MOTION_TYPE_FROM=12, /* Motion type from. */
          UF_PATH_MOTION_TYPE_GOHOME=13, /* Motion type gohome. */
          UF_PATH_MOTION_TYPE_CYCLE=14, /* Motion type cycle. */
          UF_PATH_MOTION_TYPE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_motion_type_e UF_PATH_motion_type_t;

/****************************************************************************

  Specify the material side of the tool with
  respect to the job. This is meaningful for circular motion type only.

*****************************************************************************/


enum UF_PATH_side_e
       {
          UF_PATH_SIDE_UNDEFINED = 0, /* Material side undefined. */
          UF_PATH_SIDE_RIGHT = 1, /* Material side right. */
          UF_PATH_SIDE_ON = 2, /* On material. */
          UF_PATH_SIDE_LEFT = 3, /* Material side left. */
          UF_PATH_SIDE_LAST_ELEMENT /* Placeholder, do not use. */
       } ;

typedef enum UF_PATH_side_e UF_PATH_side_t;

/****************************************************************************

  Specify the feed rate units.

*****************************************************************************/

enum UF_PATH_feed_unit_e
       {
          UF_PATH_FEED_UNIT_NONE = 0, /* No feed unit. */
          UF_PATH_FEED_UNIT_PER_MINUTE = 1, /* Feed units in minutes. */
          UF_PATH_FEED_UNIT_PER_REVOLUTION = 2, /* Feed units in revolutions.
                                                */

          UF_PATH_FEED_UNIT_LAST_ELEMENT /* Placeholder, do not use. */
       } ;
typedef enum UF_PATH_feed_unit_e UF_PATH_feed_unit_t;

/****************************************************************************

  Specify contact data for a motion GOTO/.
 
*****************************************************************************/


struct UF_PATH_contact_data_s
{
   double contact_pt[3];          /*  contact point for the motion.  */
   double contact_axis[3];        /*  tool axis of contact point.  */
   double contact_arc_axis[3];    /*  Contact arc axis for circular motion.  */
   double contact_arc_center[3];  /*  Contact arc center for circular motion.  */
   double contact_arc_radius;     /*  contact arc radius for circular motion.  */
   UF_PATH_shape_t contact_shape; /*  used to describe shape of contact motion.  */
};
typedef struct UF_PATH_contact_data_s UF_PATH_contact_data_t;

/****************************************************************************

  Specify data for a linear motion GOTO/.  The position array is the
  coordinate of the point to go to, and the feed_value is the feed rate value.
 
*****************************************************************************/

struct UF_PATH_linear_motion_s
       {
          double                  position[3]; /* Coordinates of the point. */
          double                  tool_axis[3]; /* Tool axis specification. */
          double                  feed_value; /* Feed value. */
          UF_PATH_feed_unit_t     feed_unit;  /* Units of feed. */
          UF_PATH_motion_type_t   type; /* Motion type. */
       } ;
typedef struct UF_PATH_linear_motion_s UF_PATH_linear_motion_t;



/****************************************************************************

  Specify data for a circular motion CIRCLE.

*****************************************************************************/

struct UF_PATH_circular_motion_s
       {
          double                  start[3]; /* this array specifies the start
                                            point x,y,z coordinates(this should
                                            be the end point of the previous
                                            motion)
                                            */

          double                  start_tool_axis[3]; /* This array specifies
                                            the starting tool axis. */

          double                  end[3];/* this array specifies the end
                                         point x,y,z coordinates.
                                         */


          double                  end_tool_axis[3]; /* This array specifies
                                            the ending tool axis. */

          double                  arc_axis[3]; /* this array specifies the
                                               vector which is the axis of
                                               the motion.
                                               */

          double                  arc_center[3]; /* this array specifies the
                                                 x,y,z coordinates of the
                                                 center of the arc.
                                                 */

          double                  arc_radius; /* This is the radius of the
                                              arc. */

          double                  tolerance; /* Tolerance to be used for arc
                                                fits. */

          double                  feed_value; /* This is the feed rate
                                              value.
                                              */

          UF_PATH_feed_unit_t     feed_unit; /* This specifies the units of the
                                                feed value. */

          UF_PATH_motion_type_t   type;  /* This is the type of the motion. */
          UF_PATH_side_t          material_side; /* This specifies the material
                                                    side. */

          UF_PATH_shape_t         shape; /* This specifies the shape. */
       } ;

typedef struct UF_PATH_circular_motion_s UF_PATH_circular_motion_t;

/****************************************************************************

  Specify data for a Helical motion CIRCLE/...........,TIMES,n

*****************************************************************************/

struct UF_PATH_helical_motion_s
       {
          double                  start[3]; /* this array specifies the start
                                            point x,y,z coordinates(this should
                                            be the end point of the previous
                                            motion)
                                            */

          double                  start_tool_axis[3]; /* This array specifies
                                            the starting tool axis. */

          double                  end[3];/* this array specifies the end
                                         point x,y,z coordinates.
                                         */

          double                  end_tool_axis[3]; /* This array specifies
                                            the ending tool axis. */

          double                  arc_axis[3]; /* this array specifies the
                                               vector which is the axis of
                                               the motion.
                                               */

          double                  arc_center[3]; /* this array specifies the
                                                 x,y,z coordinates of the
                                                 center of the helix at
                                                 the end point.
                                                 */

          double                  arc_radius; /* This is the radius of the
                                              helix. */

          double                  tolerance; /* Tolerance to be used for arc
                                                fits. */

          double                  times;     /* Number of Turns including
                                                partial turn*/

          double                  feed_value; /* This is the feed rate
                                              value.
                                              */

          UF_PATH_feed_unit_t     feed_unit; /* This specifies the units of the
                                                feed value. */

          UF_PATH_motion_type_t   type;  /* This is the type of the motion. */
          UF_PATH_side_t          material_side; /* This specifies the material
                                                    side. */

          UF_PATH_shape_t         shape; /* This specifies the shape. */
       } ;

typedef struct UF_PATH_helical_motion_s UF_PATH_helical_motion_t;
/****************************************************************************

  Specify data for the tool change post command.

*****************************************************************************/


struct UF_PATH_tool_change_s
       {
          double                xoffset_value; /* offset value of the tool
                                               in the X direction.
                                               */

          double                yoffset_value; /* offset value of the tool
                                               in the Y direction.
                                               */

          double                zoffset_value; /* offset value of the tool
                                               in the Z direction.  This
                                               value is only used by mill. */

          double                tool_angle; /* the angle at which the tool
                                            is mounted.
                                            */

          double                radius; /* the nose radius of the tool */
          int                   tool_number; /*The tool number */
          int                   adjust_register; /* the register to use for
                                                 tool length compensation
                                                 */

          UF_PATH_head_type_t   head_type;  /* The type of the head. */
          logical               adjust_flag; /* the adjust register is output
                                             if and only if this is TRUE.
                                             */

          logical               tool_offset_flag; /* the tool offsets are
                                                  output if and only if this
                                                  is TRUE.
                                                  */

          logical               tool_number_flag; /* the tool number is output
                                                  if and only if this is TRUE.
                                                  */

          logical               tool_angle_radius_flag; /* the tool angle and
                                                        radius are output
                                                        if and only if this
                                                        TRUE
                                                        */

          logical               manual_change_flag; /* the string MANUAL is
                                                    output if and only
                                                    if this is TRUE.
                                                    */

       } ;
typedef struct UF_PATH_tool_change_s UF_PATH_tool_change_t;

/****************************************************************************

  Specify data for the tracking point change post command.

****************************************************************************/

struct UF_PATH_tracking_point_change_s
       {
          double                xoff;
          double                yoff;
          int                   adjust_register;
          int                   cutcom_register;
       } ;
typedef struct UF_PATH_tracking_point_change_s UF_PATH_tracking_point_change_t;


/****************************************************************************

  Specify the data for the SPINDL/ post command.

*****************************************************************************/

struct UF_PATH_spindle_on_s
       {
          double                   speed; /* is the speed of the spindle */
          double                   maxrpm; /* is the maximum allowed speed
                                           of the spindle
                                           */

          char                     range[20]; /* the spindle speed range */
          UF_PATH_spindle_mode_t   mode;    
          UF_PATH_direction_t      direction;
          logical                  speed_flag; /* the speed is output if and
                                               only if this flag is TRUE.
                                               */

          logical                  maxrpm_flag; /* the maximum speed is output
                                                if and only if this flag is
                                                TRUE.
                                                */

          logical                  range_flag; /* the range is output if and
                                               only if this flag is TRUE.
                                               */

       } ;

typedef struct UF_PATH_spindle_on_s UF_PATH_spindle_on_t;

/****************************************************************************

  Specify data for the ROTATE/ post command.

*****************************************************************************/

struct UF_PATH_rotate_s
       {
          double                      rotation_angle; /* is the angle by which
                                                      to rotate.
                                                      */

          UF_PATH_rotation_object_t   rotation_object;
          UF_PATH_rotation_type_t     rotation_type;
          UF_PATH_direction_t         rotation_direction;
          logical                     angle_flag; /* the rotation angle is
                                                  output if and only if
                                                  this flag is TRUE.
                                                  */

          logical                     rotref_flag; /* the string ROTREF is
                                                   output if and only if this
                                                   flag is TRUE.
                                                   */

        } ;
typedef struct UF_PATH_rotate_s UF_PATH_rotate_t;


/****************************************************************************

  Specify data for the FLUSH/ post command.

*****************************************************************************/


struct UF_PATH_flush_s
       {
          UF_PATH_flush_type_t   flush_type;
          UF_PATH_guide_t        flushing_guide;
          UF_PATH_pressure_t     flushing_pressure;
          logical                flush_register;
          logical                guide_flag;
          logical                pressure_flag;
       } ;
typedef struct UF_PATH_flush_s UF_PATH_flush_t;

/****************************************************************************

  Specify data for the CUTCOM/ post command.

*****************************************************************************/


struct UF_PATH_cutcom_s
       {
          UF_PATH_cutcom_mode_t   cutcom_mode;
          UF_PATH_plane_type_t    plane_type;
          UF_PATH_cutcom_on_t     cutcom_on_status;  
          UF_PATH_cutcom_off_t    cutcom_off_status;
          int                     adjust_register; /* the register to use for
                                                   cutter compensation
                                                   */
   
          logical                 full_cutcom_output; /* a full cutcom command
                                                      is output if and only
                                                      if this flag is TRUE.
                                                      */

          logical                 adjust_flag; /* the adjust register is
                                               output if and only if
                                               this flag is TRUE.
                                               */

       } ;
typedef struct UF_PATH_cutcom_s UF_PATH_cutcom_t;

struct UF_PATH_level_marker_s
       {
          double                  tool_axis[3]; /* Tool axis specification. */
          double                  depth;       /* the depth from top */
       } ;
typedef struct UF_PATH_level_marker_s UF_PATH_level_marker_t;

/******************************* Prototypes **********************************/


/*****************************************************************************
This function initializes the tool path header.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_init_tool_path(
UF_PATH_id_t path_id  /* <I>
                     Identifier passed from UF function
                     */

);

/*****************************************************************************
This function creates a contact linear motion.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_contact_linear_motion
(
  UF_PATH_id_t             path_id,
  UF_PATH_linear_motion_t *linear_motion_data,
  UF_PATH_contact_data_t  *contact_data
);

/*****************************************************************************
This function creates a contact circular motion.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int   UF_PATH_create_contact_circular_motion
(
  UF_PATH_id_t               path_id,
  UF_PATH_circular_motion_t *motion_data,
  UF_PATH_contact_data_t    *contact_data
);

/*****************************************************************************
This function signifies the end of the tool path. The "oper_id" is no
longer valid after this function executes.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_end_tool_path(
UF_PATH_id_t path_id  /* <I>
                     Identifier of the path to end
                     */

);

/*****************************************************************************
This function allows the creation of linear motion( GOTO/ ).

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_linear_motion(
UF_PATH_id_t path_id ,/* <I>
                     Path to perform action on
                     */

UF_PATH_linear_motion_t * linear_motion_data  /* <I>
                                             Structure specifying the linear
                                             motion
                                             */

);

/*****************************************************************************
This function allows the creation of circular motion (CIRCLE/ ).

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_circular_motion(
UF_PATH_id_t path_id ,/* <I>
                     Path to perform action on
                     */

UF_PATH_circular_motion_t * circular_motion_data  /* <I>
                                                 Structure defining the
                                                 circular motion.
                                                 */

);

/*****************************************************************************
This function allows the creation of helical motion (CIRCLE/.....,TIMES ).

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_helical_motion(
UF_PATH_id_t path_id ,/* <I>
                     Path to perform action on
                     */

UF_PATH_helical_motion_t * helical_motion_data  /* <I>
                                                 Structure defining the
                                                 helical motion.
                                                 */

);
/*****************************************************************************
This function allows the creation of a post command text string.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_text(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command text string
                  */

);

/*****************************************************************************
This function allows the creation of post command PPRINT/.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_pprint(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char* text  /* <I>
                 The text to output on the PPRINT command
                 */

);

/*****************************************************************************
This function allows the creation of the post command DISPLY/.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_opmessage(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char* text  /* <I>
                 The text to output to the operator.
                 */

);


/*****************************************************************************
This function allows the creation of the post command ORIGIN/. The
appended text is optional. If 'text' is NULL then no appended text
appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_origin(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const double origin_coordinates[3] ,/* <I>
                                   The origin x/y/z
                                   */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command SEQNO/. The
appended text is optional. If "text" is NULL then no appended text
appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_seqno(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_seqno_t seq_type ,/* <I>
                         The sequence type
                         */

int seq_number, /* <I>  
                  The sequence number, only valid if seq_type is
                  UF_PATH_SEQNO_N
               */


int seq_incr ,/* <I>
             Only valid if seq_type is UF_PATH_SEQNO_N
             */

int seq_freq ,/* <I>
             Only valid if seq_type is UF_PATH_SEQNO_N
             */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of post command SET/. The appended text is
optional. If 'text' is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_set_mode(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_output_mode_t ouput_mode ,/* <I>
                                 The output mode for this tool path.
                                 */

UF_PATH_feedrate_mode_t feedrate_mode ,/* <I>
                                      The feedrate mode for this tool path.
                                      */

UF_PATH_arc_mode_t arc_mode ,/* <I>
                            The arc mode for this tool path.
                            */

UF_PATH_parallel_mode_t parallel_mode ,/* <I>
                                      The parallel mode for this tool path.
                                      */

UF_PATH_machine_mode_t machine_mode ,/* <I>
                                    The machine mode for this tool path.
                                    */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command SELECT/HEAD.  The appended
text is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_select_head(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_head_type_t head_type ,/* <I>
                              The head type in the turret of the lathe.
                              */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This functions allows the creation of post command LOAD/TOOL(for mill) or
TURRET/ (for lathe). The appended text is optional. If "text" is NULL then no
appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_tool_change(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_tool_change_t * tool_change_data ,/* <I>
                                         Data specifying the tool change to
                                         make.
                                         */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command TRACKING POINT CHANGE.
The appended text is optional.
If "text" is NULL then bo appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_tracking_point_change
(
  UF_PATH_id_t                     path_id,          /* <I> The path id for this event */
  UF_PATH_tracking_point_change_t *tool_change_data  /* <I> Data specifying the tracking point change to make. */
);

/*****************************************************************************
This function allows the creation of post command SPINDL/. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_spindle_on(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_spindle_on_t * spindle_on_data ,/* <I>
                                       The spindle data for the command.
                                       */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command SPINDL/OFF. The appended text
is optional. If "text" is NULL then bo appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_spindle_off(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command SPINDL/REVERSE.
The appended text is optional.
If "text" is NULL then bo appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_spindle_reverse(
UF_PATH_id_t path_id ,/* <I> The path id for this event */
const char * text  /* <I> The post command appended text */
);

/*****************************************************************************
This function allows the creation of post command COOLNT/.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_coolant_on(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_coolant_type_t coolant_type ,/* <I>
                                    The coolant type.
                                    */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command COOLNT/OFF.  The appended
text is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_coolant_off(
UF_PATH_id_t paht_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command OPSTOP. The appended text is
optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_op_stop(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post comand OPSKIP/. The appended text is
optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_op_skip(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_op_skip_t skip_option ,/* <I>
                              The skip option.
                              */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of post command STOP. The appended text is
optional. If the "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_stop(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command DELAY/. The appended text is
optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_dwell(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

double dwell_value ,/* <I>
                   Amount of delay
                   */

UF_PATH_dwell_unit_t dwell_unit ,/* <I>
                                The units to use for the delay.
                                */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command AUXFUN/. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_auxfun(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

int auxfun_code ,/* <I>
                Auxfun value
                */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of post command PREFUN/. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_prefun(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

int prefun_code ,/* <I>
                Prefun value
                */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of post command CLAMP/. The appended text is
optional. If "text" is NULL then no appended test appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_clamp(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_clamp_status_t clamp_status ,/* <I>
                                    The clamp status.
                                    */

UF_PATH_axis_t axis_type ,/* <I>
                         The axis type.
                         */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of post command SET/ADJUST.  The appended
text is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_tool_length_comp(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

int tool_comp_register ,/* <I>
                       Tool length compensation register value
                       */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of post command SELECT/TOOL.  The appended
text is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_tool_preselect(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

int tool_number ,/* <I>
                Tool number value
                */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command ROTATE/. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_rotate(
UF_PATH_id_t path_id ,/* <I>
                     The path ID for this event
                     */

UF_PATH_rotate_t * rotate_data ,/* <I>
                               The data specifying the rotation.
                               */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command LOAD/WIRE.  The appended
text is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_thread_wire(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command UNLOAD/WIRE.  The appended
text is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_cut_wire(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command FLUSH/. The appended text is
optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_flush(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_flush_t * flush_data ,/* <I>
                             The flush data.
                             */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command FLUSH/IN. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_flush_tank(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_tank_type_t tank_type ,/* <I>
                              Specifies the tank type.
                              */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command POWER/. The appended text is
optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_power(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

double power_value ,/* <I>
                   Value of the power register
                   */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command SET/UPPER. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_wire_guides(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of the post command FEDRAT/.  The appended
text is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_fedrat(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

double fedrat_value ,/* <I>
                    Feed rate value
                    */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of post command STAN/. The appended text is
optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_wire_angle(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

double slope_value ,/* <I>
                   Slope of the wire
                   */

double angle_value ,/* <I>
                   Angle of the wire
                   */

logical angle_flag ,/* <I>
                   Flag to indicate if angle is specified
                   */

const char * text  /* <I>
                  The post command appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command CUTCOM/. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_wire_cutcom(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_cutcom_mode_t cutcom_mode ,/* <I>
                                  The mode for the CUTCOM command.
                                  */

int adjust_register ,/* <I>
                    Adjust register value
                    */

logical cutcom_off_flag ,/* <I>
                        Flag indicating if cutcom off is to be
                        output
                        */

logical adjust_flag ,/* <I>
                    Flag to indicate if the adjust register is
                    specified
                    */

const char * text  /* <I>
                  The post comand appended text
                  */

);

/*****************************************************************************
This function allows the creation of post command CUTCOM/. The appended text
is optional. If "text" is NULL then no appended text appears.

Environment: Internal  and  External

See Also:

History:
******************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_cutcom(
UF_PATH_id_t path_id ,/* <I>
                     The path id for this event
                     */

UF_PATH_cutcom_t * cutcom_data ,/* <I>
                               Structure specifying the cutcom data.
                               */

const char * text  /* <I>
                  The post command appended text
                  */

);


/*****************************************************************************
This function allows the creation of level marker.

Environment: Internal  and  External

See Also:

History:
*****************************************************************************/

extern UFUN_CAMEXPORT int UF_PATH_create_level_marker(
UF_PATH_id_t path_id ,/* <I> Path to perform action on */
UF_PATH_level_marker_t * level_marker_data  /* <I> Structure specifying the level marker data */
);



#undef EXPORTLIBRARY

#endif