110a /* This program converts Kepler data in 2-line NASA format to */ /* the format used by the QUIKTRAK program. */ #include #include #include 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 \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; } . 0