#ifndef PROUTIL_H
#define PROUTIL_H

#include <ProToolkit.h>
#include <ProSizeConst.h>
#include <ProObjects.h>
#include <ProMdl.h>
#include <ProWchar.h>
#include <ProArray.h>

typedef struct
{
   double xoffset;       /* valid values are b/w 0.0 and 1.0 */
   double yoffset;       /* valid values are b/w 0.0 and 1.0 */
} ProInfoWindowLocation;

typedef struct
{
   int rows;             /* valid values are b/w 6 & 33 */
   int columns;          /* valid values are b/w 8 and 80 */
} ProInfoWindowSize;

typedef enum
{
   A_SIZE_PLOT         =   0,
   B_SIZE_PLOT         =   1,
   C_SIZE_PLOT         =   2,
   D_SIZE_PLOT         =   3,
   E_SIZE_PLOT         =   4,
   A4_SIZE_PLOT        =   5,
   A3_SIZE_PLOT        =   6,
   A2_SIZE_PLOT        =   7,
   A1_SIZE_PLOT        =   8,
   A0_SIZE_PLOT        =   9,
   F_SIZE_PLOT         =  10,
   CE_EMPTY_PLOT       =  11,
   CE_EMPTY_PLOT_MM    =  12,
   VARIABLE_SIZE_IN_MM_PLOT = 99,  /* Use this when you are using mm units */
   VARIABLE_SIZE_PLOT  = 100       /* Use this when you are using Inch units */
} ProPlotPaperSize;



typedef struct pro_plot_options
{
  ProCharName plotter_name;    /* c.f. The print dialog for support names  
                                eg: POSTSCRIPT, COLORPOSTSC
                                Note: MS_PRINT_MGR is not supported */
  ProPlotPaperSize paper_size; /* A_SIZE_PLOT, ... VARIABLE_SIZE_PLOT, above */
  double paper_size_xy[2];     /* X, Y paper dimensions */
                               /* only for variable paper size */

  int output_quality;          /* integer range [1 - 3] */
  double user_scale;           /* a positive non-zero numeric value */
  int pen_slew;                /* 1 No pen slew; 2 Slew */
  double pen_velocity[2];      /* X, then Y pen velocity  */
  int page_range_choice;       /* Drawings */
                               /* 1 - ALL, 2 - Current, 3 - Range of pages */

  int page_range[2];           /* rage: 1 - 99 */
  int segmented_output;        /* If output is larger than paper */
                               /* PRO_YES/NO_TYPE */
  /* Note:  this option may only be set to YES if plotting a single page.  */

  int label_plot;              /* PRO_YES/NO_TYPE */
  int separate_plot_files;     /* if multiple sheets;  PRO_YES/NO_TYPE */
} ProPlotOptions;


typedef   void *    Pro2dExportdata;

typedef struct pro_productview_export_options* ProProductviewExportOptions;

typedef enum
{
   PRO_PV_FORMAT_PVS          = 1,
   PRO_PV_FORMAT_ED           = 2,
   PRO_PV_FORMAT_EDZ          = 3,
   PRO_PV_FORMAT_PVZ          = 4
} ProProductviewFormat;    /* Creo Parametric to Creo View Export Format Types */

typedef enum
{
   PRO_UNDEFINED_FILE          =  -1,
   PRO_RELATION_FILE           =   1,                 /* Import & Export */
   PRO_IGES_SECTION            =   2,                 /* Import */
   PRO_FEATURE_INFO            =   3,                 /* Export */
   PRO_MODEL_INFO              =   PRO_FEATURE_INFO,  /* Export */
   PRO_PROGRAM_FILE            =   4,                 /* Import & Export */
   PRO_CONFIG_FILE             =   5,                 /* Import */
   PRO_TABLE_FILE              =   6,                 /* N/A */
   PRO_ASCII_FILE              =   7,                 /* N/A */
   PRO_IGES_FILE               =   8,                 /* Import & Export */
   PRO_DXF_FILE                =   9,                 /* Import & Export */
   PRO_RENDER_FILE             =  10,                 /* Export */
   PRO_SLA_ASCII_FILE          =  11,                 /* Export */
   PRO_SLA_BINARY_FILE         =  12,                 /* Export */
   PRO_CATIAFACETS_FILE        =  13,                 /* Export */
   PRO_BOM_FILE                =  14,                 /* Export */
   PRO_DWG_SETUP_FILE          =  15,                 /* Import & Export */
   PRO_FEAT_INFO               =  16,                 /* Export */
   PRO_SPOOL_FILE              =  17,                 /* Import */
   PRO_MFG_OPER_CL             =  18,                 /* Export */
   PRO_MFG_FEAT_CL             =  19,                 /* Export */
   PRO_MATERIAL_FILE           =  20,                 /* Export */
   PRO_IGES_3D_FILE            =  21,                 /* Export */
   PRO_STEP_FILE               =  22,                 /* Import & Export */
   PRO_VDA_FILE                =  23,                 /* Export */
   PRO_SET_FILE                =  24,                 /* Import & Export */ /* This type is obsolete.*/
   PRO_CGM_FILE                =  25,                 /* Export */
   PRO_INVENTOR_FILE           =  26,                 /* Export */
   PRO_FIAT_FILE               =  27,                 /* Export */
   PRO_CONNECTOR_PARAMS_FILE   =  28,                 /* Export */
   PRO_CATIA_FILE              =  29,                 /* Export */  /* This type is obsolete.*/
   PRO_CABLE_PARAMS_FILE       =  30,                 /* Export */
   PRO_ASSEM_TREE_CFG_FILE     =  31,                 /* Import */
   PRO_OPTEGRA_VIS_FILE        =  32,              /* Export supported through*/
                                               /*ProIntfSliceFileExport() only*/
   PRO_WIRELIST_FILE           =  33,                 /* Import */
   PRO_DWG_FILE                =  34,                 /* Import & Export */ 
   PRO_OPTEGRA_VIS_BINARY_FILE =  35,                 /* Export */
   PRO_ACIS_FILE               =  36,                 /* Export */
   PRO_CATIA_DIRECT_FILE       =  37,                 /* Export */
   PRO_MEDUSA_FILE             =  38,                 /* Export & Import */
   PRO_DIFF_REPORT_FILE        =  39,                 /* Export */
   PRO_STHENO_FILE             =  40,                 /* Export */
   PRO_SNAP_TIFF_FILE          =  41,                 /* Export */ 
   PRO_CCD_DRAWING_FILE        =  42,                 /* Import, CoCreate Drafting drawing */
   PRO_AMF_FILE                =  43,                 /* Export */
   PRO_3MF_FILE                =  44,                 /* Import & Export */ /* This type is obsolete.*/
   PRO_PIP_INP_FILE            =  45                  /* for internal use only */
} ProImportExportFile;

#define PRO_IMPORT_EXPORT_NO_FLAGS (0)
/* For ProInputFileReadWithFlags, allow interactive UI, e.g. for errors in reading/executing
   an imported PRO_PROGRAM_FILE */
#define PRO_IMPORT_EXPORT_ALLOW_UI (1<<0)

typedef enum
{
   PRO_CADAM_FILE              =  35,                /* Import */ /* Reserved for internal use */
   PRO_CADAM_DIRECT_FILE       =  36,                /* Import */ /* Reserved for internal use */
   PRO_CADAM_CPTR_FILE         =  37                 /* Import */ /* Reserved for internal use */
} ProImportCadam ;

typedef enum
{
    PRORASTERDEPTH_8  = 1,
    PRORASTERDEPTH_24 = 2
} ProRasterDepth;

typedef enum {
   PRORASTERTYPE_BMP,
   PRORASTERTYPE_TIFF,
   PRORASTERTYPE_EPS,
   PRORASTERTYPE_JPEG
} ProRasterType;

typedef enum {
   PRORASTERDPI_100 = 100,
   PRORASTERDPI_200 = 200,
   PRORASTERDPI_300 = 300,
   PRORASTERDPI_400 = 400,
   PRORASTERDPI_500 = 500,
   PRORASTERDPI_600 = 600
} ProDotsPerInch;

typedef enum
{
PRO2DEXPORT_CURRENT_TO_MODEL_SPACE,   /* Default , export only the drawing's
                                         current sheet  to model space */
PRO2DEXPORT_CURRENT_TO_PAPER_SPACE, /* Export only the drawing's current 
                                       sheet to paper space.
                                       This is the same as 
                                       PRO2DEXPORT_CURRENT_TO_MODEL_SPACE for 
                                       formats which do not support the concept
                                       of model and paper space. */
PRO2DEXPORT_ALL,      /* Export all sheets to single file (as paper space, 
                         if applicable to that format type). */
PRO2DEXPORT_SELECTED   /* Export selected sheets to the file as paper space (set
                          using Pro2dExportdataSheetsSet()), and/or one sheet to
                          model space (set using 
                          Pro2dExportdataModelspacesheetSet()). */
} Pro2dExportSheetOption;

typedef enum {
   PROCGMTYPE_CLEAR_TEXT = 1,
   PROCGMTYPE_MIL_SPEC,
   PROCGMTYPE_ABSTRACT,
   PROCGMTYPE_METRIC
} ProCGMType;

/*===========================================================================*/

PRO_BEGIN_C_DECLS

LIB_COREUTILS_API  ProError ProConfigoptSet (ProName option,
                                      ProPath option_value );
/*
    Purpose: Sets the value of the specified configuration file option. If the 
             option is a multi-string option (e.g. search_path) the function 
             adds a new entry for this option without modifying existing 
             entries.

    Input Arguments:
        option - The keyword string. This can include uppercase and lowercase 
                 letters.
        option_value - The value of the keyword string, as it must appear in 
                       the configuration file.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the value.
        PRO_TK_E_NOT_FOUND - The specified option was not found.
        PRO_TK_BAD_INPUTS - You cannot set the specified option.

*/

LIB_COREUTILS_API  ProError ProConfigoptionGet (ProName option,
                                 ProPath option_value );
