Beispiel #1
0
void ShaderParamParser::parse_float3_array(std::vector<float>& values)
{
    parse_float_array(values);

    if (values.size() % 3 != 0)
        throw ExceptionOSLParamParseError();
}
Beispiel #2
0
int main(int argc, char **argv){
    double result = 0, retcode;
    double *tmp = NULL;
    int i;

    retcode = parse_float_array(argc, argv, &tmp);
    if(retcode || NULL == tmp){
        if(retcode>=128){
            int idx = retcode-128;
            printf("Error in argument `%s' at position %d\n", argv[idx], idx);
        }
        printf("Error parsing command line.\nExiting.\n");
        return 1;
    }

    result = average(argc-1, tmp);

    printf("Your array is: ");
    for(i=0; i<argc-1; i++){
        printf("%g ", tmp[i]);
    }
    printf("\n");

    printf("This is the average of the numbers in your array: %g\n", result);
    return 0;
}
Beispiel #3
0
int main(int argc, char *argv[]) {
  struct MachineControlConfig config;
  bzero(&config, sizeof(config));
  memcpy(config.steps_per_mm, kStepsPerMM, sizeof(config.steps_per_mm));
  memcpy(config.home_switch, kHomePos, sizeof(config.home_switch));
  memcpy(config.move_range_mm, kMoveRange, sizeof(config.move_range_mm));
  memcpy(config.max_feedrate, kMaxFeedrate, sizeof(config.max_feedrate));
  memcpy(config.acceleration, kDefaultAccel, sizeof(config.acceleration));
  config.speed_factor = 1;
  config.dry_run = 0;
  config.debug_print = 0;
  config.synchronous = 0;
  config.channel_layout = kChannelLayout;
  config.axis_mapping = kAxisMapping;

  // Less common options don't have a short option.
  enum LongOptionsOnly {
    SET_STEPS_MM = 1000,
    SET_HOME_POS,
    SET_MOTOR_MAPPING,
  };

  static struct option long_options[] = {
    { "max-feedrate",  required_argument, NULL, 'm'},
    { "accel",         required_argument, NULL, 'a'},
    { "range",         required_argument, NULL, 'r' },
    { "steps-mm",      required_argument, NULL, SET_STEPS_MM },
    { "home-pos",      required_argument, NULL, SET_HOME_POS },
    { "axis-mapping",  required_argument, NULL, SET_MOTOR_MAPPING },
    { "port",          required_argument, NULL, 'p'},
    { "bind-addr",     required_argument, NULL, 'b'},
    { 0,               0,                 0,    0  },
  };

  int listen_port = -1;
  char do_file_repeat = 0;
  char *bind_addr = NULL;
  int opt;
  int parse_count;
  while ((opt = getopt_long(argc, argv, "m:a:p:b:r:SPRnf:",
			    long_options, NULL)) != -1) {
    switch (opt) {
    case 'f':
      config.speed_factor = atof(optarg);
      if (config.speed_factor <= 0)
	return usage(argv[0], "Speedfactor cannot be <= 0");
      break;
    case 'm':
      parse_count = parse_float_array(optarg, config.max_feedrate,
                                      GCODE_NUM_AXES);
      if (!parse_count) return usage(argv[0], "max-feedrate missing.");
      break;
    case 'a':
      parse_count = parse_float_array(optarg, config.acceleration,
                                      GCODE_NUM_AXES);
      if (!parse_count) return usage(argv[0], "Acceleration missing.");
      // Negative or 0 means: 'infinite'.
      break;
    case SET_STEPS_MM:
      if (!parse_float_array(optarg, config.steps_per_mm, GCODE_NUM_AXES))
	return usage(argv[0], "steps/mm failed to parse.");
      break;
    case SET_MOTOR_MAPPING:
      config.axis_mapping = strdup(optarg);
      break;
    case SET_HOME_POS: {
      float tmp[GCODE_NUM_AXES];
      bzero(tmp, sizeof(tmp));
      if (!parse_float_array(optarg, tmp, GCODE_NUM_AXES))
	return usage(argv[0], "Failed to parse home switch.");
      for (int i = 0; i < GCODE_NUM_AXES; ++i)
	config.home_switch[i] = (enum HomeType) tmp[i];
    }
      break;
    case 'r':
      if (!parse_float_array(optarg, config.move_range_mm, GCODE_NUM_AXES))
	return usage(argv[0], "Failed to parse ranges.");
      break;
    case 'n':
      config.dry_run = 1;
      break;
    case 'P':
      config.debug_print = 1;
      break;
    case 'S':
      config.synchronous = 1;
      break;
    case 'R':
      do_file_repeat = 1;
      break;
    case 'p':
      listen_port = atoi(optarg);
      break;
    case 'b':
      bind_addr = strdup(optarg);
      break;
    default:
      return usage(argv[0], "Unknown flag");
    }
  }

  const char has_filename = (optind < argc);
  if (! (has_filename ^ (listen_port > 0))) {
    return usage(argv[0], "Choose one: <gcode-filename> or --port <port>.");
  }
  if (!has_filename && do_file_repeat) {
    return usage(argv[0], "-R (repeat) only makes sense with a filename.");
  }

  if (gcode_machine_control_init(&config) != 0) {
    return 1;
  }

  int ret = 0;
  if (has_filename) {
    const char *filename = argv[optind];
    ret = send_file_to_machine(filename, do_file_repeat);
  } else {
    ret = run_server(bind_addr, listen_port);
  }

  gcode_machine_control_exit();
  free(bind_addr);
  return ret;
}