This is sawsat.c in view mode; [Download] [Up]
/****************************************/
/* sawsat.c */
/* */
/* finds near approaches of satellites */
/* to a given coordinate at a given time*/
/****************************************/
/***** description
*
* $Id: sawsat.c,v 1.2 1993/05/18 16:52:10 craig Exp $
*
*/
/***** modification history
*
* $Log: sawsat.c,v $
* Revision 1.2 1993/05/18 16:52:10 craig
* added a declariation of the plotfile FILE for search.c
*
* Revision 1.1 1993/05/12 19:03:19 craig
* Initial revision
*
*/
/***** include files *****/
#include <ctype.h>
#include <string.h>
#include <math.h>
#include "satellite.h"
#include "satproto.h"
#include "aaproto.h"
/***** global variables *****/
/* from search.c */
extern FILE *elefile;
extern FILE *plotfile;
extern struct star fstar;
/* from cnstinit.c */
extern int prtflg;
extern FILE *outfile;
extern double JD;
extern struct MCONSTANTS mcnsts;
extern struct PCONSTANTS pcnsts;
/**********/
/* sawsat */
/**********/
int main (void)
{
/***** Local variables *****/
int rhrs, rmin, ddeg, dmin;
char dsign[2], tfname[32], ofname[32], sname[32], osname[32];
FILE *outputfile, *scrfile1, *scrfile2;
double srate, rsec, dsec, delt, ojd;
double JDTIME, JDSTOP, JDSTART, DTIME;
register i;
/***** initialize constants *****/
prtflg = 0;
cnstinit ();
if (kinit () == -1)
{
fprintf (stderr, "Unable to find a ./.site.ini or a ");
fprintf (stderr, "~/.site.init site initialization file.\n");
exit (-1);
}
/***** initializations *****/
strcpy (tfname, "visual.tle");
strcpy (ofname, "stdout");
sname[0] = '\0';
strcpy (osname, "crud");
rhrs = 0;
rmin = 0;
strcpy (dsign, "+");
ddeg = 0;
dmin = 0;
rsec = 0.;
dsec = 0.;
delt = 1.5;
outfile = stdout;
plotfile = stdout; /* not generating plots here anyway */
fstar.obname[0] = '\0';
fstar.epoch = 2000.0;
fstar.px = 0.;
fstar.mura = 0.;
fstar.mudec = 0.;
fstar.v = 0.;
fstar.equinox = 0.;
/***** get inputs *****/
getstring ("Element file name: ", tfname, 32);
/* open the element file */
elefile = fopen (tfname, "r");
if (elefile == NULL)
{
fprintf (stderr, "Error in opening element file: %s\n", tfname);
exit (-1);
}
/* open the output file */
getstring ("Output file name: ", ofname, 32);
if (strstr (ofname, "stdout") == NULL)
{
outputfile = fopen (ofname, "w+");
if (outputfile == NULL)
{
fprintf (stderr, "Error in opening output file: %s\n",
ofname);
exit (-1);
}
}
else
{
outputfile = stdout;
}
/* get the starting and stoping times */
fprintf (stdout, "\nEnter search starting time: \n\n");
JDSTART = getdate ();
JDSTART += gethms ();
JD = JDSTART;
update (stdout);
fprintf (stdout, "\nEnter search ending time: \n\n");
JDSTOP = getdate ();
JDSTOP += gethms ();
/* get the position and search box size */
fprintf (stdout, "\nEnter the R.A of the search area coordinates: \n\n");
getint ("Hours", &rhrs);
getint ("Minutes", &rmin);
getdouble ("Seconds", &rsec);
fstar.ra = mcnsts.twopi * (3600.0 * rhrs + 60.0 * rmin + rsec) /
pcnsts.secpda;
fprintf (stdout, "\nEnter the Dec. of the search area coordinates: \n\n");
getstring ("sign", dsign, 2);
getint ("Degrees", &ddeg);
getint ("Minutes", &dmin);
getdouble ("Seconds", &dsec);
fstar.dec = (3600.0 * ddeg + 60.0 * dmin + dsec) / mcnsts.ra2sec;
if (strstr (dsign, "-") != NULL)
{
fstar.dec = -fstar.dec;
}
getdouble ("\nEpoch of the coordinates", &fstar.epoch);
if (fstar.epoch == 2000.0)
{
fstar.epoch = pcnsts.J2000;
}
else if (fstar.epoch == 1950.0)
{
fstar.epoch = pcnsts.B1950;
}
else if (fstar.epoch == 1900)
{
fstar.epoch = pcnsts.J1900;
}
else
{
fstar.epoch = pcnsts.J2000 + (pcnsts.dapcen / 100.) *
(fstar.epoch - 2000.0);
}
getdouble ("Size of the search area (degrees)", &delt);
/* open the scratch files */
scrfile1 = tmpfile ();
scrfile2 = tmpfile ();
if (scrfile1 == NULL || scrfile2 == NULL)
{
fprintf (stderr, "Error in opening scratch files.\n");
exit (-1);
}
/***** do the searching *****/
/* first coarse search */
outfile = scrfile1;
DTIME = 2.5;
search (JDSTART, JDSTOP, DTIME, sname, 15., 30., -1);
/* now redo the search at intervals that avoid duplicate entries */
rewind (scrfile1);
outfile = scrfile2;
while (fscanf (scrfile1, "%lf%lf", &JDTIME, &srate) == 2)
{
if (fgets (sname, 31, scrfile1) == NULL)
{
fprintf (stderr, "Error in reading scratch file 1.\n");
exit (-1);
}
/* remove the carriage return from the name */
for (i = 0; i < strlen (sname); i++)
{
if (iscntrl (sname[i]))
{
sname[i] = '\0'; /* null */
}
}
if (strstr (sname, osname) != NULL)
{
continue;
}
strcpy (osname, sname);
DTIME = delt * 20. / srate / 2.;
JDSTART = JDTIME - 5. / pcnsts.xmnpda;
search (JDSTART, JDSTOP, DTIME, sname, 15., delt * 20., 4);
}
/* final search */
rewind (scrfile2);
outfile = outputfile;
strcpy (osname, "crud");
ojd = 0.;
while (fscanf (scrfile2, "%lf%lf", &JDTIME, &srate) == 2)
{
if (fgets (sname, 31, scrfile2) == NULL)
{
fprintf (stderr, "Error in reading scratch file 2.\n");
exit (-1);
}
/* remove the carriage return from the name */
for (i = 0; i < strlen (sname); i++)
{
if (iscntrl (sname[i]))
{
sname[i] = '\0'; /* null */
}
}
if (strstr (sname, osname) != NULL &&
JDTIME - ojd < delt * 20. / srate)
{
ojd = JDTIME;
continue;
}
ojd = JDTIME;
strcpy (osname, sname);
JDSTART = JDTIME - delt * 20. / srate * 2. / pcnsts.xmnpda;
JDSTOP = JDTIME + delt * 20. / srate * 2. / pcnsts.xmnpda;
DTIME = (6. * delt / 5.) / srate / 2.;
search (JDSTART, JDSTOP, DTIME, sname, 15., delt, 3);
}
/***** cleanup *****/
if (strstr (ofname, "stdout") == NULL)
{
/* close the output file */
fclose (outputfile);
}
/* close the scratch files */
fclose (scrfile1);
fclose (scrfile2);
/*** close the element file ***/
fclose (elefile);
exit (0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.