main(int argc, char *argv[]) { char *filename; double starttime; double endtime; char startdate[100]; char enddate[100]; int nrecords; int n; if (argc < 2) { fprintf(stderr, "Usage: makemastfile path/file1 path/file2 ...\n"); return(1); } /* Loop over all input files, writing out filename, startdate, enddate, and num records */ for (n = 1; n < argc; n++) { filename = argv[n]; if (get_start_and_end_times(filename, &starttime, &endtime, &nrecords) == 1) { epoch_to_str(starttime, startdate); epoch_to_str(endtime, enddate); printf("%s %s %s %d\n", startdate, enddate, filename, nrecords); } } return(1); }
/** * Show satellite info in a dialog * * @param sat Pointer to the sat info. * @param data Pointer to parent window or NULL. * * FIXME: see nice drawing at http://www.amsat.org/amsat-new/tools/keps_tutorial.php */ void show_sat_info(sat_t * sat, gpointer data) { GtkWidget *dialog; GtkWidget *notebook; GtkWidget *table; GtkWidget *label; GtkWindow *toplevel = NULL; gchar *str; if (data != NULL) toplevel = GTK_WINDOW(data); /* create table */ table = gtk_grid_new(); gtk_grid_set_column_spacing(GTK_GRID(table), 5); gtk_grid_set_row_spacing(GTK_GRID(table), 5); gtk_container_set_border_width(GTK_CONTAINER(table), 10); /* satellite name */ label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), _("<b>Satellite name:</b>")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 0, 1, 1); label = gtk_label_new(NULL); str = g_markup_printf_escaped(_("<b>%s</b>"), sat->nickname); gtk_label_set_markup(GTK_LABEL(label), str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 0, 1, 1); g_free(str); /* operational status */ label = gtk_label_new(_("Operational Status:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 1, 1, 1); switch (sat->tle.status) { case OP_STAT_OPERATIONAL: label = gtk_label_new(_("Operational")); break; case OP_STAT_NONOP: label = gtk_label_new(_("Non-operational")); break; case OP_STAT_PARTIAL: label = gtk_label_new(_("Partially operational")); break; case OP_STAT_STDBY: label = gtk_label_new(_("Backup/Standby")); break; case OP_STAT_SPARE: label = gtk_label_new(_("Spare")); break; case OP_STAT_EXTENDED: label = gtk_label_new(_("Extended Mission")); break; default: label = gtk_label_new(_("Unknown")); break; } g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 1, 1, 1); /* Catnum */ label = gtk_label_new(_("Catalogue number:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 2, 1, 1); str = g_strdup_printf("%d", sat->tle.catnr); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 2, 1, 1); g_free(str); /* international designator */ label = gtk_label_new(_("International designator:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 3, 1, 1); label = gtk_label_new(sat->tle.idesg); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 3, 1, 1); /* elset number */ label = gtk_label_new(_("Element set number:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 4, 1, 1); str = g_strdup_printf("%d", sat->tle.elset); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 4, 1, 1); g_free(str); /* elset epoch */ label = gtk_label_new(_("Epoch time:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 5, 1, 1); str = epoch_to_str(sat); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 5, 1, 1); g_free(str); /* Revolution Number @ Epoch */ label = gtk_label_new(_("Orbit number @ epoch:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 6, 1, 1); str = g_strdup_printf("%d", sat->tle.revnum); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 6, 1, 1); g_free(str); /* ephermis type left out, since it is always 0 */ /* separator */ gtk_grid_attach(GTK_GRID(table), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), 0, 7, 2, 1); /* Orbit inclination */ label = gtk_label_new(_("Inclination:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 8, 1, 1); str = g_strdup_printf("%.4f\302\260", sat->tle.xincl / de2ra); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 8, 1, 1); g_free(str); /* RAAN */ label = gtk_label_new(_("RAAN:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 9, 1, 1); str = g_strdup_printf("%.4f\302\260", sat->tle.xnodeo / de2ra); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 9, 1, 1); g_free(str); /* Eccentricity */ label = gtk_label_new(_("Eccentricity:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 10, 1, 1); str = g_strdup_printf("%.7f", sat->tle.eo); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 10, 1, 1); g_free(str); /* Argument of perigee */ label = gtk_label_new(_("Arg. of perigee:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 11, 1, 1); str = g_strdup_printf("%.4f\302\260", sat->tle.omegao / de2ra); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 11, 1, 1); g_free(str); /* Mean Anomaly */ label = gtk_label_new(_("Mean anomaly:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 12, 1, 1); str = g_strdup_printf("%.4f\302\260", sat->tle.xmo / de2ra); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 12, 1, 1); g_free(str); /* Mean Motion */ label = gtk_label_new(_("Mean motion:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 13, 1, 1); str = g_strdup_printf("%.8f [rev/day]", sat->meanmo); label = gtk_label_new(str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 13, 1, 1); g_free(str); /* one half of the first time derivative of mean motion */ label = gtk_label_new(_("\302\275 d/dt (mean motion):")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 14, 1, 1); str = g_strdup_printf("%.5e [rev/day<sup>2</sup>]", sat->tle.xndt2o / (twopi / xmnpda / xmnpda)); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 14, 1, 1); g_free(str); /* one sixth of the second time derivative of mean motion */ label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), _("1/6 d<sup>2</sup>/dt<sup>2</sup> (mean motion):")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 15, 1, 1); str = g_strdup_printf("%.5e [rev/day<sup>3</sup>]", sat->tle.xndd6o * xmnpda / (twopi / xmnpda / xmnpda)); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 15, 1, 1); g_free(str); /* B* drag term */ label = gtk_label_new(_("B* drag term:")); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 0, 16, 1, 1); str = g_strdup_printf("%.5e [R<sub>E</sub><sup>-1</sup>]", sat->tle.bstar * ae); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), str); g_object_set(label, "xalign", 0.0, "yalign", 0.5, NULL); gtk_grid_attach(GTK_GRID(table), label, 1, 16, 1, 1); g_free(str); /* Orbit type */ /* Next Event */ gtk_widget_show_all(table); notebook = gtk_notebook_new(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, gtk_label_new(_("Orbit Info"))); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), create_transponder_table(sat->tle.catnr), gtk_label_new(_("Transponders"))); /* create dialog window with NULL parent */ dialog = gtk_dialog_new_with_buttons(_("Satellite Info"), toplevel, GTK_DIALOG_DESTROY_WITH_PARENT, "_OK", GTK_RESPONSE_ACCEPT, NULL); /* allow interaction with other windows */ gtk_window_set_modal(GTK_WINDOW(dialog), FALSE); g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_box_pack_start(GTK_BOX(content_area), notebook, TRUE, TRUE, 0); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); gtk_widget_show_all(dialog); }
char *do_convert(char *what, int what_len, int type, script *pscript) { switch(type) { case CONVTYPE_SIGNRTOSTRING: { int signr = atoi(what); if (signr > n_known_sigs || signr < 1) return mystrdup("unknown signal"); return mystrdup(sigs[signr]); } case CONVTYPE_TAI64NTODATE: { long long int v2_62 = (long long int)1 << (long long int)62; long long int val = 0; int loop; if (what[0] == '@') what++; /* http://cr.yp.to/libtai/tai64.html#tai64n */ /* convert to 64 bit integer */ for(loop=0; loop<(8 * 2); loop++) { int c = tolower(what[loop]); val <<= (long long int)4; if (c >= 'a') val += 10 + c - 'a'; else val += c - '0'; } if (val >= v2_62) /* FIXME: 2^63 are reserved, not checking for that, sorry */ { char *new_str = epoch_to_str((time_t)(val - v2_62)); if (new_str) return new_str; else return mystrdup("cannot convert current 'TAI64N'-date to string"); } else { /* before 1970/1/1 now what should I do with that? */ return mystrdup("cannot convert 'TAI64N'-dates before the epoch"); } } case CONVTYPE_IP4TOHOST: { if (resolv_ip_addresses) { struct hostent *ht; in_addr_t addr = inet_addr(what); if ((int)addr == -1) return mystrdup(what); if ((ht = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET)) == NULL) return mystrdup(what); return mystrdup(ht -> h_name); } return mystrdup(what); } break; case CONVTYPE_EPOCHTODATE: { char *new_str = epoch_to_str((time_t)atoll(what)); if (new_str) return new_str; else return mystrdup("cannot convert current epoch value"); } break; case CONVTYPE_ERRNO: { return mystrdup(strerror(atoi(what))); } case CONVTYPE_HEXTODEC: { long long int result = strtoll(what, NULL, 16); char result_str[128]; snprintf(result_str, sizeof(result_str), "%lld", result); return mystrdup(result_str); } case CONVTYPE_DECTOHEX: { long long int result = atoll(what); char result_str[128]; snprintf(result_str, sizeof(result_str), "%llx", result); return mystrdup(result_str); } case CONVTYPE_SCRIPT: { int rc; char *send_buffer = mymalloc(what_len + 1 + 1); char *result_str = mymalloc(SCRIPT_IO_BUFFER_SIZE); exec_script(pscript); memcpy(send_buffer, what, what_len); send_buffer[what_len] = '\n'; send_buffer[what_len + 1] = 0x00; WRITE(pscript -> fd_w, send_buffer, what_len + 1, "conversion script (is it still running?)"); myfree(send_buffer); rc = READ(pscript -> fd_r, result_str, SCRIPT_IO_BUFFER_SIZE - 1, pscript -> script); result_str[rc > 0?rc - 1:rc] = 0x00; return result_str; } case CONVTYPE_ABBRTOK: return amount_to_str(atoll(what)); default: error_exit(FALSE, FALSE, "Internal error: unknown conversion type %d.\n", type); } return "do_convert: INTERNAL ERROR"; }