/*
    Purpose: Retrieves the current value for the specified configuration file 
             option. This function truncates the results of the query to 
             PRO_PATH_SIZE-1 characters. 
             <p><b>Note: </b>While retrieving the value of an option that may 
             have multiple values, use ProConfigoptArrayGet() instead of this 
             function.

    Input Arguments:
        option - The keyword string. This can include uppercase and lowercase 
                 letters.

    Output Arguments:
        option_value - The value of the keyword string, as it appears in the 
                       configuration file.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - Either the specified option or the option value is 
                            NULL.
        PRO_TK_E_NOT_FOUND - The specified option was not found.
        PRO_TK_LINE_TOO_LONG - The function returned the option value, but the 
                               option is longer than the maximum 
                               <i>ProPath</i>.

*/

LIB_COREUTILS_API  ProError  ProConfigoptArrayGet (ProName option, ProPath** value_array);
/*
    Purpose: Retrieves the current value for the specified configuration file 
             option. This function supports multi-string options (e.g. 
             search_path). 
             <p><b>Note: </b>Use this function instead of ProConfigoptGet() 
             while retrieving the value of an option that may have multiple 
             values or a path-length string.

    Input Arguments:
        option - The keyword string. This can include uppercase and lowercase 
                 letters.

    Output Arguments:
        value_array - The option value(s), in a ProArray. The function 
                      allocates this array, free it with ProArrayFree().

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The arguments provided are invalid.
        PRO_TK_E_NOT_FOUND - The specified option was not found.
        PRO_TK_LINE_TOO_LONG - The function returned the option value, but the 
                               option is longer than the maximum 
                               <i>ProPath</i>.

*/

extern ProError ProInfoWindowDisplay ( ProPath file_name,
                                       ProInfoWindowLocation* location,
                                       ProInfoWindowSize* size );
/*
    Purpose: Creates a window and shows the text of the file specified by 
             <i>file_name</i>.
             <p> NOTE: 
             <p> On UNIX machines, file names are case sensitive.

    Input Arguments:
        file_name - The file name. The name can include the directory path.
        location - The location of the window. If this is NULL, the function 
                   uses the default window position settings.
        size - The size of the window, in the number of lines and columns. If 
               this is NULL, the function uses the default values. The default 
               value for rows is 24, and the default for columns is 80. The 
               valid values for rows is between 6 and 33. The valid values for 
               columns is between 8 and 80.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully created the window.
        PRO_TK_BAD_INPUTS - The specified file name is NULL, or is empty.
        PRO_TK_GENERAL_ERROR - The function cannot open the file, or cannot 
                               find it.

*/


extern ProError ProFileEdit ( ProPath file_name );
/*
    Purpose: Opens an edit window for the specified file using the default text 
             editor.

    Input Arguments:
        file_name - The full file name, including the path, of the file to be 
                    edited

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The file was successfully edited.
        PRO_TK_NO_CHANGE - The user quit from the editor.

*/


extern ProError ProToolkitApplExecPathGet ( ProPath exec_path );
/*
    Purpose: Retrieves the <i>exec_path</i> information.

    Input Arguments:
        none

    Output Arguments:
        exec_path - The path and the name of the executable where the 
                    <i>exec_file</i> is located

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The <i>text_path</i> argument is NULL

*/

extern ProError ProToolkitApplTextPathGet ( ProPath text_path );
/*
    Purpose: Retrieves the path to the directory containing the "text" 
             directory for the application.

    Input Arguments:
        none

    Output Arguments:
        text_path - The path to where the text files (message and menu files) 
                    are located

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The <i>text_path</i> argument is NULL.

*/

extern ProError ProDirectoryChange ( ProPath path );
/*
    Purpose: Changes Creo Parametric to another working directory. The 
             directory can be relative or absolute.
             <p> You can use this function in conjuction with the file 
             management functionality to save and retrieve objects.

    Input Arguments:
        path - The path to the new directory

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully changed the directory.
        PRO_TK_BAD_INPUTS - The specified path is invalid.
        PRO_TK_CANT_ACCESS - You are unable to access the specified directory.
        PRO_TK_INVALID_NAME - You specified an invalid name.

*/

   
extern ProError ProDirectoryCurrentGet ( ProPath path );
/*
    Purpose: Gets the absolute path name of the current working directory for 
             Creo Parametric.

    Input Arguments:
        none

    Output Arguments:
        path - The absolute path name of the current working directory

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_E_NOT_FOUND - The function was unable to find current working 
                             directory.

*/


extern ProError ProOptionOrderedVerify ( ProCharName option,
                                         ProBoolean* p_option_exist );
/*
    Purpose: Determines whether the specified option is available, such as 
             Pro/MESH.

    Input Arguments:
        option - The option name.

    Output Arguments:
        p_option_exist - This is PRO_B_TRUE if the option is available. 
                         Otherwise, this is PRO_B_FALSE.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully returned the information.
        PRO_TK_BAD_INPUTS - The specified option is invalid.
        PRO_TK_E_NOT_FOUND - The specified option was not found.

*/


extern wchar_t* ProStringToWstring ( wchar_t* wstr, char* str );
/*
    Purpose: Converts a multibyte character string to a wide string.
             <p> NOTES: 
             <ul> 
             <li>This function accepts only strings only in the active encoding 
             of the Creo Parametric TOOLKIT application. Strings from other 
             encodings may not be properly converted. 
             <li>This function does not change the encoding of the string 
             during the conversion. 
             <li>This function replicates the performance of <i>strtows</i>, 
             which exists on some operating systems.
             </ul>

    Input Arguments:
        str - The character string to convert, terminated by NULL character

    Output Arguments:
        wstr - The buffer to contain the widestring. The caller must declare or 
               allocate enough memory for this argument.

    Return Values:
        The wide string

*/


extern char* ProWstringToString ( char* str, wchar_t* wstr );
/*
    Purpose: Converts a wide string to a multibyte character string.
             <p> NOTES: 
             <ul> 
             <li>This function accepts strings only in the active encoding of 
             the Creo Parametric TOOLKIT application. Strings from other 
             encodings may not be properly converted. 
             <li>This function does not change the encoding of the string 
             during the conversion. 
             <li>This function replicates the performance of <i>wstostr</i>, 
             which exists on some operating systems. 
             <li>Each wide-string character is either 2 or 4 bytes, depending 
             on the machine. For applications to be used in a multi-byte 
             environment, PTC recommends providing enough memory in the "str" 
             buffer to store 3 * the length of the "wstr" input.
             </ul>

    Input Arguments:
        wstr - The wide string, terminated by WNULL character

    Output Arguments:
        str - The buffer to contain the multibyte character string. The caller 
              must declare or allocate enough memory for this argument.

    Return Values:
        The multibyte character string

*/

extern ProError ProWcharSizeVerify ( int application_size_of_wchar,
                                     int* proe_size_of_wchar );
/*
    Purpose: Compares the size of <i>wchar_t</i> in the application with the 
             size of <i>wchar_t</i> in Creo Parametric.

    Input Arguments:
        application_size_of_wchar - The size of <i>wchar_t</i> in the 
                                    application. Use <i>sizeof(wchar_t)</i> to 
                                    get the size.

    Output Arguments:
        proe_size_of_wchar - The size of <i>wchar_t</i> in Creo Parametric.

    Return Values:
        PRO_TK_NO_ERROR - Both sizes are the same.
        PRO_TK_GENERAL_ERROR - The sizes are different.

*/
















extern ProError ProOutputFileMdlnameWrite ( ProMdl      model,
                                            ProMdlFileName name,
                                            ProImportExportFile   file_type,
                                            ProAppData  arg1,
                                            ProAppData  arg2,
                                            ProAppData  arg3,
                                            ProAppData  arg4 );
/*
    Purpose: Exports a file from Creo Parametric onto the disk. The file format 
             is the same as the one created by an interactive Creo Parametric 
             session. <b>Note:</b> In Creo 3 this function does not support 
             names longer than 31 characters. It will return PRO_TK_BAD_INPUTS 
             for longer names. The support for ProMdlFileName will be added in 
             a future release.

    Input Arguments:
        model - A pointer to the model. <ul> <li>PRO_IGES_FILE and PRO_DXF_FILE 
                work for drawings only. <li>PRO_PROGRAM_FILE works for parts 
                and assemblies only. <li>For CL data, this pointer must 
                reference a manufacturing model. </ul>
        name - The name of the file to be created (with the extension, but not 
               the version). Must not be NULL or an empty string. If 
               <i>file_type</i> is PRO_IGES_FILE or PRO_DXF_FILE, do not 
               include the extension; it is added automatically.
        file_type - The type of file to be created. The valid values are as 
                    follows: <ul> <li>PRO_RELATION_FILE <li>PRO_FEATURE_INFO 
                    <li>PRO_PROGRAM_FILE <li>PRO_IGES_FILE <li>PRO_DXF_FILE 
                    <li>PRO_DWG_FILE <li>PRO_DWG_SETUP_FILE <li>PRO_FEAT_INFO 
                    <li>PRO_RENDER_FILE <li>PRO_SLA_ASCII_FILE 
                    <li>PRO_SLA_BINARY_FILE <li>PRO_INVENTOR_FILE 
                    <li>PRO_CATIAFACETS_FILE <li>PRO_BOM_FILE 
                    <li>PRO_MFG_OPER_CL <li>PRO_MFG_FEAT_CL 
                    <li>PRO_MATERIAL_FILE <li>PRO_IGES_3D_FILE 
                    <li>PRO_STEP_FILE <li>PRO_VDA_FILE <li>PRO_FIAT_FILE 
                    <li>PRO_CATIA_DIRECT_FILE <li>PRO_ACIS_FILE 
                    <li>PRO_CGM_FILE <li>PRO_SPOOL_FILE 
                    <li>PRO_CONNECTOR_PARAMS_FILE <li>PRO_CABLE_PARAMS_FILE 
                    <li>PRO_DIFF_REPORT_FILE </ul>
        arg1 - If <i>file_type</i> is PRO_RENDER_FILE, PRO_INVENTOR_FILE, 
               PRO_CATIAFACETS_FILE, PRO_SLA_ASCII_FILE or PRO_SLA_BINARY_FILE 
               <i>arg1</i> is a <i>wchar_t*</i> to a coordinate system name. If 
               this is NULL, the function uses the default coordinate system. 
               If <i>file_type</i> is PRO_SPOOL_FILE, <i>arg1</i> is a 
               <i>wchar_t*</i> to the spool name. If <i>file_type</i> is 
               PRO_CONNECTOR_PARAMS_FILE, <i>arg1</i> is a <i>int*</i> pointing 
               to a ProIdTable (ProIdTable is an integer array of component 
               identifiers). If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
               <i>arg1</i> is the <i>ProSolid</i> (part pointer).
        arg2 - If <i>file_type</i> is PRO_FEAT_INFO, PRO_MFG_OPER_CL or 
               PRO_MFG_FEAT_CL <i>arg2</i> is a <i>int*</i> to the feature ID. 
               If <i>file_type</i> is PRO_RELATION_FILE, <i>arg2</i> is a 
               <i>int*</i> to the feature ID, to get the relations contained in 
               the feature. Pass NULL to get relations contained in the model. 
               If <i>file_type</i> is PRO_IGES_3D_FILE, PRO_STEP_FILE, 
               PRO_VDA_FILE, PRO_FIAT_FILE, PRO_CATIA_DIRECT_FILE or 
               PRO_ACIS_FILE <i>arg2</i> is a <i>int*</i> pointing to the 
               number. If <i>file_type</i> is PRO_CGM_FILE, <i>arg2</i> is a 
               <i>int*</i> pointing to the export type (PROCGMTYPE_CLEAR_TEXT 
               or PROCGMTYPE_MIL_SPEC ie 1 or 2). If <i>file_type</i> is 
               PRO_CONNECTOR_PARAMS_FILE, <i>arg2</i> is a <i>int*</i> pointing 
               to the number, which is equal to the number of component 
               identifier(s). If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
               <i>arg2</i> is the <i>wchar_t*</i> pointing to the cable name. 
               <p> Please note that the previous use of arg2 and arg3 for 
               quality
        arg3 - If <i>file_type</i> is PRO_CGM_FILE, <i>arg3</i> is a 
               <i>int*</i> pointing to the scale type (PROCGMTYPE_ABSTRACT or 
               PROCGMTYPE_METRIC ie 3 or 4)
        arg4 - If <i>file_type</i> is PRO_DIFF_REPORT_FILE, this is the model 
               to which the input model will be compared for generation of the 
               difference report.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully exported the file.
        PRO_TK_GENERAL_ERROR - The function failed.
        PRO_TK_E_NOT_FOUND - An entity named in arg1 or arg2 does not exist.
        PRO_TK_BAD_INPUTS - Some input was incorrect. e.g.:<ul> 
                            <li><i>file_type</i> was PRO_CGM_FILE but 
                            <i>mdl</i> was not a drawing; <li>assembly did not 
                            contain specified part; <li>quality was outside 
                            limits.</ul>
        PRO_TK_OBSOLETE_FUNC - The file format selected is no longer supported 
                               on this platform.
        PRO_TK_BAD_CONTEXT - The function is not available in Design Test Mode.

*/

