/* NIGHTFALL Light Curve Synthesis Program */ /* Copyright (C) 1998 Rainer Wichmann */ /* */ /* This program is free software; you can redistribute it */ /* and/or modify */ /* it under the terms of the GNU General Public License as */ /* published by */ /* the Free Software Foundation; either version 2 of the License, or */ /* (at your option) any later version. */ /* */ /* This program is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with this program; if not, write to the Free Software */ /* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include #include #include "Light.h" #define CHECK_NONE 0 #define CHECK_LOWER 1 #define CHECK_UPPER 2 #define CHECK_BOTH 3 #define NO_FIT -1 #ifdef _WITH_GTK /****************************************************************** @package nightfall @author Rainer Wichmann (rwichman@lsw.uni-heidelberg.de) @version 1.0 @short Update the entry fields in GUI @tip - entry fields are global variables @param (void) @return (void) @heading Update GUI *******************************************************************/ void UpdateGui() { char InitString[64]; sprintf(InitString, "%8.5f", Binary[Primary].Mq); gtk_entry_set_text (GTK_ENTRY (e_101), InitString); sprintf(InitString, "%6.3f", Binary[Primary].RocheFill); gtk_entry_set_text (GTK_ENTRY (e_103), InitString); sprintf(InitString, "%6.3f", RTOD*Orbit.Inclination); gtk_entry_set_text (GTK_ENTRY (e_102), InitString); sprintf(InitString, "%6.3f", Binary[Secondary].RocheFill); gtk_entry_set_text (GTK_ENTRY (e_104), InitString); sprintf(InitString, "%6.3f", Binary[Primary].Temperature); gtk_entry_set_text (GTK_ENTRY (e_105), InitString); sprintf(InitString, "%6.3f", Binary[Secondary].Temperature); gtk_entry_set_text (GTK_ENTRY (e_106), InitString); #ifdef HAVE_DISK sprintf(InitString, "%6.3f", Binary[Disk].Rout); gtk_entry_set_text (GTK_ENTRY (e_114), InitString); sprintf(InitString, "%6.3f", Binary[Disk].Rin); gtk_entry_set_text (GTK_ENTRY (e_115), InitString); sprintf(InitString, "%6.3f", Binary[Disk].Tilt); gtk_entry_set_text (GTK_ENTRY (e_116), InitString); sprintf(InitString, "%6.3f", Binary[Disk].Warp); gtk_entry_set_text (GTK_ENTRY (e_117), InitString); sprintf(InitString, "%6.3f", Binary[Disk].Thick); gtk_entry_set_text (GTK_ENTRY (e_118), InitString); sprintf(InitString, "%6.3f", Binary[Disk].HR); gtk_entry_set_text (GTK_ENTRY (e_119), InitString); sprintf(InitString, "%6.3f", Binary[Disk].Temperature); gtk_entry_set_text (GTK_ENTRY (e_120), InitString); sprintf(InitString, "%6.3f", Binary[Disk].tempHS); gtk_entry_set_text (GTK_ENTRY (e_130), InitString); sprintf(InitString, "%6.3f", Binary[Disk].longitudeHS); gtk_entry_set_text (GTK_ENTRY (e_131), InitString); sprintf(InitString, "%6.3f", Binary[Disk].extentHS); gtk_entry_set_text (GTK_ENTRY (e_132), InitString); sprintf(InitString, "%6.3f", Binary[Disk].depthHS); gtk_entry_set_text (GTK_ENTRY (e_133), InitString); #endif sprintf(InitString, "%6.3f", Orbit.Excentricity); gtk_entry_set_text (GTK_ENTRY (e_107), InitString); sprintf(InitString, "%6.3f", Orbit.Omega); gtk_entry_set_text (GTK_ENTRY (e_108), InitString); sprintf(InitString, "%6.3f", Binary[Primary].Fratio); gtk_entry_set_text (GTK_ENTRY (e_109), InitString); sprintf(InitString, "%6.3f", Binary[Secondary].Fratio); gtk_entry_set_text (GTK_ENTRY (e_110), InitString); sprintf(InitString, "%8.1f", Orbit.LambdaZero); gtk_entry_set_text (GTK_ENTRY (e_111), InitString); sprintf(InitString, "%3d", Flags.reflect); gtk_entry_set_text (GTK_ENTRY (e_113), InitString); sprintf(InitString, "%8d", PhaseSteps); gtk_entry_set_text (GTK_ENTRY (e_112), InitString); sprintf(InitString, "%3.1f", Binary[Primary].log_g); gtk_entry_set_text (GTK_ENTRY (e_121), InitString); sprintf(InitString, "%3.1f", Binary[Secondary].log_g); gtk_entry_set_text (GTK_ENTRY (e_122), InitString); if (SpotActive[0] == ON ) { sprintf(InitString, "%6.3f", Spot[Primary][0].longitude); gtk_entry_set_text (GTK_ENTRY (e_401), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].latitude); gtk_entry_set_text (GTK_ENTRY (e_402), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].radius); gtk_entry_set_text (GTK_ENTRY (e_403), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_404), InitString); } if (SpotActive[0] == OFF && SpotActive[1] == ON ) { sprintf(InitString, "%6.3f", Spot[Primary][0].longitude); gtk_entry_set_text (GTK_ENTRY (e_405), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].latitude); gtk_entry_set_text (GTK_ENTRY (e_406), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].radius); gtk_entry_set_text (GTK_ENTRY (e_407), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_408), InitString); } if (SpotActive[1] == ON && SpotActive[0] == ON ) { sprintf(InitString, "%6.3f", Spot[Primary][1].longitude); gtk_entry_set_text (GTK_ENTRY (e_405), InitString); sprintf(InitString, "%6.3f", Spot[Primary][1].latitude); gtk_entry_set_text (GTK_ENTRY (e_406), InitString); sprintf(InitString, "%6.3f", Spot[Primary][1].radius); gtk_entry_set_text (GTK_ENTRY (e_407), InitString); sprintf(InitString, "%6.3f", Spot[Primary][1].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_408), InitString); } /************** fprintf(stderr, "P: %d %d S: %d %d ON=%d\n", SpotActive[0], SpotActive[1], SpotActive[2], SpotActive[3], ON); fprintf(stderr, "%6.3f\n", Spot[Secondary][0].longitude); **************/ if (SpotActive[2] == ON ){ sprintf(InitString, "%6.3f", Spot[Secondary][0].longitude); gtk_entry_set_text (GTK_ENTRY (e_409), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].latitude); gtk_entry_set_text (GTK_ENTRY (e_410), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].radius); gtk_entry_set_text (GTK_ENTRY (e_411), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_412), InitString); } if (SpotActive[2] == OFF && SpotActive[3] == ON ) { sprintf(InitString, "%6.3f", Spot[Secondary][0].longitude); gtk_entry_set_text (GTK_ENTRY (e_413), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].latitude); gtk_entry_set_text (GTK_ENTRY (e_414), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].radius); gtk_entry_set_text (GTK_ENTRY (e_415), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_416), InitString); } if (SpotActive[3] == ON && SpotActive[2] == ON ) { sprintf(InitString, "%6.3f", Spot[Secondary][1].longitude); gtk_entry_set_text (GTK_ENTRY (e_413), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][1].latitude); gtk_entry_set_text (GTK_ENTRY (e_414), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][1].radius); gtk_entry_set_text (GTK_ENTRY (e_415), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][1].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_416), InitString); } gtk_entry_set_text (GTK_ENTRY (e_name), Orbit.Name); sprintf(InitString, "%8.4f", Orbit.TruePeriod/86400.); gtk_entry_set_text (GTK_ENTRY (e_302), InitString); sprintf(InitString, "%8.4f", Orbit.TrueMass/1.989E30 ); gtk_entry_set_text (GTK_ENTRY (e_303), InitString); sprintf(InitString, "%6.4f", Orbit.TrueDistance/6.960E8); gtk_entry_set_text (GTK_ENTRY (e_304), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Umag]); gtk_entry_set_text (GTK_ENTRY (e_501), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Bmag]); gtk_entry_set_text (GTK_ENTRY (e_502), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Vmag]); gtk_entry_set_text (GTK_ENTRY (e_503), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Rmag]); gtk_entry_set_text (GTK_ENTRY (e_504), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Imag]); gtk_entry_set_text (GTK_ENTRY (e_505), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Jmag]); gtk_entry_set_text (GTK_ENTRY (e_506), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Hmag]); gtk_entry_set_text (GTK_ENTRY (e_507), InitString); sprintf(InitString, "%6.3f", Orbit.Third[Kmag]); gtk_entry_set_text (GTK_ENTRY (e_508), InitString); sprintf(InitString, "%6.3f", Orbit.Third[umag]); gtk_entry_set_text (GTK_ENTRY (e_509), InitString); sprintf(InitString, "%6.3f", Orbit.Third[vmag]); gtk_entry_set_text (GTK_ENTRY (e_510), InitString); sprintf(InitString, "%6.3f", Orbit.Third[bmag]); gtk_entry_set_text (GTK_ENTRY (e_511), InitString); sprintf(InitString, "%6.3f", Orbit.Third[ymag]); gtk_entry_set_text (GTK_ENTRY (e_512), InitString); return; } /****************************************************************** @package nightfall @author Rainer Wichmann (rwichman@lsw.uni-heidelberg.de) @version 1.0 @short Write out a configuration file @tip - all entries set to CONST @param (char) *OutputFile The output file name @return (void) @heading Output Configuration *******************************************************************/ void WriteConfig(const char *OutputFile) { FILE *out_file; int spotcount; FileType *dataFile = FileList; out_file = fopen(OutputFile, "w"); if (out_file == NULL) { WARNING(_("Could not open output config file")); return; } /* setlocale (LC_NUMERIC, "C"); */ fprintf(out_file, "#####################################\n"); fprintf(out_file, "# \n"); fprintf(out_file, "# Nightfall configuration file \n"); fprintf(out_file, "# \n"); fprintf(out_file, "#####################################\n"); if (Flags.blackbody == OFF) fprintf(out_file, "PrimaryLogG CONST %f\n\n", Binary[Primary].log_g); else fprintf(out_file, "#PrimaryLogG CONST %f\n\n", Binary[Primary].log_g); if (Flags.blackbody == OFF) fprintf(out_file, "SecondaryLogG CONST %f\n\n", Binary[Secondary].log_g); else fprintf(out_file, "#SecondaryLogG CONST %f\n\n", Binary[Secondary].log_g); fprintf(out_file, "Name %s\n\n", Orbit.Name); fprintf(out_file, "MassRatio CONST %f\n\n", Binary[Primary].Mq); fprintf(out_file, "Inclination CONST %f\n\n", RTOD*Orbit.Inclination); fprintf(out_file, "PrimaryRocheFill CONST %f\n\n", Binary[Primary].RocheFill); fprintf(out_file, "SecondaryRocheFill CONST %f\n\n", Binary[Secondary].RocheFill); fprintf(out_file, "PrimaryTemperature CONST %f\n\n", Binary[Primary].Temperature); fprintf(out_file, "SecondaryTemperature CONST %f\n\n", Binary[Secondary].Temperature); #ifdef HAVE_DISK if (Flags.disk == ON) fprintf(out_file, "InnerDiskRadius CONST %f\n\n", Binary[Disk].Rin); else fprintf(out_file, "#InnerDiskRadius CONST %f\n\n", Binary[Disk].Rin); if (Flags.disk == ON) fprintf(out_file, "OuterDiskRadius CONST %f\n\n", Binary[Disk].Rout); else fprintf(out_file, "#OuterDiskRadius CONST %f\n\n", Binary[Disk].Rout); if (Flags.disk == ON) fprintf(out_file, "DiskTilt CONST %f\n\n", Binary[Disk].Tilt); else fprintf(out_file, "#DiskTilt CONST %f\n\n", Binary[Disk].Tilt); if (Flags.disk == ON) fprintf(out_file, "DiskWarp CONST %f\n\n", Binary[Disk].Warp); else fprintf(out_file, "#DiskWarp CONST %f\n\n", Binary[Disk].Warp); if (Flags.disk == ON) fprintf(out_file, "DiskThickness CONST %f\n\n", Binary[Disk].Thick); else fprintf(out_file, "#DiskThickness CONST %f\n\n", Binary[Disk].Thick); if (Flags.disk == ON) fprintf(out_file, "DiskHoverR CONST %f\n\n", Binary[Disk].HR); else fprintf(out_file, "#DiskHoverR CONST %f\n\n", Binary[Disk].HR); if (Flags.disk == ON) fprintf(out_file, "DiskTemperature CONST %f\n\n", Binary[Disk].Temperature); else fprintf(out_file, "#DiskTemperature CONST %f\n\n", Binary[Disk].Temperature); if (Flags.disk == ON) fprintf(out_file, "HotSpotTemperature CONST %f\n\n", Binary[Disk].tempHS); else fprintf(out_file, "#HotSpotTemperature CONST %f\n\n", Binary[Disk].tempHS); if (Flags.disk == ON) fprintf(out_file, "HotSpotLongitude CONST %f\n\n", Binary[Disk].longitudeHS); else fprintf(out_file, "#HotSpotLongitude CONST %f\n\n", Binary[Disk].longitudeHS); if (Flags.disk == ON) fprintf(out_file, "HotSpotExtent CONST %f\n\n", Binary[Disk].extentHS); else fprintf(out_file, "#HotSpotExtent CONST %f\n\n", Binary[Disk].extentHS); if (Flags.disk == ON) fprintf(out_file, "HotSpotDepth CONST %f\n\n", Binary[Disk].depthHS); else fprintf(out_file, "#HotSpotDepth CONST %f\n\n", Binary[Disk].depthHS); #endif fprintf(out_file, "ThirdLight_U CONST %f\n\n", Orbit.Third[Umag]); fprintf(out_file, "ThirdLight_B CONST %f\n\n", Orbit.Third[Bmag]); fprintf(out_file, "ThirdLight_V CONST %f\n\n", Orbit.Third[Vmag]); fprintf(out_file, "ThirdLight_R CONST %f\n\n", Orbit.Third[Rmag]); fprintf(out_file, "ThirdLight_I CONST %f\n\n", Orbit.Third[Imag]); fprintf(out_file, "ThirdLight_J CONST %f\n\n", Orbit.Third[Jmag]); fprintf(out_file, "ThirdLight_H CONST %f\n\n", Orbit.Third[Hmag]); fprintf(out_file, "ThirdLight_K CONST %f\n\n", Orbit.Third[Kmag]); fprintf(out_file, "ThirdLight_Str_u CONST %f\n\n", Orbit.Third[umag]); fprintf(out_file, "ThirdLight_Str_v CONST %f\n\n", Orbit.Third[vmag]); fprintf(out_file, "ThirdLight_Str_b CONST %f\n\n", Orbit.Third[bmag]); fprintf(out_file, "ThirdLight_Str_y CONST %f\n\n", Orbit.Third[vmag]); if (Flags.elliptic == ON) fprintf(out_file, "EllipticOrbitEccentricity CONST %f\n\n", Orbit.Excentricity); else fprintf(out_file, "#EllipticOrbitEccentricity CONST %f\n\n", Orbit.Excentricity); if (Flags.elliptic == ON) fprintf(out_file, "EllipticOrbitPeriastronLength CONST %f\n\n", Orbit.Omega); else fprintf(out_file, "#EllipticOrbitPeriastronLength CONST %f\n\n", Orbit.Omega); if (Flags.asynchron1 == ON) fprintf(out_file, "PrimaryFRatio CONST %f\n\n", Binary[Primary].Fratio); else fprintf(out_file, "#PrimaryFRatio CONST %f\n\n", Binary[Primary].Fratio); if (Flags.asynchron2 == ON) fprintf(out_file, "SecondaryFRatio CONST %f\n\n", Binary[Secondary].Fratio); else fprintf(out_file, "#SecondaryFRatio CONST %f\n\n", Binary[Secondary].Fratio); fprintf(out_file, "AbsoluteMass CONST %f\n\n", Orbit.TrueMass/1.989E30); fprintf(out_file, "AbsoluteDistance CONST %f\n\n", Orbit.TrueDistance/6.960E8); fprintf(out_file, "AbsolutePeriod CONST %f\n\n", Orbit.TruePeriod/86400.); if (Flags.Spots1 > 0) { for (spotcount = 0; spotcount < Flags.Spots1; ++spotcount) { fprintf(out_file, "SpotPrimary CONST CONST CONST CONST %f %f %f %f\n\n", Spot[Primary][spotcount].longitude, Spot[Primary][spotcount].latitude, Spot[Primary][spotcount].radius, Spot[Primary][spotcount].dimfactor); } } if (Flags.Spots2 > 0) { for (spotcount = 0; spotcount < Flags.Spots2; ++spotcount) { fprintf(out_file, "SpotSecondary CONST CONST CONST CONST %f %f %f %f\n\n", Spot[Secondary][spotcount].longitude, Spot[Secondary][spotcount].latitude, Spot[Secondary][spotcount].radius, Spot[Secondary][spotcount].dimfactor); } } while (dataFile != NULL) { fprintf(out_file, "InputFile %s %d\n", dataFile->DataFile, dataFile->DataFormat); dataFile = dataFile->nextFile; } /* setlocale (LC_NUMERIC, ""); */ fclose(out_file); } #endif /****************************************************************** @package nightfall @author Rainer Wichmann (rwichman@lsw.uni-heidelberg.de) @version 1.0 @short Parse a line for string, do error handling @param (char) *InputFile The input file name @param (char) *varname The test string @param (char) *outvar The output variable @param (int) numline The line number @param (int) check_flag what to check @param (float) lower lower limit @param (float) upper upper limit @param (int) die_flag die on failure @param (int) fit_flag set fit for index fit_flag @return (int) The exit status @heading Read Configuration *******************************************************************/ int parse_double(char *in_line, char *varname, double *outvar, int numline, int check_flag, float lower, float upper, int die_flag, int fit_flag) { char first[MAX_CFG_INLINE+1]; /* first item */ char second[MAX_CFG_INLINE+1]; /* second item */ float third = 0.; /* third item */ int test; char msg[84]; int success = OFF; test = sscanf(in_line, "%s %s %f", first, second, &third); /* fprintf(stderr, "%s\nData: %s / %s / %s\n", in_line, first, second, third); */ if (test == 3) { if (Flags.debug[INFILE] == ON) fprintf(stderr, _("search %s for %s\n"), first, varname); if (strcmp(first, varname) == 0) { /* ------------------- check bounds -------------------- */ if (check_flag == CHECK_UPPER) { if (third <= upper) { *outvar = third; success = ON; } } else if (check_flag == CHECK_LOWER) { if (third >= lower) { *outvar = third; success = ON; } } else if (check_flag == CHECK_BOTH) { if (third >= lower && third <= upper) { *outvar = third; success = ON; } } else if (check_flag == CHECK_NONE) { *outvar = third; success = ON; } /* ------------------- handle error -------------------- */ if (success == OFF) { sprintf(msg, _("Range Error (%8.3g,%8.3g) in .cfg file: %8.3g, line %6d\n"), lower, upper, third, numline); #ifndef _WITH_GTK if (die_flag == ON) nf_error (msg); else WARNING(msg); #else if (Flags.interactive == OFF) { if (die_flag == ON) nf_error (msg); else WARNING(msg); } else { WARNING (msg); } #endif return(OFF); } /* ------------------- set fit flag -------------------- */ if (success == ON && fit_flag != NO_FIT) { if (strcmp(second, "fit") == 0) { Flags.simplex[fit_flag] = ON; } else if (strcmp(second, "const") != 0) { sprintf(msg, _("Invalid line %6d in Config File\n"), numline); WARNING (msg); } } /* ------------------- return success ------------------ */ if (Flags.debug[INFILE] == ON) fprintf(stderr, _("success \n")); return(ON); } } /* ------------------- return failure ------------------ */ return(OFF); } /****************************************************************** @package nightfall @author Rainer Wichmann (rwichman@lsw.uni-heidelberg.de) @version 1.0 @tip Parse a configuration file @param (char) *InputFile The input file name @param (int) *numarg The number of mandatory params read @return (void) @heading Read Configuration *******************************************************************/ void ParseConfig(const char *InputFile, int *numarg) { char fullPath[1024]; /* full path to file */ char in_line[MAX_CFG_INLINE+1]; /* input line from file */ char first[MAX_CFG_INLINE+1]; /* first item */ char second[MAX_CFG_INLINE+1]; /* second item */ char third[MAX_CFG_INLINE+1]; /* third item */ char fourth[MAX_CFG_INLINE+1]; /* fourth item */ char fifth[MAX_CFG_INLINE+1]; /* fifth item */ float In1, In2, In3, In4; /* input data */ int Ii1; /* integer input */ int in_test; /* test variable */ int test; /* test variable */ int numline; /* lines read */ int mandatory; /* mandatory args read */ FILE *in_file; /* input filehandle */ char *InPtr ; /* pointer to inline */ char msg[64]; /* error message */ #ifdef _WITH_GTK char InitString[64]; int i, j; /* loop variable */ #endif numline = 0; mandatory = 0; strncpy(fullPath, InputFile, sizeof(fullPath)-1); in_file = fopen(InputFile, "r"); if (in_file == NULL) { strcpy(fullPath, "./cfg/"); strncat(fullPath, InputFile, sizeof(fullPath)-strlen(InputFile)-7); in_file = fopen(fullPath, "r"); if (in_file == NULL) { strncpy(fullPath, data_cfg_fls(), sizeof(fullPath)-strlen(InputFile)-6); /* strcat(fullPath, "/cfg/"); */ strcat(fullPath, "/"); strcat(fullPath, InputFile); in_file = fopen(fullPath, "r"); } } /* ------ open file ----------- */ #ifdef _WITH_GTK if (in_file == NULL) { if ( Flags.interactive == ON && Flags.parseCL == OFF ) { make_dialog(_(errmsg[7])); return; } else nf_error(_(errmsg[7])); } #else if (in_file == NULL) nf_error(_(errmsg[7])); #endif #ifdef _WITH_GTK if ( Flags.interactive == ON && Flags.parseCL == OFF ) my_appbar_push(_("Reading configuration")); #endif if (Flags.debug[INFILE] == ON) { fprintf(stderr, "Configuration File is %s\n", InputFile); } #ifdef HAVE_DISK Binary[Disk].Rin = 0.0; #endif #ifdef _WITH_GTK if ( Flags.interactive == ON && Flags.parseCL == OFF ) { /* ------ initialize ----------- */ Flags.PlotBand = -1; Flags.Spots1 = 0; Flags.Spots2 = 0; Flags.fill = OFF; Flags.disk = OFF; Flags.elliptic = OFF; Flags.asynchron1 = OFF; Flags.asynchron2 = OFF; Flags.first_pass = ON; Flags.ProComputed = OFF; Flags.IsComputed = OFF; Orbit.Dist = 1.0; Orbit.MinDist = 1.0; Orbit.Excentricity = 0.0; Orbit.Omega = 90.; Orbit.TruePeriod = 0.0; Orbit.TrueDistance = 0.0; Orbit.TrueMass = 0.0; strcpy(Orbit.Name, "(void)"); Orbit.LambdaZero = LAMDAZERO_DEFAULT; /* should be nanometer */ for (j = 0; j < NUM_MAG; ++j) Orbit.Third[j] = 0.0; Binary[Primary].Fratio = 1.0; Binary[Secondary].Fratio = 1.0; Binary[Primary].RocheFill = 0.8; Binary[Secondary].RocheFill = 0.8; Binary[Primary].log_g = 4.0; Binary[Secondary].log_g = 4.0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_eccentric_button), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_fpri_button), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_fsec_button), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_psp1_button), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_psp2_button), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_ssp1_button), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_ssp2_button), FALSE); #ifdef HAVE_DISK gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_disk_button), FALSE); Binary[Disk].Tilt = 0.0; Binary[Disk].Warp = 0.0; Binary[Disk].Thick = 0.01; Binary[Disk].HR = 0.0; /* 0 for a flat disk */ Binary[Disk].Rout = 0.8; Binary[Disk].Rin = 0.2; Binary[Disk].Temperature = 8000.0; Binary[Disk].tempHS = Binary[Disk].Temperature; Binary[Disk].longitudeHS = 0.0; Binary[Disk].extentHS = 0.0; Binary[Disk].depthHS = 0.0; #endif TG_P1spot = 0, TG_P2spot = 0; TG_S1spot = 0, TG_S2spot = 0; for (i=0; i < 4; ++i) SpotActive[i] = 0; TG_1spots = 0, TG_2spots = 0; for (i=0; i < 16; ++i) FitSpotS[i] = 0; for (i=0; i < 2; ++i) { for (j=0; j < 2; ++j) { SpotStore[i][j].nowlongitude = 0.0; SpotStore[i][j].longitude = 0.0; SpotStore[i][j].latitude = 0.0; SpotStore[i][j].radius = 0.0; SpotStore[i][j].dimfactor = 0.0; Spot[i][j].longitude = 0.0; Spot[i][j].latitude = 0.0; Spot[i][j].radius = 0.0; Spot[i][j].dimfactor = 0.0; } } ClearList(); /* data file list */ /* ------ end initialize -------- */ } #endif /* setlocale (LC_NUMERIC, "C"); */ in_line[0] = '\n'; /* while (LireLigne(in_line, (int)(sizeof(in_line)), in_file) > 0) { */ while( NULL != fgets( in_line, MAX_CFG_INLINE, in_file )) { ++numline; /* clip off optional comment tail indicated by a semi-colon */ if( NULL != (InPtr = strchr( in_line, ';' ))) *InPtr = '\0'; else InPtr = in_line + strlen( in_line ); /* clip off trailing and leading white space */ InPtr--; while( isspace( *InPtr ) && InPtr >= in_line ) *InPtr-- = '\0'; InPtr = in_line; while( isspace( *InPtr )) InPtr++; /* break if empty line */ if( 0 == strlen( InPtr )) continue; /* this is a header or empty line */ if (InPtr[0] == '#' || InPtr[0] == '\n') continue; in_test = OFF; if (Flags.debug[INFILE] == ON) { fprintf(stderr, "LINE: %s\n", InPtr); } /* ----------- the name of the system --------------- */ test = sscanf(InPtr, "%s %s", first, second); /* convert to lowercase */ nf_strlwr( first ); if (test == 2 && strcmp(first, "name") == 0) { if (Flags.debug[INFILE] == ON) fprintf(stderr, _("system name is %s\n"), second); strcpy(Orbit.Name, second); continue; } else if (strcmp(first, "name") == 0) { sprintf(msg, _("Invalid line %6d in Config File\n"), numline); WARNING (msg); continue; } /* ----------------- input file ------------------ */ test = sscanf(InPtr, "%s %s %d", first, second, &Ii1); /* convert to lowercase */ nf_strlwr( first ); if (test == 2 || test == 3 ) { if (strcmp(first, "inputfile") == 0) { if (Flags.debug[INFILE] == ON) fprintf(stderr, _("read input file %s\n"), second); if (test == 2 || Ii1 == NF_NATIVE_FILE ) Read(second); continue; } } /* ----------- convert to lowercase ------------------- */ nf_strlwr( InPtr ); /* ----------- the mandatory parameters --------------- */ /* test input, do error handling, put in variable */ in_test = parse_double(InPtr, "massratio", &Binary[Primary].Mq, numline, CHECK_BOTH, LIM_MQ_L, LIM_MQ_H, ON, 0); if (in_test == ON) { ++mandatory; Binary[Secondary].Mq = 1.0/Binary[Primary].Mq; continue; } in_test = parse_double(InPtr, "inclination", &Orbit.Inclination, numline, CHECK_BOTH, LIM_IN_L, (float) RTOD*LIM_IN_H, ON, 1); if (in_test == ON) { ++mandatory; Orbit.Inclination = DTOR*Orbit.Inclination; continue; } in_test = parse_double(InPtr, "primaryrochefill", &Binary[Primary].RocheFill,numline, CHECK_BOTH, LIM_RF_L, LIM_RO_H, ON, 2); if (in_test == ON) { ++mandatory; continue; } in_test = parse_double(InPtr, "secondaryrochefill", &Binary[Secondary].RocheFill,numline, CHECK_BOTH, LIM_RF_L, LIM_RO_H, ON, 3); if (in_test == ON) { ++mandatory; continue; } if (Flags.blackbody == OFF) { in_test = parse_double(InPtr, "primarytemperature", &Binary[Primary].Temperature,numline, CHECK_BOTH, LIM_TM_L, LIM_TM_H(Binary[Primary].log_g), ON, 4); if (in_test == ON) { ++mandatory; continue; } in_test = parse_double(InPtr, "secondarytemperature", &Binary[Secondary].Temperature,numline, CHECK_BOTH, LIM_TM_L, LIM_TM_H(Binary[Secondary].log_g), ON, 5); if (in_test == ON) { ++mandatory; continue; } } else { in_test = parse_double(InPtr, "primarytemperature", &Binary[Primary].Temperature,numline, CHECK_BOTH, LIM_TB_L, LIM_TB_H, ON, 4); if (in_test == ON) { ++mandatory; continue; } in_test = parse_double(InPtr, "secondarytemperature", &Binary[Secondary].Temperature,numline, CHECK_BOTH, LIM_TB_L, LIM_TB_H, ON, 5); if (in_test == ON) { ++mandatory; continue; } } #ifdef HAVE_DISK fprintf(stderr, "FIXME %s %f\n", InPtr, Binary[Disk].Rin); in_test = parse_double(InPtr, "innerdiskradius", &Binary[Disk].Rin, numline, CHECK_BOTH, LIM_IR_L, LIM_IR_H, ON, NO_FIT); fprintf(stderr, "FIXME %d %f\n", in_test, Binary[Disk].Rin); if (in_test == ON) { Flags.disk = ON; #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_disk_button), TRUE); #endif continue; } in_test = parse_double(InPtr, "outerdiskradius", &Binary[Disk].Rout,numline, CHECK_BOTH, LIM_OR_L, LIM_OR_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "disktilt", &Binary[Disk].Tilt,numline, CHECK_BOTH, LIM_TI_L, LIM_TI_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "diskwarp", &Binary[Disk].Warp,numline, CHECK_BOTH, LIM_WA_L, LIM_WA_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "diskthickness", &Binary[Disk].Thick,numline, CHECK_BOTH, LIM_TH_L, LIM_TH_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "diskhoverr", &Binary[Disk].HR,numline, CHECK_BOTH, LIM_HR_L, LIM_HR_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "disktemperature", &Binary[Disk].Temperature,numline, CHECK_BOTH, LIM_DT_L, LIM_DT_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "hotspottemperature", &Binary[Disk].tempHS,numline, CHECK_BOTH, LIM_HST_L, LIM_HST_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "hotspotlongitude", &Binary[Disk].longitudeHS,numline, CHECK_BOTH, LIM_HSL_L, LIM_HSL_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "hotspotextent", &Binary[Disk].extentHS,numline, CHECK_BOTH, LIM_HSE_L, LIM_HSE_H, ON, NO_FIT); if (in_test == ON) continue; in_test = parse_double(InPtr, "hotspotdepth", &Binary[Disk].depthHS,numline, CHECK_BOTH, LIM_HSD_L, LIM_HSD_H, ON, NO_FIT); if (in_test == ON) continue; #endif /* ----------------- log g ------------------ */ in_test = parse_double(InPtr, "primarylogg", &Binary[Primary].log_g,numline, CHECK_BOTH, LIM_LOGG_L, LIM_LOGG_H, OFF, NO_FIT); if (in_test == ON) { Binary[Primary].log_g = 0.5 * ROUND(2.0 * Binary[Primary].log_g); Flags.blackbody = OFF; #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_bbody_button), FALSE); #endif continue; } in_test = parse_double(InPtr, "secondarylogg", &Binary[Secondary].log_g,numline, CHECK_BOTH, LIM_LOGG_L, LIM_LOGG_H, OFF, NO_FIT); if (in_test == ON) { Binary[Secondary].log_g = 0.5 * ROUND(2.0 * Binary[Secondary].log_g); Flags.blackbody = OFF; #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_bbody_button), FALSE); #endif continue; } /* ----------------- eccentric orbit ------------------ */ in_test = parse_double(InPtr, "ellipticorbiteccentricity", &Orbit.Excentricity,numline, CHECK_BOTH, LIM_EX_L, LIM_EX_H, OFF, 6); if (Orbit.Excentricity >= FLT_EPSILON) Flags.elliptic = ON; if (in_test == ON) { #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_eccentric_button), TRUE); #endif continue; } in_test = parse_double(InPtr, "ellipticorbitperiastronlength", &Orbit.Omega,numline, CHECK_BOTH, LIM_PA_L, LIM_PA_H, OFF, 7); if (in_test == ON) continue; /* ------------- asyncroneous rotation ---------------- */ in_test = parse_double(InPtr, "primaryfratio", &Binary[Primary].Fratio,numline, CHECK_BOTH, LIM_FR_L, LIM_FR_H, OFF, 8); if ( fabs(Binary[Primary].Fratio-1.0) >= FLT_EPSILON) Flags.asynchron1 = ON; if (in_test == ON) { #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_fpri_button), TRUE); #endif continue; } in_test = parse_double(InPtr, "secondaryfratio", &Binary[Secondary].Fratio,numline, CHECK_BOTH, LIM_FR_L, LIM_FR_H, OFF, 9); if ( fabs(Binary[Secondary].Fratio-1.0) >= FLT_EPSILON) Flags.asynchron2 = ON; if (in_test == ON) { #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_fsec_button), TRUE); #endif continue; } /* ----------------- absolute values ------------------ */ in_test = parse_double(InPtr, "absolutemass", &Orbit.TrueMass,numline, CHECK_LOWER, LIM_MASS_L, 0.0, OFF, 26); if (in_test == ON) { Orbit.TrueMass = Orbit.TrueMass * 1.989E30; continue; } in_test = parse_double(InPtr, "absolutedistance", &Orbit.TrueDistance,numline, CHECK_LOWER, LIM_DIST_L, 0.0, OFF, 27); if (in_test == ON) { Orbit.TrueDistance = Orbit.TrueDistance * 6.960E8; continue; } in_test = parse_double(InPtr, "absoluteperiod", &Orbit.TruePeriod,numline, CHECK_LOWER, LIM_PERI_L, 0.0, OFF, NO_FIT); if (in_test == ON) { Orbit.TruePeriod = Orbit.TruePeriod * 86400.; continue; } /* ----------------- spots ------------------ */ test = sscanf(InPtr, "%s %s", first, second); if (strcmp(first, "spotprimary") == 0) { test = sscanf(in_line, "%s %s %s %s %s %f %f %f %f", first, second, third, fourth, fifth, &In1, &In2, &In3, &In4); if (test == 9) { if (Flags.Spots1 == 0 ) { #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_psp1_button), TRUE); SpotActive[0] = ON; #endif Flags.Spots1 = 0; } if (Flags.Spots1 == 1 ) { #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_psp2_button), TRUE); SpotActive[1] = ON; #endif Flags.Spots1 = 1; } test = 0; if (In1 >= LIM_SLO_L && In1 <= LIM_SLO_H) { Spot[Primary][Flags.Spots1].longitude = In1; ++test; } if (In2 >= LIM_SLA_L && In2 <= LIM_SLA_H && test == 1){ Spot[Primary][Flags.Spots1].latitude = In2; ++test; } if (In3 >= LIM_SRA_L && In3 <= LIM_SRA_H && test == 2){ Spot[Primary][Flags.Spots1].radius = In3; ++test; } if (In4 >= LIM_SDF_L && In4 <= LIM_SDF_H && test == 3){ Spot[Primary][Flags.Spots1].dimfactor = In4; ++test; } if (test == 4) { #ifndef _WITH_GTK if (strcmp(second, "fit") == 0 && Flags.Spots1 < 2) { Flags.simplex[10+(Flags.Spots1 * 4) + 0] = ON; } if (strcmp(third, "fit") == 0 && Flags.Spots1 < 2) { Flags.simplex[10+(Flags.Spots1 * 4) + 1] = ON; } if (strcmp(fourth, "fit") == 0 && Flags.Spots1 < 2) { Flags.simplex[10+(Flags.Spots1 * 4) + 2] = ON; } if (strcmp(fifth, "fit") == 0 && Flags.Spots1 < 2) { Flags.simplex[10+(Flags.Spots1 * 4) + 3] = ON; } #endif ++Flags.Spots1; continue; } else { sprintf(msg, _("Range Error in Config File, line %6d\n"), numline); WARNING (msg); } } else { sprintf(msg, _("Invalid line %6d in Config File\n"), numline); WARNING (msg); } continue; } /* SECONDARY SPOTS */ test = sscanf(InPtr, "%s %s", first, second); if (strcmp(first, "spotsecondary") == 0) { test = sscanf(in_line, "%s %s %s %s %s %f %f %f %f", first, second, third, fourth, fifth, &In1, &In2, &In3, &In4); if (test == 9) { if (Flags.Spots2 == 0 ) { #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_ssp1_button), TRUE); SpotActive[2] = ON; #endif Flags.Spots2 = 0; } if (Flags.Spots2 == 1 ) { #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t_ssp2_button), TRUE); SpotActive[3] = ON; #endif Flags.Spots2 = 1; } test = 0; if (In1 >= LIM_SLO_L && In1 <= LIM_SLO_H) { Spot[Secondary][Flags.Spots2].longitude = In1; ++test; } if (In2 >= LIM_SLA_L && In2 <= LIM_SLA_H && test == 1){ Spot[Secondary][Flags.Spots2].latitude = In2; ++test; } if (In3 >= LIM_SRA_L && In3 <= LIM_SRA_H && test == 2){ Spot[Secondary][Flags.Spots2].radius = In3; ++test; } if (In4 >= LIM_SDF_L && In4 <= LIM_SDF_H && test == 3){ Spot[Secondary][Flags.Spots2].dimfactor = In4; ++test; } /* fprintf(stderr, "%6.3f\n", Spot[Secondary][0].longitude); */ if (test == 4) { #ifndef _WITH_GTK if (strcmp(second, "fit") == 0 && Flags.Spots2 < 2) { Flags.simplex[18+(Flags.Spots2 * 4) + 0] = ON; } if (strcmp(third, "fit") == 0 && Flags.Spots2 < 2) { Flags.simplex[18+(Flags.Spots2 * 4) + 1] = ON; } if (strcmp(fourth, "fit") == 0 && Flags.Spots2 < 2) { Flags.simplex[18+(Flags.Spots2 * 4) + 2] = ON; } if (strcmp(fifth, "fit") == 0 && Flags.Spots2 < 2) { Flags.simplex[18+(Flags.Spots2 * 4) + 3] = ON; } #endif ++Flags.Spots2; continue; } else { sprintf(msg, _("Range Error in Config File, line %6d\n"), numline); WARNING (msg); } } else { sprintf(msg, _("Invalid line %6d in Config File\n"), numline); WARNING (msg); } continue; } /* ----------------- third light ------------------ */ in_test = parse_double(InPtr, "thirdlight_u", &Orbit.Third[Umag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 28); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_b", &Orbit.Third[Bmag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 29); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_v", &Orbit.Third[Vmag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 30); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_r", &Orbit.Third[Rmag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 31); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_i", &Orbit.Third[Imag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 32); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_j", &Orbit.Third[Jmag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 33); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_h", &Orbit.Third[Hmag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 34); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_k", &Orbit.Third[Kmag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 35); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_str_u", &Orbit.Third[umag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 36); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_str_v", &Orbit.Third[umag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 36); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_str_b", &Orbit.Third[umag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 38); if (in_test == ON) continue; in_test = parse_double(InPtr, "thirdlight_str_y", &Orbit.Third[umag],numline, CHECK_BOTH, LIM_3L_L, LIM_3L_L, OFF, 39); if (in_test == ON) continue; /* ----------------- lightcurve steps ----------------- */ test = sscanf(InPtr, "%s %s", first, second); if (strcmp(first, "lightcurvesteps") == 0) { test = sscanf(in_line, "%s %d", first, &Ii1); if (test == 2) { if (Ii1 >= 0 && Ii1 < PHASESTEPS) PhaseSteps = Ii1; else { sprintf(msg, _("Range Error in Config File, line %6d\n"), numline); WARNING (msg); } #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) { sprintf(msg, "%8d", PhaseSteps); gtk_entry_set_text (GTK_ENTRY (e_112), msg); } #endif } else { sprintf(msg, _("Invalid line %6d in Config File\n"), numline); WARNING (msg); } } /* ----------------- do we want a fit ----------------- */ test = sscanf(InPtr, "%s %f", first, &In1); if (test == 2 && strcmp(first, "do_fit") == 0) { if ( In1 >= FLT_EPSILON ) { #ifndef _WITH_GTK Flags.WantFit = ON; Flags.SimplexTol = In1; if (fabs (Flags.SimplexTol - 0.001) <= FLT_EPSILON ) Flags.anneal = ON; #endif continue; } else { sprintf(msg, _("Range Error (0.0, INDEF) in Config File, line %6d\n"), numline); WARNING (msg); } } } *numarg = mandatory; if (Flags.PlotBand == -1) Flags.PlotBand = Vmag; /* setlocale (LC_NUMERIC, ""); */ #ifdef _WITH_GTK if (Flags.interactive == ON && Flags.parseCL == OFF ) { updateplotflagpage3 (); sprintf(InitString, "%6.3f", Spot[Primary][0].longitude); gtk_entry_set_text (GTK_ENTRY (e_401), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].latitude); gtk_entry_set_text (GTK_ENTRY (e_402), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].radius); gtk_entry_set_text (GTK_ENTRY (e_403), InitString); sprintf(InitString, "%6.3f", Spot[Primary][0].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_404), InitString); sprintf(InitString, "%6.3f", Spot[Primary][1].longitude); gtk_entry_set_text (GTK_ENTRY (e_405), InitString); sprintf(InitString, "%6.3f", Spot[Primary][1].latitude); gtk_entry_set_text (GTK_ENTRY (e_406), InitString); sprintf(InitString, "%6.3f", Spot[Primary][1].radius); gtk_entry_set_text (GTK_ENTRY (e_407), InitString); sprintf(InitString, "%6.3f", Spot[Primary][1].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_408), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].longitude); gtk_entry_set_text (GTK_ENTRY (e_409), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].latitude); gtk_entry_set_text (GTK_ENTRY (e_410), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].radius); gtk_entry_set_text (GTK_ENTRY (e_411), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][0].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_412), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][1].longitude); gtk_entry_set_text (GTK_ENTRY (e_413), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][1].latitude); gtk_entry_set_text (GTK_ENTRY (e_414), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][1].radius); gtk_entry_set_text (GTK_ENTRY (e_415), InitString); sprintf(InitString, "%6.3f", Spot[Secondary][1].dimfactor); gtk_entry_set_text (GTK_ENTRY (e_416), InitString); } #endif (void) fclose(in_file); strncpy(Flags.ConfFile, fullPath, 255); Flags.ConfFile[256] = '\0'; return; }