/***************************************************************/ /* main.c */ /* Digital PLL */ /***************************************************************/ #include #include #include #include #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; }