extern ProError ProPlotfileWrite ( ProMdl         model,
                                   ProFileName        filename,
                                   ProPlotOptions* plot_options );
/*
    Purpose: Outputs a standard Creo Parametric plot output file. The model to 
             be plotted must be displayed in a window. <b>Note:</b>This 
             function has been superseded by ProPrintExecute().

    Input Arguments:
        model - A valid object in memory
        filename - An output filename, including the extension
        plot_options - Information for the plot file

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully created the plot file.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.
        PRO_TK_NO_PERMISSION - The function does not have permission to operate 
                               on this model.

*/

extern ProError ProRasterFileWrite ( int            window_id,
                                     ProRasterDepth depth,
                                     double         width,
                                     double         height,
                                     ProDotsPerInch dots_per_inch,
                                     ProRasterType  type,
                                     ProPath        output_file );
/*
    Purpose: Outputs a standard Creo Parametric raster output file. 
             <b>Note</b>:Use this function to export a solid model only. To 
             convert drawings to the specified formats, use the function 
             <b>ProPrintExecute()</b>.

    Input Arguments:
        window_id - the handle of the window that will be exported
        depth - the depth of the output image
        width - the width of the output image in inches
        height - the height of the output image in inches
        dots_per_inch - the dots per inch of the output image
        type - the output image type
        output_file - An output filename, including the extension

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully created the raster file.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.
        PRO_TK_NO_PERMISSION - The function does not have permission to operate 
                               on this model.
        PRO_TK_BAD_CONTEXT - The function is not available in Design Test Mode.

*/

extern ProError ProExportVRML ( ProBoolean direct,
                                ProMdl model,
                                ProPath input_file,
                                ProPath output_path );
/*
    Purpose: Exports a solid from Creo Parametric, or a Creo Parametric solid 
             from disk, into VRML format. This works in the same way as the 
             Pro/BATCH module.
             <p> The exported file tree is the same as after a Creo Parametric 
             Export VRML operation.
             <p> ProExportVRML supports creation of multiple output files from 
             either parts or assemblies. If you export an assembly, the 
             function creates an output file for each member of the assembly 
             and one for the assembly itself. Default file names are: 
             asm1_a.wrl, asm2_a.wrl, ... asmN_a.wrl, where asm is the assembly 
             name.
             <p> If you export parts, ProExportVRML creates an output file for 
             each part. Default names are part_p.wrl, where part is the part 
             name.

    Input Arguments:
        direct - PRO_B_TRUE if the VRML is to be extracted from a disk file 
                 containing a Creo Parametric model; PRO_B_FALSE if the VRML is 
                 to be extracted from a model now in session
        model - The model in session to be exported. Ignored if direct == 
                PRO_B_TRUE.
        input_file - The name of the Creo Parametric model file to be 
                     extracted. Ignored if direct == PRO_B_FALSE.
        output_path - Output path for directory where VRML tree will be 
                      created.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The export succeeded.
        PRO_TK_GENERAL_ERROR - The export failed.
        PRO_TK_BAD_CONTEXT - The function is not available in Design Test Mode.

*/

extern ProError ProInputFileRead ( ProMdl         model,
                                   ProPath        filename,
                                   ProImportExportFile    file_type,
                                   ProAppData     arg1,
                                   ProAppData     arg2,
                                   ProAppData     arg3,
                                   ProAppData     arg4 );
/*
    Purpose: Reads a file into Creo Parametric. The format must be the same as 
             if these files were created by Creo Parametric.
             <p> NOTES: 
             <ul> 
             <li>If <i>file_type</i> is PRO_CONFIG_FILE, the <i>model</i> 
             argument is ignored. 
             <li>If <i>file_type</i> is PRO_RELATION_FILE, this function does 
             not regenerate after reading the file; it checks for syntax 
             errors. To regenerate the object, use <b>ProSolidRegenerate()</b>. 
             
             <li>If <i>file_type</i> is PRO_DWG_SETUP_FILE, the function does 
             not repaint the screen. If the model is NULL, the function uses 
             the current drawing. 
             <li>If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
             PRO_CONNECTOR_PARAMS_FILE, PRO_DWG_SETUP_FILE, or PRO_SPOOL_FILE 
             the <i>filename</i> argument should be a file name and extension 
             only, not a full path. 
             <li>If <i>file_type</i> is PRO_IGES_SECTION, this operates only on 
             an active section model. The user will have to place the imported 
             section geometry in the active section with a mouse click.
             </ul>

    Input Arguments:
        model - A valid object in memory.
        filename - The input file name, including the extension. For some 
                   options, this can be the full path to the file.
        file_type - The type of file to be read in. The valid values are as 
                    follows: <ul> <li>PRO_RELATION_FILE <li>PRO_IGES_SECTION 
                    <li>PRO_PROGRAM_FILE <li>PRO_CONFIG_FILE 
                    <li>PRO_DWG_SETUP_FILE <li>PRO_SPOOL_FILE 
                    <li>PRO_CABLE_PARAMS_FILE <li>PRO_CONNECTOR_PARAMS_FILE 
                    <li>PRO_ASSEM_TREE_CFG_FILE <li>PRO_WIRELIST_FILE 
                    <li>SLD_VARIANT_FILE </ul>
        arg1 - The application data. If <i>file_type</i> is 
               PRO_CONNECTOR_PARAMS_FILE, <i>arg1</i> is a <i>int*</i> pointing 
               to a ProIdTable (ProIdTable is an integer array of component 
               identifiers). If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
               <i>arg1</i> is the <i>ProSolid</i> (part pointer).
        arg2 - The application data. If <i>file_type</i> is 
               PRO_CONNECTOR_PARAMS_FILE, <i>arg2</i> is a <i>int*</i> pointing 
               to the number, which is equal to the number of component 
               identifier(s). If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
               <i>arg2</i> is a <i>wchar_t*</i> to the cable name. If 
               <i>file_type</i> is PRO_RELATION_FILE, <i>arg2</i> is the 
               <i>int*</i> pointing to feature ID. Pass it NULL to get 
               relations of model.
        arg3 - The application data. If <i>file_type</i> PRO_RELATION_FILE, 
               <i>arg3</i> is a <i>int*</i>. If it points to 1 then relations 
               in the file should be added to the current relations, else the 
               relations in the file should replace the current relations.
        arg4 - Unused.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully processed the file.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.
        PRO_TK_LINE_TOO_LONG - The input filename length is too long for this 
                               import file type.
        PRO_TK_OBSOLETE_FUNC - The file format selected is no longer supported 
                               on this platform.

    See Also:
        ProSolidRegenerate()
*/

extern ProError ProInputFileReadWithFlags ( ProMdl         model,
                                   ProPath        filename,
                                   ProImportExportFile    file_type,
                                   int flags,
                                   ProAppData     arg1,
                                   ProAppData     arg2,
                                   ProAppData     arg3,
                                   ProAppData     arg4 );
