This line if code:
init_once(0)
gives these errors:
emc/rs274ngc/interp_setup.cc: In constructor ‘setup_struct::setup_struct()’:
emc/rs274ngc/interp_setup.cc:178:16: error: incompatible types in assignment of ‘double’ to ‘double [8]’
emc/rs274ngc/interp_setup.cc:178:16: error: incompatible types in assignment of ‘SPINDLE_MODE’ to ‘SPINDLE_MODE [8]’
emc/rs274ngc/interp_setup.cc:178:16: error: incompatible types in assignment of ‘int’ to ‘bool [8]’
emc/rs274ngc/interp_setup.cc:178:16: error: incompatible types in assignment of ‘int’ to ‘CANON_DIRECTION [8] {aka int [8]}’
make: *** [objects/emc/rs274ngc/interp_setup.o] Error 1
init_once resolves to this struct:
typedef struct setup_struct
{
setup_struct();
~setup_struct();
double AA_axis_offset; // A-axis g92 offset
double AA_current; // current A-axis position
double AA_origin_offset; // A-axis origin offset
double BB_axis_offset; // B-axis g92offset
double BB_current; // current B-axis position
double BB_origin_offset; // B-axis origin offset
double CC_axis_offset; // C-axis g92offset
double CC_current; // current C-axis position
double CC_origin_offset; // C-axis origin offset
double u_axis_offset, u_current, u_origin_offset;
double v_axis_offset, v_current, v_origin_offset;
double w_axis_offset, w_current, w_origin_offset;
int active_g_codes[ACTIVE_G_CODES]; // array of active G codes
int active_m_codes[ACTIVE_M_CODES]; // array of active M codes
double active_settings[ACTIVE_SETTINGS]; // array of feed, speed, etc.
bool arc_not_allowed; // we just exited cutter compensation, so we error if the next move isn't straight
double axis_offset_x; // X-axis g92 offset
double axis_offset_y; // Y-axis g92 offset
double axis_offset_z; // Z-axis g92 offset
// block block1; // parsed next block
// stack of controlling blocks for remap execution
block blocks[MAX_NESTED_REMAPS];
// index into blocks, points to currently controlling block
int remap_level;
#define CONTROLLING_BLOCK(s) ((s).blocks[(s).remap_level])
#define EXECUTING_BLOCK(s) ((s).blocks[0])
char blocktext[LINELEN]; // linetext downcased, white space gone
CANON_MOTION_MODE control_mode; // exact path or cutting mode
int current_pocket; // carousel slot number of current tool
double current_x; // current X-axis position
double current_y; // current Y-axis position
double current_z; // current Z-axis position
double cutter_comp_radius; // current cutter compensation radius
int cutter_comp_orientation; // current cutter compensation tool orientation
int cutter_comp_side; // current cutter compensation side
double cycle_cc; // cc-value (normal) for canned cycles
double cycle_i; // i-value for canned cycles
double cycle_j; // j-value for canned cycles
double cycle_k; // k-value for canned cycles
int cycle_l; // l-value for canned cycles
double cycle_p; // p-value (dwell) for canned cycles
double cycle_q; // q-value for canned cycles
double cycle_r; // r-value for canned cycles
double cycle_il; // "initial level" height when switching from non-cycle into cycle, for g98 retract
int cycle_il_flag; // il is currently valid because we're in a series of cycles
DISTANCE_MODE distance_mode; // absolute or incremental
DISTANCE_MODE ijk_distance_mode; // absolute or incremental for IJK in arcs
int feed_mode; // G_93 (inverse time) or G_94 units/min
bool feed_override; // whether feed override is enabled
double feed_rate; // feed rate in current units/min
char filename[PATH_MAX]; // name of currently open NC code file
FILE *file_pointer; // file pointer for open NC code file
bool flood; // whether flood coolant is on
CANON_UNITS length_units; // millimeters or inches
double center_arc_radius_tolerance_inch; // modify with ini setting
double center_arc_radius_tolerance_mm; // modify with ini setting
int line_length; // length of line last read
char linetext[LINELEN]; // text of most recent line read
bool mist; // whether mist coolant is on
int motion_mode; // active G-code for motion
int origin_index; // active origin (1=G54 to 9=G59.3)
double origin_offset_x; // g5x offset x
double origin_offset_y; // g5x offset y
double origin_offset_z; // g5x offset z
double rotation_xy; // rotation of coordinate system around Z, in degrees
double parameters[RS274NGC_MAX_PARAMETERS]; // system parameters
int parameter_occurrence; // parameter buffer index
int parameter_numbers[MAX_NAMED_PARAMETERS]; // parameter number buffer
double parameter_values[MAX_NAMED_PARAMETERS]; // parameter value buffer
int named_parameter_occurrence;
const char *named_parameters[MAX_NAMED_PARAMETERS];
double named_parameter_values[MAX_NAMED_PARAMETERS];
bool percent_flag; // true means first line was percent sign
CANON_PLANE plane; // active plane, XY-, YZ-, or XZ-plane
bool probe_flag; // flag indicating probing done
bool input_flag; // flag indicating waiting for input done
bool toolchange_flag; // flag indicating we just had a tool change
int input_index; // channel queried
bool input_digital; // input queried was digital (false=analog)
bool cutter_comp_firstmove; // this is the first comp move
double program_x; // program x, used when cutter comp on
double program_y; // program y, used when cutter comp on
double program_z; // program y, used when cutter comp on
RETRACT_MODE retract_mode; // for cycles, old_z or r_plane
int random_toolchanger; // tool changer swaps pockets, and pocket 0 is the spindle instead of "no tool"
int selected_pocket; // tool slot selected but not active
int selected_tool; // start switchover to pocket-agnostic interp
int sequence_number; // sequence number of line last read
int num_spindles; // number of spindles available
int active_spindle; // the spindle currently used for CSS, FPR etc.
double speed[EMCMOT_MAX_SPINDLES];// array of spindle speeds
SPINDLE_MODE spindle_mode[EMCMOT_MAX_SPINDLES];// CONSTANT_RPM or CONSTANT_SURFACE
CANON_SPEED_FEED_MODE speed_feed_mode; // independent or synched
int spindle_fpr; // the spindle that FPR is synched to
bool speed_override[EMCMOT_MAX_SPINDLES]; // whether speed override is enabled
CANON_DIRECTION spindle_turning[EMCMOT_MAX_SPINDLES]; // direction spindle is turning
char stack[STACK_LEN][STACK_ENTRY_LEN]; // stack of calls for error reporting
int stack_index; // index into the stack
EmcPose tool_offset; // tool length offset
int pockets_max; // number of pockets in carousel (including pocket 0, the spindle)
CANON_TOOL_TABLE tool_table[CANON_POCKETS_MAX]; // index is pocket number
double traverse_rate; // rate for traverse motions
double orient_offset; // added to M19 R word, from [RS274NGC]ORIENT_OFFSET
/* stuff for subroutines and control structures */
int defining_sub; // true if in a subroutine defn
const char *sub_name; // name of sub we are defining (free this)
int doing_continue; // true if doing a continue
int doing_break; // true if doing a break
int executed_if; // true if executed in current if
const char *skipping_o; // o_name we are skipping for (or zero)
const char *skipping_to_sub; // o_name of sub skipping to (or zero)
int skipping_start; // start of skipping (sequence)
double test_value; // value for "if", "while", "elseif"
double return_value; // optional return value for "return", "endsub"
int value_returned; // the last NGC procedure did/did not return a value
int call_level; // current subroutine level
context sub_context[INTERP_SUB_ROUTINE_LEVELS];
int call_state; // enum call_states - inidicate Py handler reexecution
offset_map_type offset_map; // store label x name, file, line
bool adaptive_feed; // adaptive feed is enabled
bool feed_hold; // feed hold is enabled
int loggingLevel; // 0 means logging is off
int debugmask; // from ini EMC/DEBUG
char log_file[PATH_MAX];
char program_prefix[PATH_MAX]; // program directory
const char *subroutines[MAX_SUB_DIRS]; // subroutines directories
int use_lazy_close; // wait until next open before closing
// the input file
int lazy_closing; // close has been called
char wizard_root[PATH_MAX];
int tool_change_at_g30;
int tool_change_quill_up;
int tool_change_with_spindle_on;
int a_axis_wrapped;
int b_axis_wrapped;
int c_axis_wrapped;
int a_indexer_jnum;
int b_indexer_jnum;
int c_indexer_jnum;
bool lathe_diameter_mode; //Lathe diameter mode (g07/G08)
bool mdi_interrupt;
int feature_set;
int disable_g92_persistence;
#define FEATURE(x) (_setup.feature_set & FEATURE_ ## x)
#define FEATURE_RETAIN_G43 0x00000001
#define FEATURE_OWORD_N_ARGS 0x00000002
#define FEATURE_INI_VARS 0x00000004
#define FEATURE_HAL_PIN_VARS 0x00000008
// do not lowercase named params inside comments - for #<_hal[PinName]>
#define FEATURE_NO_DOWNCASE_OWORD 0x00000010
#define FEATURE_OWORD_WARNONLY 0x00000020
boost::python::object *pythis; // boost::cref to 'this'
const char *on_abort_command;
int_remap_map g_remapped,m_remapped;
remap_map remaps;
#define INIT_FUNC "__init__"
#define DELETE_FUNC "__delete__"
// task calls upon interp.init() repeatedly
// protect init() operations which are not idempotent
int init_once;
} setup;