188 lines
5.9 KiB
C
188 lines
5.9 KiB
C
/***************************************************************/
|
|
/* main.c */
|
|
/* Digital PLL */
|
|
/***************************************************************/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <math.h>
|
|
|
|
|
|
#define TYPE_AP_DEP 1
|
|
#define TYPE_AP_ARR 2
|
|
#define TYPE_DIRECT 3
|
|
#define TYPE_LEG 4
|
|
|
|
/***************************************************************/
|
|
typedef struct _srtentry_t
|
|
{
|
|
char name[257];
|
|
int type;
|
|
char typestr[257];
|
|
char long_prefix;
|
|
double longitude;
|
|
char lat_prefix;
|
|
double latitude;
|
|
int ground_level;
|
|
} rtentry_t;
|
|
|
|
typedef struct _splan_t
|
|
{
|
|
char name[1025];
|
|
FILE *pFile;
|
|
} plant_t;
|
|
|
|
/***************************************************************/
|
|
int entry_print(FILE *pFile, rtentry_t *pEnt)
|
|
{
|
|
int err = 0;
|
|
|
|
switch (pEnt->type)
|
|
{
|
|
case TYPE_AP_DEP:
|
|
fprintf(pFile, "%s\n", pEnt->name);
|
|
fprintf(pFile, "1\n");
|
|
fprintf(pFile, "%s\n", pEnt->typestr);
|
|
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
|
|
fprintf(pFile, "-----\n");
|
|
fprintf(pFile, "1\n"); // departure
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "\n");
|
|
fprintf(pFile, "1\n");
|
|
fprintf(pFile, "%d\n", pEnt->ground_level);
|
|
fprintf(pFile, "-\n");
|
|
fprintf(pFile, "-1000000\n");
|
|
fprintf(pFile, "-1000000\n");
|
|
fprintf(pFile, "\n");
|
|
break;
|
|
|
|
case TYPE_AP_ARR:
|
|
fprintf(pFile, "%s\n", pEnt->name);
|
|
fprintf(pFile, "1\n"); // Airport
|
|
fprintf(pFile, "-\n");
|
|
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
|
|
fprintf(pFile, "-----\n");
|
|
fprintf(pFile, "0\n"); // arrival
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "\n");
|
|
fprintf(pFile, "1\n");
|
|
fprintf(pFile, "%d\n", pEnt->ground_level);
|
|
fprintf(pFile, "-\n");
|
|
fprintf(pFile, "-1000000\n");
|
|
fprintf(pFile, "-1000000\n");
|
|
fprintf(pFile, "\n");
|
|
break;
|
|
|
|
case TYPE_DIRECT:
|
|
fprintf(pFile, "%s\n", pEnt->name);
|
|
fprintf(pFile, "2\n"); // Direct
|
|
fprintf(pFile, "%s\n", pEnt->typestr);
|
|
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "\n");
|
|
break;
|
|
|
|
case TYPE_LEG:
|
|
fprintf(pFile, "%s\n", pEnt->name);
|
|
fprintf(pFile, "5\n"); // LEG
|
|
fprintf(pFile, "%s\n", pEnt->typestr);
|
|
fprintf(pFile, "1 %c %.5f %c %.6f %d\n", toupper(pEnt->long_prefix), pEnt->longitude, toupper(pEnt->lat_prefix), pEnt->latitude, pEnt->ground_level);
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "0\n");
|
|
fprintf(pFile, "\n");
|
|
break;
|
|
|
|
default:
|
|
err = -1;
|
|
break;
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
int entry_set(rtentry_t *pEnt, int type, char *pName, char *pTypeStr, double latitude, double longitude, int gl)
|
|
{
|
|
strcpy(pEnt->typestr, pTypeStr);
|
|
|
|
if (longitude < 0)
|
|
pEnt->long_prefix = 'S';
|
|
else
|
|
pEnt->long_prefix = 'N';
|
|
|
|
pEnt->longitude = fabs(longitude);
|
|
|
|
if (latitude < 0)
|
|
pEnt->lat_prefix = 'E';
|
|
else
|
|
pEnt->lat_prefix = 'W';
|
|
|
|
pEnt->latitude = fabs(latitude);
|
|
|
|
if (!pName)
|
|
{
|
|
if (TYPE_DIRECT != type)
|
|
return -1;
|
|
|
|
sprintf(pEnt->name, "%c%.0f%c%.0f", pEnt->long_prefix, pEnt->longitude, pEnt->lat_prefix, pEnt->latitude);
|
|
}
|
|
else
|
|
{
|
|
strcpy(pEnt->name, pName);
|
|
}
|
|
|
|
pEnt->ground_level = gl;
|
|
pEnt->type = type;
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define NUM_WP 17
|
|
|
|
int main(void)
|
|
{
|
|
int i;
|
|
rtentry_t ent[NUM_WP];
|
|
FILE *pFile;
|
|
|
|
// pFile = fopen("C:\\Programme\\Microsoft Games\\Flight Simulator 9\\PMDG\\FLIGHTPLANS\\test.rte", "w");
|
|
pFile = stderr;
|
|
|
|
/*
|
|
entry_set(&ent[0], TYPE_AP_DEP, "EDDF", "DIRECT", -8.543125, 50.12642, 364);
|
|
entry_set(&ent[1], TYPE_DIRECT, "NAPSI", "DIRECT", -6.021389, 51.85528, 0);
|
|
entry_set(&ent[2], TYPE_LEG, "GOMUP", "UN572", 10, 57, 0);
|
|
entry_set(&ent[3], TYPE_DIRECT, NULL, "DIRECT", 10.321, 60.123, 0);
|
|
entry_set(&ent[4], TYPE_AP_ARR, "KSFO", "-", 122.543125, 37.12642, 13);
|
|
*/
|
|
i = 0;
|
|
entry_set(&ent[i++], TYPE_AP_DEP, "EDDF", "DIRECT", -8.543125, 50.12642, 364);
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.495517678260868,50.08917173742456,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.437482727705472,50.09692405502469,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.314112693383819,50.12183705278613,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.282904310172924,50.19787276231849,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.310346569009369,50.43053520194942,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.310814943566584,50.7757798665427,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.339329466837882,51.98034086955558,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.24621634315524,52.92949698506673,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.192535830735153,53.12125289919808,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.279381463623494,53.18778726201814,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.444951496795227,53.16928101451241,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.503513867383489,53.07199210889475,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.571512947137819,53.04267405471422,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.648398246256804,53.0469130539089,0 );
|
|
entry_set(&ent[i++], TYPE_DIRECT, NULL, "DIRECT", -8.723907341812861,53.0466716799862,0 );
|
|
entry_set(&ent[i++], TYPE_AP_ARR, "EDDW", "-", -8.723907341812861, 53.0466716799862, 13);
|
|
|
|
|
|
fprintf(pFile, "Generated by kml2rte v0.1\n\n%d\n\n", NUM_WP);
|
|
for (i=0; i < NUM_WP; i++)
|
|
entry_print(pFile, &ent[i]);
|
|
|
|
// fclose (pFile);
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|