/*
    Purpose: Reads a file into Creo Parametric. The format must be the same as 
             if these files were created by Creo Parametric.
             <p> NOTES:
             <ul> 
             <li>If <i>file_type</i> is PRO_CONFIG_FILE, the <i>model</i> 
             argument is ignored. 
             <li>If <i>file_type</i> is PRO_RELATION_FILE, this function does 
             not regenerate after reading the file; it checks for syntax 
             errors. To regenerate the object, use <b>ProSolidRegenerate()</b>. 
             
             <li>If <i>file_type</i> is PRO_DWG_SETUP_FILE, the function does 
             not repaint the screen. If the model is NULL, the function uses 
             the current drawing. 
             <li>If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
             PRO_CONNECTOR_PARAMS_FILE, PRO_DWG_SETUP_FILE, or PRO_SPOOL_FILE 
             the <i>filename</i> argument should be a file name and extension 
             only, not a full path. 
             <li>If <i>file_type</i> is PRO_IGES_SECTION, this operates only on 
             an active section model. The user will have to place the imported 
             section geometry in the active section with a mouse click.
             </ul>

    Input Arguments:
        model - A valid object in memory.
        filename - The input file name, including the extension. For some 
                   options, this can be the full path to the file.
        file_type - The type of file to be read in. The valid values are as 
                    follows: <ul> <li>PRO_RELATION_FILE <li>PRO_IGES_SECTION 
                    <li>PRO_PROGRAM_FILE <li>PRO_CONFIG_FILE 
                    <li>PRO_DWG_SETUP_FILE <li>PRO_SPOOL_FILE 
                    <li>PRO_CABLE_PARAMS_FILE <li>PRO_CONNECTOR_PARAMS_FILE 
                    <li>PRO_ASSEM_TREE_CFG_FILE <li>PRO_WIRELIST_FILE 
                    <li>SLD_VARIANT_FILE </ul>
        flags - Bitwise flags or PRO_IMPORT_EXPORT_NO_FLAGS.
        arg1 - The application data. If <i>file_type</i> is 
               PRO_CONNECTOR_PARAMS_FILE, <i>arg1</i> is a <i>int*</i> pointing 
               to a ProIdTable (ProIdTable is an integer array of component 
               identifiers). If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
               <i>arg1</i> is the <i>ProSolid</i> (part pointer).
        arg2 - The application data. If <i>file_type</i> is 
               PRO_CONNECTOR_PARAMS_FILE, <i>arg2</i> is a <i>int*</i> pointing 
               to the number, which is equal to the number of component 
               identifier(s). If <i>file_type</i> is PRO_CABLE_PARAMS_FILE, 
               <i>arg2</i> is a <i>wchar_t*</i> to the cable name. If 
               <i>file_type</i> is PRO_RELATION_FILE, <i>arg2</i> is the 
               <i>int*</i> pointing to feature ID. Pass it NULL to get 
               relations of model.
        arg3 - The application data. If <i>file_type</i> PRO_RELATION_FILE, 
               <i>arg3</i> is a <i>int*</i>. If it points to 1 then relations 
               in the file should be added to the current relations, else the 
               relations in the file should replace the current relations.
        arg4 - Unused.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully processed the file.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.
        PRO_TK_LINE_TOO_LONG - The input filename length is too long for this 
                               import file type.
        PRO_TK_OBSOLETE_FUNC - The file format selected is no longer supported 
                               on this platform.

    See Also:
        ProSolidRegenerate()
*/


extern ProError ProTrailfileCommentWrite ( ProComment comment );
/*
    Purpose: Appends a comment to the specified trail file.

    Input Arguments:
        comment - The comment to add to the trail file. The length of the

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully added the comment.
        PRO_TK_LINE_TOO_LONG - The specified comment was too long.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function could 
                               not add the comment to the trail file.

*/


extern ProError ProFileMdlnameOpen (
        ProName         dialog_label,
        ProLine         filter_string,
        ProPath        *shortcut_path_arr,
        ProName        *shortcut_name_arr,
        ProPath         default_path,
        ProMdlFileName  pre_sel_file_name,
        ProPath         r_selected_file 
   );
/*
    Purpose: Prompts the standard file browser interface of Creo Parametric. 
             <b>Note:</b> In Creo 3 this function does not support names longer 
             than 80 characters. It will return PRO_TK_BAD_INPUTS for longer 
             names. The support for ProMdlFileName will be added in a future 
             release. <br> This function cannot be used for NX models in the 
             current release.

    Input Arguments:
        dialog_label - The user-specified label for the dialog box. If this is 
                       NULL, the function uses the default label, "Open."
        filter_string - The user-supplied filter string for file extensions. 
                        The extensions must be specified with wildcards and 
                        separated by commas; for example, "*.prt,*.txt" 
                        (converted to wide-character string). If NULL or empty 
                        string, the browser will show all files.
        shortcut_path_arr - A ProArray of shortcut paths. Pass NULL to not 
                            supply shortcuts to the user in the dialog.
        shortcut_name_arr - A ProArray of shortcut labels that correspond to 
                            <i>shortcut_path_arr</i>. Pass NULL to not supply 
                            shortcuts to the user in the dialog.
        default_path - The default path to start browsing. If this is NULL, the 
                       function uses the current directory.
        pre_sel_file_name - If supplied and existing in the default file name 
                            this name is preselected. If this is NULL, nothing 
                            is preselected.

    Output Arguments:
        r_selected_file - The selected file.

    Return Values:
        PRO_TK_NO_ERROR - The user selected a file and picked "Ok".
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid, or the 
                            size of shortcut_path_arr and shortcut_name_arr is 
                            not the same.
        PRO_TK_USER_ABORT - The user aborted from the user interface.

    See Also:
        ProArrayAlloc()
*/

extern ProError ProFileMdlfiletypeOpen (
        ProName         dialog_label,
        ProMdlfileType *file_types,
        ProPath        *shortcut_path_arr,
        ProName        *shortcut_name_arr,
        ProPath         default_path,
        ProMdlFileName  pre_sel_file_name,
        ProPath         r_selected_file 
   );
/*
    Purpose: Prompts the standard file browser interface of Creo Parametric. 
             <b>Note:</b> In Creo 3 this function does not support names longer 
             than 80 characters. It will return PRO_TK_BAD_INPUTS for longer 
             names. The support for ProMdlFileName will be added in a future 
             release. <br> This function cannot be used for NX models in the 
             current release.

    Input Arguments:
        dialog_label - The user-specified label for the dialog box. If this is 
                       NULL, the function uses the default label, "Open."
        file_types - The user-allocated ProArray of file types. If NULL, the 
                     browser will show all files.
        shortcut_path_arr - A ProArray of shortcut paths. Pass NULL to not 
                            supply shortcuts to the user in the dialog.
        shortcut_name_arr - A ProArray of shortcut labels that correspond to 
                            <i>shortcut_path_arr</i>. Pass NULL to not supply 
                            shortcuts to the user in the dialog.
        default_path - The default path to start browsing. If this is NULL, the 
                       function uses the current directory.
        pre_sel_file_name - If supplied and existing in the default file name 
                            this name is preselected. If this is NULL, nothing 
                            is preselected.

    Output Arguments:
        r_selected_file - The selected file.

    Return Values:
        PRO_TK_NO_ERROR - The user selected a file and picked "Ok".
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid, or the 
                            size of shortcut_path_arr and shortcut_name_arr is 
                            not the same.
        PRO_TK_USER_ABORT - The user aborted from the user interface.

    See Also:
        ProArrayAlloc()
*/


extern ProError ProFileMdlnameSave (
        ProName         dialog_label,
        ProLine         filter_string,
        ProPath         *shortcut_path_arr,
        ProName         *shortcut_name_arr,
        ProPath         default_path,
        ProMdlFileName  pre_sel_file_name,
        ProPath         r_selected_file
    );
/*
    Purpose: Prompts the standard file browser interface of Creo Parametric. 
             <b>Note:</b> In Creo 3 this function does not support names longer 
             than 80 characters. It will return PRO_TK_BAD_INPUTS for longer 
             names. The support for ProMdlFileName will be added in a future 
             release. 
             <p> For Multi-CAD objects, this function does not support local 
             disk saving location in a Windchill connected session.

    Input Arguments:
        dialog_label - The user-specified label for the dialog box. If this is 
                       NULL, the function uses the default label, "Save."
        filter_string - The user-supplied filter string for file extensions. 
                        The extensions must be specified with wildcards and 
                        separated by commas; for example, "*.prt,*.txt" 
                        (converted to wide-character string).
        shortcut_path_arr - A ProArray of shortcut paths. Pass NULL to not 
                            supply shortcuts to the user in the dialog.
        shortcut_name_arr - A ProArray of shortcut labels that correspond to 
                            <i>shortcut_path_arr</i>. Pass NULL to not supply 
                            shortcuts to the user in the dialog.
        default_path - The default path to start browsing. If this is NULL, the 
                       function uses the current directory.
        pre_sel_file_name - If supplied and existing in the default file name 
                            this name is preselected. If this is NULL, nothing 
                            is preselected.

    Output Arguments:
        r_selected_file - The selected file.

    Return Values:
        PRO_TK_NO_ERROR - The user selected a file and picked "Save".
        PRO_TK_USER_ABORT - The user aborted from the user interface.
        PRO_TK_NO_PERMISSION - The function does not have permission to operate 
                               on this model.

    See Also:
        ProArrayAlloc()
*/

extern ProError ProFileMdlfiletypeSave (
        ProName         dialog_label,
        ProMdlfileType  *file_types,
        ProPath         *shortcut_path_arr,
        ProName         *shortcut_name_arr,
        ProPath         default_path,
        ProMdlFileName  pre_sel_file_name,
        ProPath         r_selected_file
    );
/*
    Purpose: Prompts the standard file browser interface of Creo Parametric. 
             <b>Note:</b> In Creo 3 this function does not support names longer 
             than 80 characters. It will return PRO_TK_BAD_INPUTS for longer 
             names. The support for ProMdlFileName will be added in a future 
             release. 
             <p> For Multi-CAD objects, this function does not support local 
             disk saving location in a Windchill connected session.

    Input Arguments:
        dialog_label - The user-specified label for the dialog box. If this is 
                       NULL, the function uses the default label, "Save."
        file_types - The user-allocated ProArray of file types. If NULL, the 
                     browser will show all files.
        shortcut_path_arr - A ProArray of shortcut paths. Pass NULL to not 
                            supply shortcuts to the user in the dialog.
        shortcut_name_arr - A ProArray of shortcut labels that correspond to 
                            <i>shortcut_path_arr</i>. Pass NULL to not supply 
                            shortcuts to the user in the dialog.
        default_path - The default path to start browsing. If this is NULL, the 
                       function uses the current directory.
        pre_sel_file_name - If supplied and existing in the default file name 
                            this name is preselected. If this is NULL, nothing 
                            is preselected.

    Output Arguments:
        r_selected_file - The selected file.

    Return Values:
        PRO_TK_NO_ERROR - The user selected a file and picked "Save".
        PRO_TK_USER_ABORT - The user aborted from the user interface.
        PRO_TK_NO_PERMISSION - The function does not have permission to operate 
                               on this model.

    See Also:
        ProArrayAlloc()
*/

