#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "rs274ngc.hh"
#include "interp_return.hh"
#include "interp_internal.hh"
#include "rs274ngc_interp.hh"
int Interp::write_g_codes(block_pointer block, setup_pointer settings) {
int *gez;
gez = settings->active_g_codes;
gez[0] = settings->sequence_number;
gez[1] = settings->motion_mode;
gez[2] = ((block == NULL) ? -1 : block->g_modes[0]);
switch(settings->plane) {
case CANON_PLANE_XY:
gez[3] = G_17;
break;
case CANON_PLANE_XZ:
gez[3] = G_18;
break;
case CANON_PLANE_YZ:
gez[3] = G_19;
break;
case CANON_PLANE_UV:
gez[3] = G_17_1;
break;
case CANON_PLANE_UW:
gez[3] = G_18_1;
break;
case CANON_PLANE_VW:
gez[3] = G_19_1;
break;
}
gez[4] =
(settings->cutter_comp_side == RIGHT) ? G_42 :
(settings->cutter_comp_side == LEFT) ? G_41 : G_40;
gez[5] = (settings->length_units == CANON_UNITS_INCHES) ? G_20 : G_21;
gez[6] = (settings->distance_mode == MODE_ABSOLUTE) ? G_90 : G_91;
gez[7] = (settings->feed_mode == INVERSE_TIME) ? G_93 :
(settings->feed_mode == UNITS_PER_MINUTE) ? G_94 : G_95;
gez[8] =
(settings->origin_index <
7) ? (530 + (10 * settings->origin_index)) : (584 +
settings->origin_index);
gez[9] = (settings->tool_offset.tran.x || settings->tool_offset.tran.y || settings->tool_offset.tran.z ||
settings->tool_offset.a || settings->tool_offset.b || settings->tool_offset.c ||
settings->tool_offset.u || settings->tool_offset.v || settings->tool_offset.w) ? G_43 : G_49;
gez[10] = (settings->retract_mode == OLD_Z) ? G_98 : G_99;
gez[11] =
(settings->control_mode == CANON_CONTINUOUS) ? G_64 :
(settings->control_mode == CANON_EXACT_PATH) ? G_61 : G_61_1;
gez[12] = -1;
gez[13] = (settings->spindle_mode[0] == CONSTANT_RPM) ? G_97 : G_96;
gez[14] = (settings->ijk_distance_mode == MODE_ABSOLUTE) ? G_90_1 : G_91_1;
gez[15] = (settings->lathe_diameter_mode) ? G_7 : G_8;
return INTERP_OK;
}
int Interp::write_m_codes(block_pointer block, setup_pointer settings) {
int *emz;
emz = settings->active_m_codes;
emz[0] = settings->sequence_number;
emz[1] = (block == NULL) ? -1 : block->m_modes[4];
emz[2] = (settings->spindle_turning[0] == CANON_STOPPED) ? 5 :
(settings->spindle_turning[0] == CANON_CLOCKWISE) ? 3 : 4;
emz[3] =
(block == NULL) ? -1 : block->m_modes[6];
emz[4] =
(settings->mist) ? 7 : (settings->flood) ? -1 : 9;
emz[5] =
(settings->flood) ? 8 : -1;
if (settings->feed_override) {
if (settings->speed_override) emz[6] = 48;
else emz[6] = 50;
} else if (settings->speed_override) {
emz[6] = 51;
} else emz[6] = 49;
emz[7] =
(settings->adaptive_feed) ? 52 : -1;
emz[8] =
(settings->feed_hold) ? 53 : -1;
return INTERP_OK;
}
int Interp::write_settings(setup_pointer settings) {
double *vals;
vals = settings->active_settings;
vals[0] = settings->sequence_number;
vals[1] = settings->feed_rate;
vals[2] = settings->speed[0];
return INTERP_OK;
}