/* This program converts Kepler data in 2-line NASA format to */
/* the format used by the QUIKTRAK program. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned char* trim(unsigned char *s, int len);
int trimlen;
main(int argc, char **argv)
{
if(argc > 1)
convert(argv[1]);
else {
printf("NASA to QUIKTRAK conversion program v1.0 by SM5SXL\n");
printf("usage: n2q <source file in NASA format> \n");
exit(1);
}
}
convert(char *kepsfile)
{
FILE* tf;
FILE* kf;
FILE* pf;
char nasa_1[129], nasa_2[129], line_1[14][129], line_2[14][129], freq_str[80];
int sat_exists, i;
char *tmp;
if(! (kf = fopen(kepsfile, "rt"))) {
printf("Error opening %s!\n", kepsfile);
exit(1);
}
if(! (pf = fopen("TRACK.DAT", "rt"))) {
printf("Error opening TRACK.DAT!\n");
exit(1);
}
tf = fopen("TEMP.$$$", "wt");
printf("\n");
fgets(nasa_1, 128, pf); /* Old QTH data from TRACK.DAT */
fputs(nasa_1, tf);
for (i = 0; i < 14; i++) {
fgets(line_1[i], 128, pf);
fgets(line_2[i], 128, pf);
}
while(1) {
if(! fgets(nasa_1, 128, kf)) break; /* Satellite name */
if(! strlen(nasa_1)) break;
nasa_1[strlen(nasa_1)-1] = 0;
i = strlen(nasa_1) - 1; /* Trim trailing spaces */
while(nasa_1[i] == 0x20)
nasa_1[i--] = 0;
sat_exists = 0;
for(i = 0; i < 14; i++) { /* Search for match */
if(strstr(line_1[i], nasa_1)) {
sat_exists = 1;
break;
}
}
if(sat_exists) {
printf("Updating %s\n", nasa_1); /* message to screen */
strcpy(line_1[i], "\"");
strcat(line_1[i], nasa_1);
strcat(line_1[i], "\","); /* Satellite name */
fgets(nasa_1, 128, kf); /* Read in line 1 and 2 of one sat */
fgets(nasa_2, 128, kf);
strcat(line_1[i], "\"");
tmp = trim(&nasa_1[2], 5);
strncat(line_1[i], tmp, trimlen); /* Cat number */
strcat(line_1[i], " set ");
tmp = trim(&nasa_1[64], 4);
strncat(line_1[i], tmp, trimlen); /* Element set */
strcat(line_1[i], "\",");
tmp = trim(&nasa_1[20], 12);
strncat(line_1[i], tmp, trimlen); /* Epoch day */
strcat(line_1[i], ",");
tmp = trim(&nasa_2[8], 8);
strncat(line_1[i], tmp, trimlen); /* Inclination */
strcat(line_1[i], ",");
tmp = trim(&nasa_2[17], 8);
strncat(line_1[i], tmp, trimlen); /* RAAN */
strcat(line_1[i], ",");
strcat(line_1[i], ".");
tmp = trim(&nasa_2[26], 7);
strncat(line_1[i], tmp, trimlen); /* Ecce */
strcat(line_1[i], ",");
tmp = trim(&nasa_2[34], 8);
strncat(line_1[i], tmp, trimlen); /* Arg of Perigee */
strcat(line_1[i], ",");
tmp = trim(&nasa_2[43], 8);
strncat(line_1[i], tmp, trimlen); /* Mean Anomaly */
strcat(line_1[i], "\n");
tmp = strchr(line_2[i], ',') + 1; /* Extract Freq and BLAT/BLNG from old file */
tmp = strchr(tmp, ',') + 1;
tmp = strchr(tmp, ',') + 1;
strcpy(freq_str, tmp);
strcpy(line_2[i], "");
tmp = trim(&nasa_2[52], 11);
strncat(line_2[i], tmp, trimlen); /* Mean Motion */
strcat(line_2[i], ",");
tmp = trim(&nasa_1[33], 10);
strncat(line_2[i], tmp, trimlen); /* Drag */
strcat(line_2[i], ",");
tmp = trim(&nasa_2[63], 5);
strncat(line_2[i], tmp, trimlen); /* Orbit nr */
strcat(line_2[i], ",");
strcat(line_2[i], freq_str); /* Push back freq and BLNG/BLAT
values */
} else {
fgets(nasa_1, 128, kf); /* Read through sat entry */
fgets(nasa_1, 128, kf);
}
}
for(i = 0; i < 14; i++) { /* Put new sat values in TEMP.$$$ */
fputs(line_1[i], tf);
fputs(line_2[i], tf);
}
for(i = 0; i < 14; i++) { /* Add window data to TEMP.$$$ */
fgets(nasa_1, 128, pf);
fputs(nasa_1, tf);
}
fprintf(tf,"%c\n", 0x1a); /* Ctrl-Z to be sure... */
fclose(kf);
fclose(pf);
fclose(tf);
remove("TRACK.DAT"); /* delete old TRACK.DAT */
rename("TEMP.$$$", "TRACK.DAT"); /* rename temp file to TRACK.DAT */
printf("OK.\n");
}
unsigned char* trim(unsigned char *s, int len) /* Trims spaces */
{
while(s[0] == 0x20) {
len--;
s += 1;
}
trimlen = len;
return s;
}