extern ProError ProFileselectionDocNameGet(ProPath document_name);
/*
    Purpose: If the most recent file selected in ProFileOpen() or one of the 
             related ProFile...Open() functions was secondary content, returns 
             the primary document name.

    Input Arguments:
        none

    Output Arguments:
        document_name - The name and extension of the primary document.

    Return Values:
        PRO_TK_NO_ERROR - The most recent selection was secondary.
        PRO_TK_E_NOT_FOUND - The most recent selection was NOT secondary.
        PRO_TK_BAD_INPUTS - document_name was NULL.

*/

extern ProError ProDirectoryChoose (ProName         dialog_label,
        ProPath        *shortcut_path_arr,
        ProName        *shortcut_name_arr,
        ProPath         default_path,
        ProPath         r_selected_path
   );
/*
    Purpose: Prompts the standard file browser interface of Creo Parametric, 
             set upfor the purpose of allowing the user to select a directory.

    Input Arguments:
        dialog_label - The user-specified label for the dialog box. If this is 
                       NULL, the function uses the default label, "Select 
                       Directory".
        shortcut_path_arr - An array of shortcut paths. Use 
                            <b>ProArrayAlloc()</b> to allocate this array. This 
                            can be NULL.
        shortcut_name_arr - An array of shortcut labels that correspond to 
                            <i>shortcut_path_arr</i>. Use 
                            <b>ProArrayAlloc()</b> to allocate this array. This 
                            can be NULL.
        default_path - The default path to start browsing. If this is NULL, the 
                       function uses the current directory.

    Output Arguments:
        r_selected_path - The selected directory path.

    Return Values:
        PRO_TK_NO_ERROR - The user selected a directory and picked "Ok".
        PRO_TK_USER_ABORT - The user aborted from the user interface.

    See Also:
        ProArrayAlloc()
*/

extern ProError ProFileCopyFromWS (ProPath source_file, 
                                   ProPath target_directory);
/*
    Purpose: Copies a file from a Windchill workspace to a disk location.

    Input Arguments:
        source_file - The path to the file, provided by functions such as 
                      ProFileMdlnameOpen() and ProFileMdlfiletypeOpen(). This 
                      must begin with wtws://.
        target_directory - The location on the local disk indicating where to 
                           copy the file.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more inputs was invalid.
        PRO_TK_INVALID_FILE - The input file was not found or improper.
        PRO_TK_INVALID_DIR - The output location was not found.
        PRO_TK_CANT_ACCESS - No permission to read the input file, or to write 
                             to the target directory.

*/

extern ProError ProFileCopyFromWSDocument (ProPath source_file,
                                           ProPath document_name,
                                           ProPath target_directory);
/*
    Purpose: Copies a file, either primary or secondary, from a Windchill 
             workspace to a disk location.

    Input Arguments:
        source_file - The path to the file, provided by functions such as 
                      ProFileMdlnameOpen() and ProFileMdlfiletypeOpen(). This 
                      must begin with wtws://.
        document_name - If present, the name of the document, with source_file 
                        being the name of the secondary content on the 
                        document. If NULL, read the primary content of 
                        source_file.
        target_directory - The location on the local disk indicating where to 
                           copy the file.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more inputs was invalid.
        PRO_TK_INVALID_FILE - The input file was not found or improper.
        PRO_TK_INVALID_DIR - The output location was not found.
        PRO_TK_CANT_ACCESS - No permission to read the input file, or to write 
                             to the target directory.

*/


extern ProError ProFileCopyToWS (ProPath source_file,
                                 ProPath target_workspace,
                                 ProPath primary_content);
/*
    Purpose: Copies a file from local disk to a Windchill workspace; either as 
             a primary document or as secondary content of an existing document 
             in the workspace. 
             <P> NOTE: The config option "dm_upload_objects" can cause an 
             upload after each save.

    Input Arguments:
        source_file - The path to the file, provided by functions such as 
                      ProFileMdlnameOpen() and ProFileMdlfiletypeOpen().
        target_workspace - The destination workspace.
        primary_content - The document which the copy will be attached to, 
                          "box7.prt" for example. Pass NULL to simply copy the 
                          file to the workspace.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more inputs was invalid.
        PRO_TK_INVALID_FILE - An input file was not found or improper.
        PRO_TK_BAD_CONTEXT - There was a problem setting primary_content.
        PRO_TK_CANT_WRITE - The workspace file is not writable.

*/

extern ProError ProDocumentFileContentsRead (ProPath source_file,
                                             ProPath document_name,
                                             ProArray *contents);
/*
    Purpose: Reads the contents of a short file from a location on disk or in 
             Windchill. 
             <p><b>Note:</b> Not intended for CAD model files.

    Input Arguments:
        source_file - The path to the file, provided by functions such as 
                      ProFileMdlnameOpen() and ProFileMdlfiletypeOpen().
        document_name - If present, the name of the document, with source_file 
                        being the name of the secondary content on the 
                        document. If NULL, read the primary content of 
                        source_file. Ignored for non-Windchill locations.

    Output Arguments:
        contents - A ProArray of chars from the file, which caller must free 
                   using ProArrayFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more inputs was invalid.
        PRO_TK_INVALID_FILE - The input file was not found or improper.
        PRO_TK_MAX_LIMIT_REACHED - File was longer than 
                                   ProArrayMaxCountGet(sizeof(char).
        PRO_TK_CANT_ACCESS - No permission to read the input file.
        PRO_TK_UNSUPPORTED - Not supported for CAD models.
        PRO_TK_GENERAL_ERROR - The function failed.

*/

extern ProError ProIntfSliceFileExport (ProMdl model,
        ProFileName out_file_name,
        ProImportExportFile file_type,
        double quality[2],
        ProMatrix transf,
        ProAsmcomppath *comp_path);
/*
    Purpose: Exports 5 of the 7 "slice" formats (STL, Render, Inventor, 
             CatiaFacets, Optegra Visualizer). 
             <p> NOTE: 
             <p> On UNIX machines, file names are case sensitive.
             <p> This API is deprecated. Use 
             ProIntfSliceFileWithOptionsMdlnameExport instead. This API is 
             equivalent to ProIntfSliceFileWithOptionsMdlnameExport with only 
             PRO_FACET_STEP_SIZE_OFF set for config_flags.

    Input Arguments:
        model - The pointer to the model to export.
        out_file_name - The name of the output file.
        file_type - The type of file to export (STL, Inventor, and so on).
        quality - The array that contains the maximum chord height and angle 
                  control. If quality[0] &lt; 0.0, the minimum chord height 
                  will be used.
        transf - The transformation matrix.
        comp_path - The component path, in the case of an assembly component. 
                    If the model is a part, set this to NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully exported the file.
        PRO_TK_BAD_INPUTS - You specified incorrect quality settings, or a 
                            nonexistent file type.
        PRO_TK_GENERAL_ERROR - There was a triangulation failure.
        PRO_TK_NO_LICENSE - You do not have a license.
        PRO_TK_BAD_CONTEXT - The function is not available in Design Test Mode.

*/


/* bit flags to control facet export */

#define PRO_FACET_STEP_SIZE_ADJUST      (1<<0)  /* adjust step size to a component size      */
#define PRO_FACET_CHORD_HEIGHT_ADJUST   (1<<1)  /* adjust chord height to a component size   */

#define PRO_FACET_USE_CONFIG            (1<<2)  /* use Creo Parametric config options              */

/* If PRO_FACET_USE_CONFIG flag is set, the flags PRO_FACET_STEP_SIZE_OFF,
PRO_FACET_STEP_SIZE_ADJUST and PRO_FACET_CHORD_HEIGHT_ADJUST will be ignored and
the facet export will use Creo Parametric config options to turn on/off the use of step size,
the step size adjustment and the chord height adjustment.

Otherwise these options are governed by PRO_FACET_STEP_SIZE_OFF, PRO_FACET_STEP_SIZE_ADJUST
and PRO_FACET_CHORD_HEIGHT_ADJUST.              */


#define PRO_FACET_CHORD_HEIGHT_DEFAULT  (1<<3)  /* find the default chord height and use it  */
#define PRO_FACET_ANGLE_CONTROL_DEFAULT (1<<4)  /* find the default angle control and use it */
#define PRO_FACET_STEP_SIZE_DEFAULT     (1<<5)  /* find the default step size and use it     */

/* If any of these flags are set then the value of that control will be ignored -
instead it will be set to its default value as shown in the Creo Parametric facet control dialog box.

Use these flags to get a good facet quality without providing explicit control settings.

PRO_FACET_USE_CONFIG has no interference with these flags.              */


#define PRO_FACET_STEP_SIZE_OFF         (1<<6)  /* turn off the step size control            */

#define PRO_FACET_FORCE_INTO_RANGE      (1<<7)  /* force out-of-range parameters into range;
                                                   as above, if any of PRO_FACET_*_DEFAULT is set
                                                   then PRO_FACET_FORCE_INTO_RANGE will not act 
                                                   on that parameter */
#define PRO_FACET_INCLUDE_QUILTS        (1<<8)  /* include quilts (tesselate them) in export */

#define PRO_EXPORT_INCLUDE_ANNOTATIONS	(1<<9)	/* include annotations. Note: Model needs to be displayed in
												order to export annotations*/
#define PRO_FACET_VISIBLE_MODELS        (1<<10) /* only export visible models */


extern ProError ProIntfSliceFileWithOptionsMdlnameExport (ProMdl model,
        ProMdlFileName      out_file_name,
        ProImportExportFile file_type,
        double              *parameters,
        int                 config_flags,
        ProMatrix           transf,
        ProAsmcomppath      *comp_path);
