Exemple #1
0
static bool
ReadIGCDeclaration(const TCHAR *path, IGCDeclarationHeader &header,
                   std::list<IGCDeclarationTurnpoint> &turnpoints)
{
  // Create FileReader for reading the task
  FileLineReaderA reader(path);
  if (reader.error())
    return false;

  // Read IGC file
  char *line;
  bool header_found = false;
  while ((line = reader.read()) != NULL) {
    // Skip lines which are not declaration records
    if (*line != _T('C'))
      continue;

    if (!header_found) {
      if (!IGCParseDeclarationHeader(line, header))
        return false;

      header_found = true;
      continue;
    }

    IGCDeclarationTurnpoint tp;
    if (IGCParseDeclarationTurnpoint(line, tp))
      turnpoints.push_back(tp);
  }

  return header_found;
}
Exemple #2
0
unsigned
TaskFileIGC::Count()
{
  // Open the IGC file
  FileLineReaderA reader(path);
  if (reader.error())
    return 0;

  IGCDeclarationHeader header;

  // Search for declaration
  char *line;
  while ((line = reader.read()) != NULL) {
    if (*line != 'C')
      continue;

    if (!IGCParseDeclarationHeader(line, header) ||
        header.num_turnpoints == 0)
      return 0;

    if (!header.task_name.empty() &&
        !StringIsEqual(header.task_name, "Task")) {
      // Remember the task name
      StaticString<256> task_name;
      task_name.clear();
      task_name.UnsafeAppendASCII(header.task_name.c_str());
      namesuffixes.append(_tcsdup(task_name.c_str()));
    }

    return 1;
  }

  return 0;
}
Exemple #3
0
static void
TestDeclarationHeader()
{
  IGCDeclarationHeader header;
  ok1(!IGCParseDeclarationHeader("", header));
  ok1(!IGCParseDeclarationHeader("C0309111642280309110001-2", header));

  ok1(IGCParseDeclarationHeader("C020811084345000000000002Task", header));
  ok1(header.datetime.day == 2);
  ok1(header.datetime.month == 8);
  ok1(header.datetime.year == 2011);
  ok1(header.datetime.hour == 8);
  ok1(header.datetime.minute == 43);
  ok1(header.datetime.second == 45);
  ok1(!header.flight_date.IsPlausible());
  ok1(header.num_turnpoints == 2);
  ok1(header.task_id[0] == '0' &&
      header.task_id[1] == '0' &&
      header.task_id[2] == '0' &&
      header.task_id[3] == '0');
  ok1(header.task_name == "Task");

  ok1(IGCParseDeclarationHeader("C210706120510210706000103", header));
  ok1(header.datetime.day == 21);
  ok1(header.datetime.month == 7);
  ok1(header.datetime.year == 2006);
  ok1(header.datetime.hour == 12);
  ok1(header.datetime.minute == 5);
  ok1(header.datetime.second == 10);
  ok1(header.flight_date.day == 21);
  ok1(header.flight_date.month == 7);
  ok1(header.flight_date.year == 2006);
  ok1(header.num_turnpoints == 3);
  ok1(header.task_id[0] == '0' &&
      header.task_id[1] == '0' &&
      header.task_id[2] == '0' &&
      header.task_id[3] == '1');
  ok1(header.task_name.empty());
}