/*
    Purpose: Exports 5 of the 7 "slice" formats (STL, Render, Inventor, 
             CatiaFacets, Optegra Visualizer). 
             <p> NOTE: 
             <p> On UNIX machines, file names are case sensitive. <b>Note:</b> 
             In Creo 3 this function does not support names longer than 31 
             characters. It will return PRO_TK_BAD_INPUTS for longer names. The 
             support for ProMdlFileName will be added in a future release.

    Input Arguments:
        model - The pointer to the model to export. If NULL the current model 
                will be used.
        out_file_name - The name of the output file.
        file_type - The type of file to export (STL, Inventor, and so on).
        parameters - ProArray of parameters to be set; in this version this 
                     array always has 3 elements, which are interpreted as: 
                     chord_height, angle_control, step_size (in future this 
                     array may be expanded). angle_control must be from 0.0 to 
                     1.0 Setting chord_height or step_size to values too big or 
                     too small (for instance, bigger than the model size or 
                     smaller than the model absolute accuracy) may cause an 
                     error. If angle_control is out of bounds it will be 
                     changed to the closest limit without returning an error.
        config_flags - Bit flags (PRO_FACET_STEP_SIZE_ADJUST and others) to 
                       control facet export. See comments against these flags 
                       for how to use them.
        transf - The transformation matrix. If NULL, no transformation will be 
                 applied.
        comp_path - The component path, in the case of an assembly component. 
                    If the model is a part, set this to NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully exported the file.
        PRO_TK_BAD_INPUTS - parameters array is NULL or its size is not 3; or 
                            flags values are incorrect; or you specified a 
                            nonexistent file type.
        PRO_TK_GENERAL_ERROR - There was a triangulation failure.
        PRO_TK_NO_LICENSE - You do not have a license.
        PRO_TK_BAD_CONTEXT - The function is not available in Design Test Mode.

*/

/********** file list api prototype. **********/ 
 
typedef enum pro_file_list_option
{
 PRO_FILE_LIST_ALL = 0,            /* list all the versions of a file        */
 PRO_FILE_LIST_LATEST,             /* list only the latest version of a file */
 PRO_FILE_LIST_ALL_SORTED,         /* list all the versions of a file (& sort) */
 PRO_FILE_LIST_LATEST_SORTED,      /* list only the latest version of a file (& sort) */
 PRO_FILE_LIST_ALL_INST,           /* same as LIST_ALL & show instances for PDM locations */
 PRO_FILE_LIST_LATEST_INST,        /* same as LIST_LATEST & show instances for PDM locations */ 
 PRO_FILE_LIST_ALL_SORTED_INST,    /* same as LIST_ALL_SORTED & show instances for PDM locations */
 PRO_FILE_LIST_LATEST_SORTED_INST  /* same as LIST_LATEST_SORTED & show instances for PDM locations */
}       ProFileListOpt;
 
extern ProError ProFilesList (ProPath            directory_path,
                       ProLine            filter,
                       ProFileListOpt     listing_option,
                       ProPath          **p_file_name_array,
                       ProPath          **p_subdir_name_array);
/*
    Purpose: Lists the files in the specified directory. You can pass specific 
             filters to get files with those extensions only.

    Input Arguments:
        directory_path - The directory in which to look for the files to be 
                         listed. If this is NULL, the files from the current 
                         directory will be listed.
        filter - The user-supplied filter string for file extensions. Each 
                 filter must be separated by a comma. For example, 
                 "*.prt,*.txt" (converted to a wide-character string). Each 
                 individual element in the filter must be less than 
                 PRO_NAME_SIZE characters.
        listing_option - Specifies whether all versions or only the latest 
                         versions are being requested, and whether or not the 
                         list should be sorted alphabetically. <b>Note: 
                         </b>Passing any of _INST options in Wildfire 4.0 M100 
                         and earlier will have the same effect as passing 
                         PRO_FILE_LIST_LATEST.

    Output Arguments:
        p_file_name_array - The array of files found. You must preallocate this 
                            array using <b>ProArrayAlloc()</b>; if you reuse 
                            the array, new elements will be appended to the 
                            existing elements unless you reset the array size 
                            to 0 with ProArraySizeSet.
        p_subdir_name_array - The array of all subdirectories found, regardless 
                              of whether they match the filter. You must 
                              preallocate this array using 
                              <b>ProArrayAlloc()</b>; if you reuse the array, 
                              new elements will be appended to the existing 
                              elements unless you reset the array size to 0 
                              with ProArraySizeSet.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully returned the files.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
        PRO_TK_INVALID_DIR - Invalid directory.

    See Also:
        ProArrayAlloc()
*/
 

extern ProError ProFileMdlnameParse (ProPath       file_name_w_path,
                           ProPath         r_path,
                           ProMdlName      r_file_name,
                           ProMdlExtension r_extension,
                           int          *  r_version);
/*
    Purpose: Parses the specified file name into its components. <b>Note:</b> 
             In Creo 3 this function does not support names longer than 80 
             characters. It will return PRO_TK_BAD_INPUTS for longer names. 
             This API is not supported for fetching the model version of 
             windchill model(if directory path is winchill path). The support 
             for ProMdlName will be added in a future release.

    Input Arguments:
        file_name_w_path - The full file name, composed of the path, name, 
                           extension, and version.

    Output Arguments:
        r_path - The directory path. This argument is optional (can be NULL).
        r_file_name - The file name. This argument is optional (can be NULL).
        r_extension - The file extension. This argument is optional (can be 
                      NULL).
        r_version - The file version. This argument is optional (can be NULL).

    Return Values:
        PRO_TK_NO_ERROR - The function successfully parsed the file name.
        PRO_TK_BAD_INPUTS - The specified file name was invalid.

*/


extern ProError Pro2dImportMdlnameCreate(
     ProImportExportFile format,
     ProPath filename, 
     ProMdlName name,
     ProMdlType mtype,
     ProBoolean import_2d_views,
     ProBoolean scale_to_fit,
     ProBoolean fit_left_corner,
     ProMdl *new_model) ;
/*
    Purpose: Creates a new 2d Creo Parametric model by importing a 2d geometry 
             file. <b>Note:</b> In Creo 3 this function does not support names 
             longer than 31 characters. It will return PRO_TK_BAD_INPUTS for 
             longer names. The support for ProMdlName will be added in a future 
             release.

    Input Arguments:
        format - The type of file to be imported. The following values are 
                 supported: <UL> <LI>PRO_STEP_FILE <LI>PRO_IGES_FILE 
                 <LI>PRO_DXF_FILE <LI>PRO_DWG_FILE <LI>PRO_CGM_FILE 
                 <LI>PRO_MEDUSA_FILE <LI>PRO_CCD_DRAWING_FILE </UL> Note: To 
                 import the 2d MEDUSA file set the config option 
                 "allow_medusa_draw_import" to yes.
        filename - The name (absolute path or relative path) of the file to be 
                   imported. The name of the MEDUSA files must have the format 
                   s.objectname.
        name - The name of the model to be created.
        mtype - The type of model to create. Must be PRO_MDL_DRAWING, 
                PRO_MDL_LAYOUT, PRO_MDL_DIAGRAM or PRO_MDL_DWGFORM.
        import_2d_views - Whether to import 2d drawing views.
        scale_to_fit - If the current model has a different sheet size from 
                       that specified by the imported file, scale_to_fit should 
                       be TRUE to retain the current sheet size, or FALSE to 
                       adopt the new one.
        fit_left_corner - If the imported file retain its original sheet size, 
                          the bottom left corner of the file will be adjusted 
                          to the bottom left corner of the current model for 
                          PRO_B_TRUE, and imported "as is" for PRO_B_FALSE.

    Output Arguments:
        new_model - The new model that Creo Parametric created.

    Return Values:
        PRO_TK_NO_ERROR - Imported file appended successfuly to the current 
                          model.
        PRO_TK_BAD_INPUTS - Illegal model type or import file type.
        PRO_TK_INVALID_FILE - The input file could not be found, or contained 
                              unrecoverable errors.
        PRO_TK_NO_LICENSE - There is no license for this import option.
        PRO_TK_CANT_OPEN - Failed to create drawing. PRO_TK_OBSOLETE_FUNC- The 
                           file format selected is no longer supported on this 
                           platform.
        PRO_TK_INVALID_NAME - Length of the new model name is more than 31 
                              chars.

*/



extern ProError Pro2dImportAllSheets(
     ProImportExportFile format,
     ProPath filename,
     ProMdlName name,
     ProMdlType mtype,
     ProBoolean import_2d_views,
     ProBoolean scale_to_fit,
     ProBoolean fit_left_corner,
     ProMdl *new_model) ;
/*
    Purpose: Creates a new 2d Creo Parametric model by importing a 2d geometry 
             file. Unlike Pro2dImportCreate() and Pro2dImportMdlnameCreate() 
             imports all the sheets for formats supporting multi-sheet drawings 
             (PRO_IGES_FILE, PRO_DXF_FILE, PRO_DWG_FILE PRO_CCD_DRAWING_FILE). 
             If mtype is PRO_MDL_DWGFORM only first two sheets will be imported 
             due to this model type restriction. <b>Note:</b> In Creo 3 this 
             function does not support names longer than 31 characters. It will 
             return PRO_TK_BAD_INPUTS for longer names. The support for 
             ProMdlName will be added in a future release.

    Input Arguments:
        format - The type of file to be imported. The following values are 
                 supported: <UL> <LI>PRO_STEP_FILE <LI>PRO_IGES_FILE 
                 <LI>PRO_DXF_FILE <LI>PRO_DWG_FILE <LI>PRO_CGM_FILE 
                 <LI>PRO_MEDUSA_FILE <LI>PRO_CCD_DRAWING_FILE </UL> Note: To 
                 import the 2d MEDUSA file set the config option 
                 "allow_medusa_draw_import" to yes.
        filename - The name (absolute path or relative path) of the file to be 
                   imported. The name of the MEDUSA files must have the format 
                   s.objectname.
        name - The name of the model to be created.
        mtype - The type of model to create. Must be PRO_MDL_DRAWING, 
                PRO_MDL_LAYOUT, PRO_MDL_DIAGRAM or PRO_MDL_DWGFORM.
        import_2d_views - Whether to import 2d drawing views.
        scale_to_fit - If the current model has a different sheet size from 
                       that specified by the imported file, scale_to_fit should 
                       be TRUE to retain the current sheet size, or FALSE to 
                       adopt the new one.
        fit_left_corner - If the imported file retain its original sheet size, 
                          the bottom left corner of the file will be adjusted 
                          to the bottom left corner of the current model for 
                          PRO_B_TRUE, and imported "as is" for PRO_B_FALSE.

    Output Arguments:
        new_model - The new model that Creo Parametric created.

    Return Values:
        PRO_TK_NO_ERROR - Imported file appended successfuly to the current 
                          model.
        PRO_TK_BAD_INPUTS - Illegal model type or import file type.
        PRO_TK_INVALID_FILE - The input file could not be found, or contained 
                              unrecoverable errors.
        PRO_TK_NO_LICENSE - There is no license for this import option.
        PRO_TK_CANT_OPEN - Failed to create drawing. PRO_TK_OBSOLETE_FUNC- The 
                           file format selected is no longer supported on this 
                           platform.
        PRO_TK_INVALID_NAME - Length of the new model name is more than 31 
                              chars.

*/

extern ProError Pro2dImportAppend(
     ProImportExportFile format,
     ProPath filename, 
     ProMdl model,
     ProBoolean scale_to_fit,
     ProBoolean fit_left_corner) ;
/*
    Purpose: Imports a 2d geometry file into an existing 2d Creo Parametric 
             model.

    Input Arguments:
        format - The type of file to be imported. The following values are 
                 supported: <UL> <LI>PRO_STEP_FILE <LI>PRO_IGES_FILE 
                 <LI>PRO_DXF_FILE <LI>PRO_DWG_FILE <LI>PRO_CGM_FILE 
                 <LI>PRO_MEDUSA_FILE <LI>PRO_CCD_DRAWING_FILE </UL>
        filename - The name (absolute path or relative path ) of the file to be 
                   imported.
        model - The model into which to append the data.
        scale_to_fit - If the current model has a different sheet size from 
                       that specified by the imported file, scale_to_fit should 
                       be TRUE to retain the current sheet size, or FALSE to 
                       adopt the new one .
        fit_left_corner - If the imported file retain his original sheet size, 
                          the bottom left corner of the file will be adjusted 
                          to bottom left corner of the current model for 
                          PRO_B_TRUE, and imported "as is" for PRO_B_FALSE.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Imported file appended successfuly to the current 
                          model.
        PRO_TK_BAD_INPUTS - Illegal model type or import file type.
        PRO_TK_INVALID_FILE - The input file could not be found, or contained 
                              unrecoverable errors.
        PRO_TK_NO_LICENSE - There is no license for this import option. 
                            PRO_TK_OBSOLETE_FUNC- The file format selected is 
                            no longer supported on this platform.

*/


extern ProError Pro2dExport(ProImportExportFile     format,
                            ProPath                 filename,
                            ProMdl                  model,
                            Pro2dExportdata         data);
/*
    Purpose: Exports 2d models to a file. The following output formats are 
             supported: 
             <UL> 
             <LI> PRO_STEP_FILE 
             <LI> PRO_IGES_FILE 
             <LI> PRO_MEDUSA_FILE 
             <LI> PRO_DXF_FILE 
             <LI> PRO_DWG_FILE 
             <LI> PRO_CGM_FILE 
             <LI> PRO_STHENO_FILE 
             <LI> PRO_SNAP_TIFF_FILE 
             </UL> Note that the output can be controlled by a combination of 
             the input argument 'data' and several Creo Parametric 
             configuration options related to entity type export options.

    Input Arguments:
        format - The type of file to be exported.
        filename - The name and absolute path of the export file to be created.
        model - The 2d model from which the information is to be exported.
        data - The instructions used for the export. Can be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - Illegal import file type.
        PRO_TK_BAD_CONTEXT - The model was not a 2D model.
        PRO_TK_NO_LICENSE - There is no license for this import option.
        PRO_TK_OBSOLETE_FUNC - The file format selected is no longer supported 
                               on this platform.
        PRO_TK_BAD_CONTEXT - The function is not available in Design Test Mode.

*/


extern ProError Pro2dExportdataAlloc (Pro2dExportdata* export_data);
/*
    Purpose: Allocates the handle containing 2D export options and flags, to be 
             used in Pro2dExport().

    Input Arguments:
        none

    Output Arguments:
        export_data - The handle.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/



extern ProError Pro2dExportdataFree (Pro2dExportdata export_data);
/*
    Purpose: Frees the handle containing 2D export options and flags, to be 
             used in Pro2dExport().

    Input Arguments:
        export_data - The handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/




extern ProError Pro2dExportdataSheetoptionSet (Pro2dExportdata export_data, Pro2dExportSheetOption sheet_option);
/*
    Purpose: Assigns the sheet export option for the export to a 2D format.

    Input Arguments:
        export_data - The 2D export data.
        sheet_option - The sheet export option.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/



extern ProError Pro2dExportdataSheetsSet (Pro2dExportdata export_data, int* sheets);
/*
    Purpose: Assigns the sheet numbers to export to the 2D export format file. 
             Used only if the sheet option is set to PRO2DEXPORT_SELECTED. 
             Sheet numbers range from 1 to the number of sheets. All the 
             selected sheets will be exported to paper space. If a sheet has to 
             be exported to model space, use 
             Pro2dExportdataModelspacesheetSet() to assign it.

    Input Arguments:
        export_data - The export data.
        sheets - ProArray of the sheet numbers to export.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/




extern ProError Pro2dExportdataModelspacesheetSet (Pro2dExportdata export_data, int model_space_sheet);
/*
    Purpose: Assigns the sheet number to be exported to model space. Used only 
             if the export format supports the concept of model space and paper 
             space, and if the sheet option is PRO2DEXPORT_SELECTED. Sheet 
             numbers range from 1 to the number of sheets. Export other sheets 
             to paper space using Pro2dExportdataSheetsSet().

    Input Arguments:
        export_data - The export data.
        model_space_sheet - The sheet number to export to model space.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/




extern ProError ProPathMdlnameCreate(ProPath       path,
				     ProMdlName    file_name,
				     ProMdlExtension extension,
				     int           version,
				     ProPath       r_file_name_w_path);
/*
    Purpose: Builds a path, given its components. <b>Note:</b> In Creo 3 this 
             function does not support names longer than 80 characters. It will 
             return PRO_TK_BAD_INPUTS for longer names. The support for 
             ProMdlName will be added in a future release.

    Input Arguments:
        path - The directory path. This argument is optional (can be NULL).
        file_name - The file name. This argument is optional (can be NULL).
        extension - The file extension. This argument is optional (can be 
                    NULL).
        version - The file version. This argument is optional (can be 
                  PRO_VALUE_UNUSED).

    Output Arguments:
        r_file_name_w_path - The full file name, composed of the path, name, 
                             extension, and version.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully built the path.
        PRO_TK_BAD_INPUTS - The specified file name was invalid.

*/

LIB_COREUTILS_API  ProError ProStringCopy (char* string, char** to);
/*
    Purpose: Copies a string into memory allocated by Creo Parametric. This 
             allows you to free the string with ProStringFree() and allows Creo 
             Parametric to free this string if necessary.

    Input Arguments:
        string - The original string.

    Output Arguments:
        to - The copy of the string. Creo Parametric allocates memory for this 
             argument.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - The function failed to allocate memory for the 
                               new string.

*/

LIB_COREUTILS_API  ProError ProStringFree( char* string );
/*
    Purpose: free a string returned by a Creo Parametric TOOLKIT function

    Input Arguments:
        string - The string

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The memory was freed
        PRO_TK_GENERAL_ERROR - The memory was not freed, e.g. due to bad 
                               address

*/

LIB_COREUTILS_API  ProError ProIntarrayFree( int* plain_array );
/*
    Purpose: Free a plain integer array returned by a Creo Parametric TOOLKIT 
             function

    Input Arguments:
        plain_array - The plain integer array

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The memory was freed
        PRO_TK_GENERAL_ERROR - The memory was not freed, e.g. due to bad 
                               address

*/

LIB_COREUTILS_API  ProError ProStringarrayFree( char** str_arr, int ct );
/*
    Purpose: free an array of strings returned by a Creo Parametric TOOLKIT 
             function

    Input Arguments:
        str_arr - The array of strings
        ct - The number of strings in the array

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The memory was freed
        PRO_TK_GENERAL_ERROR - The memory was not freed, e.g. due to bad 
                               address

*/

LIB_COREUTILS_API  ProError ProStringproarrayFree( char** str_arr );
/*
    Purpose: free a ProArray of strings returned by a Creo Parametric TOOLKIT 
             function

    Input Arguments:
        str_arr - The array of strings

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The memory was freed
        PRO_TK_GENERAL_ERROR - The memory was not freed, e.g. due to bad 
                               address

*/

LIB_COREUTILS_API  ProError ProWstringFree( wchar_t* wstring );
/*
    Purpose: free a wide-string returned by a Creo Parametric TOOLKIT function

    Input Arguments:
        wstring - The wide-string

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The memory was freed
        PRO_TK_GENERAL_ERROR - The memory was not freed, e.g. due to bad 
                               address

*/

LIB_COREUTILS_API  ProError ProWstringarrayFree( wchar_t** wstr_arr, int ct );
/*
    Purpose: free an array of wide-strings returned by a Creo Parametric 
             TOOLKIT function

    Input Arguments:
        wstr_arr - The array of wide-strings
        ct - The number of strings in the array

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The memory was freed
        PRO_TK_GENERAL_ERROR - The memory was not freed, e.g. due to bad 
                               address

*/

LIB_COREUTILS_API  ProError ProWstringproarrayFree( wchar_t** wstr_arr );
/*
    Purpose: free a ProArray of wide-strings returned by a Creo Parametric 
             TOOLKIT function

    Input Arguments:
        wstr_arr - The array of wide-strings

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The memory was freed
        PRO_TK_GENERAL_ERROR - The memory was not freed, e.g. due to bad 
                               address

*/

extern ProError ProProductviewExport( ProMdl mdl,
                                      ProPath export_dir,
                                      ProName filename );
/*
    Purpose: <b>NOTE:</b> 
             <p> This function is <b>deprecated</b>. Use 
             ProProductviewFormattedMdlnameExport() instead. 
             <p> Exports a part, assembly or drawing to a Creo View format.

    Input Arguments:
        mdl - The model handle. If mdl is a drawing, it must be displayed in a 
              window. Depending upon the model type, following output files are 
              created: <UL> <LI> Part : .ed file, .ol file <LI> Assembly : .ed 
              file, seperate .ol file for each part contained in the assembly 
              <LI> Drawing : .ed file, .plt file </UL>
        export_dir - The location where the export file(s) will be produced. If 
                     NULL, the Creo Parametric working directory is used.
        filename - The root of the filename to export (without the extension). 
                   If NULL, the Creo Parametric model name is used as the root.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The export succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments is invalid.
        PRO_TK_NOT_DISPLAYED - Model not displayed in any window.
        PRO_TK_E_NOT_FOUND - pro2prod_view.dll not found
        PRO_TK_BAD_CONTEXT - pro2prod_view.dll could not be loaded
        PRO_TK_NO_PERMISSION - The function does not have permission to operate 
                               on this model.

*/


extern ProError ProProductviewexportoptsAlloc (
                        ProProductviewExportOptions* opts);
/*
    Purpose: Allocates a new set of Creo View Export options.

    Input Arguments:
        none

    Output Arguments:
        opts - The Creo View Export options.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProProductviewexportoptsFree (ProProductviewExportOptions opts);
/*
    Purpose: Frees a set of Creo View Export options.

    Input Arguments:
        opts - The Creo View Export options.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/


extern ProError ProProductviewexportoptsFormatSet (
         ProProductviewExportOptions opts, ProProductviewFormat format);
/*
    Purpose: Sets the flag specifying the Creo View export format.

    Input Arguments:
        opts - The Creo View export options.
        format - The export format to use.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/



extern ProError ProProductviewFormattedMdlnameExport( ProMdl mdl,
                                      ProPath export_dir,
                                      ProMdlName filename,
                                      ProProductviewExportOptions opts );
/*
    Purpose: Exports a part, assembly or drawing to a user-specified Creo View 
             format. <b>Note:</b> In Creo 3 this function does not support 
             names longer than 31 characters. It will return PRO_TK_BAD_INPUTS 
             for longer names. The support for ProMdlName will be added in a 
             future release.

    Input Arguments:
        mdl - The model handle. If mdl is a drawing, it must be displayed in a 
              window. Depending upon the model type and export options, 
              following output files are created: <UL> <P>PRO_PV_FORMAT_PVS: 
              <LI> Part : .pvs file, .ol file <LI> Assembly : .pvs file, 
              separate .ol file for each part contained in the assembly <LI> 
              Drawing : .pvs file, .plt file <P>PRO_PV_FORMAT_ED: <LI> Part : 
              .ed file, .ol file <LI> Assembly : .ed file, separate .ol file 
              for each part contained in the assembly <LI> Drawing : .ed file, 
              .plt file <P>PRO_PV_FORMAT_EDZ: .edz file <P>PRO_PV_FORMAT_PVZ: 
              .pvz file </UL>
        export_dir - The location where the export file(s) will be produced. If 
                     NULL, the Creo Parametric working directory is used.
        filename - The root of the filename to export (without the extension). 
                   If NULL, the Creo Parametric model name is used as the root.
        opts - The export options handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The export succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments is invalid.
        PRO_TK_NOT_DISPLAYED - Model not displayed in any window.
        PRO_TK_E_NOT_FOUND - pro2prod_view.dll not found
        PRO_TK_BAD_CONTEXT - pro2prod_view.dll could not be loaded and/or
        Design Test Mode is active - the function is not available in this 
                                     mode.

*/


extern ProError ProEngineerDisplaydatecodeGet( char** display_datecode );
/*
    Purpose: Returns the Creo Parametric session's customer visible datecode, 
             as shown in Creo Parametric Help information. If it is necessary 
             to show an identifier for the Creo Parametric version to the user 
             from an application, this value should be used, rather than the 
             value passed in to the application's user_initialize().

    Input Arguments:
        none

    Output Arguments:
        display_datecode - The datecode string. Free this string using 
                           ProStringFree.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.

*/

extern ProError ProTexturePathGet( ProName      texture_name,  
                                   ProBoolean   create_temp_file, 
                                   ProBoolean  *p_was_embedded, 
                                   ProPath      texture_path);
/*
    Purpose: Looks up the full path to the texture, decal, or bump map file 
             indicated. If the texture is embedded inside a Creo Parametric 
             model, instead of being loaded from the texture path, this 
             function will write a temporary copy of the file if 
             "create_temp_file" is set to true.

    Input Arguments:
        texture_name - The texture file name.
        create_temp_file - PRO_B_TRUE to have Creo Parametric write a temporary 
                           copy of the texture file if its is embedded in a 
                           model. PRO_B_FALSE to skip writing the file.

    Output Arguments:
        p_was_embedded - PRO_B_TRUE if the texture file was embedded. If 
                         create_temp_file is also true a copy of the file was 
                         written. The user application is responsible for 
                         deleting the copy. Can be NULL.
        texture_path - The full path to the texture file. Can be NULL if 
                       create_temp_file is PRO_B_FALSE.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_E_NOT_FOUND - The texture file could not be found on disk or in 
                             memory.
        PRO_TK_CANT_WRITE - The temporary texture file could not be written.

*/

typedef ProBoolean (*ProFileSaveAccessFunction) (wchar_t* file_type,
                                                 ProMdl model, 
                                                 ProAppData app_data );
/*
    Purpose: Callback function to decide if the file type should be selectable 
             in File 'Save a Copy' dialog or not.

    Input Arguments:
        file_type - File type
        model - The handle of the model being saved
        app_data - The application data

    Output Arguments:
        none

    Return Values:
        PRO_B_TRUE - File type should be added in the file dialog.
        PRO_B_FALSE - File type should not be added in the the dialog.

*/

typedef ProError (*ProFileSaveOperationAction) (wchar_t* file_type,
                                                ProMdl model,
                                                ProPath file_path,
                                                ProAppData app_data );
/*
    Purpose: Callback action on pressing OK button in File 'Save a Copy' dialog 
             for the new registered type.

    Input Arguments:
        file_type - File type
        model - The model handle
        file_path - The full file path
        app_data - The application data

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Callback succeeded.
        PRO_TK_GENERAL_ERROR - Problem in processing this function.

*/

typedef ProBoolean (*ProFileOpenAccessFunction) (wchar_t* file_type,
                                                 ProAppData app_data );
/*
    Purpose: Callback function to evaluate the file type should be selectable 
             in the File Open dialog or not.

    Input Arguments:
        file_type - File type
        app_data - The application data

    Output Arguments:
        none

    Return Values:
        PRO_B_TRUE - File type should be added in the file dialog.
        PRO_B_FALSE - File type should not be added in the the dialog.

*/

typedef ProError (*ProFileOpenOperationAction) (wchar_t* file_type,
                                                ProPath file_path,
                                                ProAppData app_data );
/*
    Purpose: Callback action on pressing open button for the new registered 
             type.

    Input Arguments:
        file_type - File type
        file_path - The full file path
        app_data - The application data

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Callback succeeded.
        PRO_TK_GENERAL_ERROR - Problem in processing this function.

*/

extern ProError ProFileSaveRegister (wchar_t* file_type,
                                     wchar_t* file_description,
                                     ProFileSaveAccessFunction access_function,
                                     ProFileSaveOperationAction oper_action,
                                     ProAppData app_data);
/*
    Purpose: Register a file type in the 'File->Save a Copy' dialog interface 
             of Creo Parametric. 
             <P> NOTE: The ProFileSave API opens a standard file dialog. 
             ProFileSaveRegister does not work with this API.

    Input Arguments:
        file_type - File type
        file_description - Short description of the file.
        access_function - File Access function; NULL is always available
        oper_action - Action on selection of the file type
        app_data - The application data, may be NULL

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - File type is registered in the dialog.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Couldn't allocate memory for new type.
        PRO_TK_E_IN_USE - Already registered by this app.
        PRO_TK_GENERAL_ERROR - Failed to register type.
        PRO_TK_BAD_CONTEXT - The function is not available in Design Test Mode.

*/

extern ProError ProFileOpenRegister (wchar_t* file_type,
                                     wchar_t* file_description,
                                     ProFileOpenAccessFunction access_function,
                                     ProFileOpenOperationAction oper_action,
                                     ProAppData app_data);
/*
    Purpose: Register a file type with the 'File -> Open' dialog interface of 
             Creo Parametric. 
             <P> NOTE: The ProFileMdlnameOpen OR ProFileMdlfiletypeOpen API 
             opens a standard file dialog. ProFileOpenRegister does not work 
             with this API.

    Input Arguments:
        file_type - File type
        file_description - Short description of the file.
        access_function - File Access function; NULL is always available
        oper_action - Action on selection of the file type
        app_data - The application data, may be NULL

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - File type is registered in the dialog.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Couldn't allocate memory for new type.
        PRO_TK_E_IN_USE - Already registered by this app.
        PRO_TK_GENERAL_ERROR - Failed to register type.

*/

extern ProError ProEngineerReleaseNumericversionGet( int* ver );
/*
    Purpose: <b>Note:</b> This function is deprecated. Use 
             ProToolkitMajorVersionGet instead. Return the integer major 
             version number of the Creo Parametric executable that the Creo 
             Parametric TOOLKIT application isconnected to. This is an absolute 
             number counting from the first shipment of PTC's MCAD software; 
             for Creo Parametric 3.0 it is 33.

    Input Arguments:
        none

    Output Arguments:
        ver - the version

    Return Values:
        PRO_TK_NO_ERROR - The returned value is valid
        PRO_TK_GENERAL_ERROR - A valid numeric version could not be found.

*/

extern ProError ProToolkitMajorVersionGet(int* r_version);
/*
    Purpose: Return the major version number of the Creo Parametric executable 
             that the Creo Parametric TOOLKIT application is connected to. This 
             is an absolute number counting from the first shipment of PTC's 
             MCAD software. It is 40 for Creo Parametric 8.0

    Input Arguments:
        none

    Output Arguments:
        r_version - The major version.

    Return Values:
        PRO_TK_NO_ERROR - The returned value is valid.
        PRO_TK_GENERAL_ERROR - A valid major version could not be found.

*/

PRO_END_C_DECLS

#endif  /* PROUTIL_H */