v11i035: starchart 3.2 Part 07/32
ccount at ATHENA.MIT.EDU
ccount at ATHENA.MIT.EDU
Fri Mar 16 10:32:41 AEST 1990
Posting-number: Volume 11, Issue 35
Submitted-by: ccount at ATHENA.MIT.EDU
Archive-name: starchart/part07
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 7 (of 32)."
# Contents: observe/orbcalc.c observe/outsif.c observe/tablecalc.c
# starchart/descrip.mms
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'observe/orbcalc.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'observe/orbcalc.c'\"
else
echo shar: Extracting \"'observe/orbcalc.c'\" \(11271 characters\)
sed "s/^X//" >'observe/orbcalc.c' <<'END_OF_FILE'
X/*
X * orbcalc.c
X * calculate positions of body in elliptical or parabolic orbit
X *
X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
X *
X * This software may be redistributed freely, not sold.
X * This copyright notice and disclaimer of warranty must remain
X * unchanged.
X *
X * No representation is made about the suitability of this
X * software for any purpose. It is provided "as is" without express or
X * implied warranty, to the extent permitted by applicable law.
X *
X */
X
X#ifndef lint
Xstatic char rcsid[] =
X "$Header: orbcalc.c,v 1.8 90/02/19 17:20:47 ccount Exp $";
X#endif
X
X
X#include <stdio.h>
X#include <math.h>
X#ifndef SYSV
X#include <strings.h>
X#else
X#include <string.h>
X#endif
X#include "observe.h"
X#include "degree.h"
X#include "date.h"
X
Xextern char *malloc();
X
X
X/* example
XFormat
Xskip three lines, then for each asteroid
XName i Omega omega a n e M Epoch_date Equinox_year type G H
XEpoch_date must be Month day year
XEquinox_year, e.g. 2000.0
X
Xif type is comet, H and G are g and kappa
X
XVesta 7.139 104.015 150.175 2.3613 0.27163 0.0906 43.314 Oct 1 1989 2000.0 Asteroid 3.16 0.34
X
X*/
X
Xvoid read_elliptical(infile, bodies, nbodies_p, maxbodies)
X FILE *infile;
X wanderer_data_t bodies[];
X int *nbodies_p;
X int maxbodies;
X{
X char in_line[1000], *linep;
X char name[100], H[100], G[100], i[100], Omega[100], omega[100],
X a[100], n[100], body_type[100],
X e[100], M[100], Month[100], day[100], year[100], equinox_year[100];
X char epoch_date_str[300];
X double epoch_date;
X int j, nscanned;
X char *cp;
X
X fgets(in_line, 1000, infile);
X fgets(in_line, 1000, infile);
X fgets(in_line, 1000, infile);
X
X
X j = 0;
X while ((j < maxbodies) && (!feof(infile))) {
X linep = fgets(in_line, 1000, infile);
X if (linep != NULL)
X nscanned = sscanf(linep, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",
X name, i, Omega, omega, a, n,
X e, M, Month, day, year, equinox_year, body_type, H, G);
X else nscanned = 0;
X if (nscanned < 15) continue;
X
X sprintf(epoch_date_str, "%s %s %s", Month, day, year);
X str_to_jd(epoch_date_str, 0, &epoch_date);
X
X
X cp = name;
X while (*cp) {
X if (*cp == '_') *cp = ' ';
X cp++;
X };
X
X bodies[j].name = (char *) malloc((unsigned) (strlen(name)+1));
X if (bodies[j].name != NULL) strcpy(bodies[j].name, name);
X else bodies[j].name = "";
X
X bodies[j].orbit_type = elliptical_orbit;
X bodies[j].elliptical_elements.epoch_jd = epoch_date;
X bodies[j].elliptical_elements.equinox_year = atof(equinox_year);
X bodies[j].elliptical_elements.a = atof(a);
X bodies[j].elliptical_elements.e = atof(e);
X bodies[j].elliptical_elements.i = atof(i);
X bodies[j].elliptical_elements.Omega = atof(Omega);
X bodies[j].elliptical_elements.omega = atof(omega);
X bodies[j].elliptical_elements.n = atof(n);
X bodies[j].elliptical_elements.M = atof(M);
X if ((body_type[0] == 'c') || (body_type[0] == 'C')) {
X bodies[j].body_type = comet;
X bodies[j].g = atof(G);
X bodies[j].kappa = atof(H);
X } else {
X bodies[j].body_type = asteroid;
X bodies[j].H = atof(H);
X bodies[j].G = atof(G);
X };
X
X j++;
X };
X *nbodies_p = j;
X}
X
X
Xvoid elliptical_pos(T, sun_data, data)
X double T; /* time, jd */
X sun_data_t sun_data;
X wanderer_data_t *data;
X{
X double epsilon;
X double a_; /* semimajor axis, A.U. */
X double e_; /* eccentricity */
X double i_; /* inclination (degrees) */
X double omega_; /* argument of perihelion */
X double Omega_; /* longitude of ascending node */
X double n_; /* mean motion (degrees/day) */
X double M_; /* mean anomaly at epoch */
X
X double a, b, c, A, B, C;
X double F, G, H, P, Q, R;
X double M, E, nu, r;
X double x, y, z, X, Y, Z;
X double Delta;
X double Psi_1, Psi_2, psi_t; /* For asteroid mag. calculation */
X double alpha, delta, alpha2000, delta2000;
X
X a_ = data->elliptical_elements.a;
X e_ = data->elliptical_elements.e;
X i_ = data->elliptical_elements.i;
X omega_ = data->elliptical_elements.omega;
X Omega_ = data->elliptical_elements.Omega;
X n_ = data->elliptical_elements.n;
X M_ = data->elliptical_elements.M;
X
X
X epsilon = obl_year(data->elliptical_elements.equinox_year);
X F = DCOS(Omega_);
X G = DSIN(Omega_)*DCOS(epsilon);
X H = DSIN(Omega_)*DSIN(epsilon);
X P = -DSIN(Omega_)*DCOS(i_);
X Q = DCOS(Omega_)*DCOS(i_)*DCOS(epsilon) - DSIN(i_)*DSIN(epsilon);
X R = DCOS(Omega_)*DCOS(i_)*DSIN(epsilon) + DSIN(i_)*DCOS(epsilon);
X
X A = atan2(F,P)*RAD_TO_DEG;
X B = atan2(G,Q)*RAD_TO_DEG;
X C = atan2(H,R)*RAD_TO_DEG;
X
X
X a = sqrt(F*F + P*P);
X b = sqrt(G*G + Q*Q);
X c = sqrt(H*H + R*R);
X
X /* Calculate M, E, nu, r */
X M = into_range(M_ + n_ * (T - data->elliptical_elements.epoch_jd));
X anom_calc(M, e_, &E, &nu);
X r = a_ * (1 - e_ * DCOS(E));
X
X x = r * a * DSIN(A + omega_ + nu);
X y = r * b * DSIN(B + omega_ + nu);
X z = r * c * DSIN(C + omega_ + nu);
X
X sun_rect(T, data->elliptical_elements.equinox_year,
X sun_data.R, sun_data.Theta, &X, &Y, &Z);
X
X
X Delta = sqrt((X+x)*(X+x) + (Y+y)*(Y+y) + (Z+z)*(Z+z));
X R = sqrt(X*X + Y*Y + Z*Z);
X
X
X data->alpha = atan2(Y+y, X+x)*RAD_TO_DEG;
X if (data->alpha < 0) data->alpha += 360.0;
X data->delta = asin((Z+z)/Delta)*RAD_TO_DEG;
X data->r = r;
X data->Delta = Delta;
X
X if (data->elliptical_elements.equinox_year != 2000.0) {
X alpha = data->alpha;
X delta = data->delta;
X precess(data->elliptical_elements.equinox_year, 2000.0,
X alpha, delta, &alpha2000, &delta2000);
X data->alpha2000 = alpha2000;
X data->delta2000 = delta2000;
X } else {
X data->alpha2000 = data->alpha;
X data->delta2000 = data->delta;
X };
X/* Can't set l, b, lambda */
X
X data->psi = acos((R*R + Delta*Delta - r*r)/ (2*R*Delta))*RAD_TO_DEG;
X data->beta = acos((r*r + Delta*Delta - R*R)/ (2*r*Delta))*RAD_TO_DEG;
X
X if (data->body_type == asteroid) {
X G = data->G;
X H = data->H;
X psi_t = exp(log(DTAN(data->beta/2.0))*0.63);
X Psi_1 = exp(-3.33*psi_t);
X psi_t = exp(log(DTAN(data->beta/2.0))*1.22);
X Psi_2 = exp(-1.87*psi_t);
X data->mag = 5.0 * log10(r*Delta) + H
X - 2.5* log10((1-G)*Psi_1 + G*Psi_2);
X } else if (data->body_type == comet) {
X data->mag = data->g + 5.0 * log10(Delta)
X + 2.5 * data->kappa * log10(r);
X } else {
X data->mag = 1.0;
X }
X}
X
X
X
X
X/* example
XFormat
Xskip three lines, then for each asteroid
XName i Omega omega q Epoch_date Equinox_year g kappa
XEpoch_date must be Month day year
XEquinox_year, e.g. 2000.0
X
XBorsen-metcalf 7.139 104.015 150.175 0.4 Oct 1 1989 2000.0 3.16 0.34
X
X*/
X
X
Xvoid read_parabolic(infile, bodies, nbodies_p, maxbodies)
X FILE *infile;
X wanderer_data_t bodies[];
X int *nbodies_p;
X int maxbodies;
X{
X char in_line[1000], *linep;
X char name[100], g[100], kappa[100], i[100], Omega[100], omega[100],
X q[100], Month[100], day[100], year[100], equinox_year[100];
X char perihelion_date_str[300];
X double perihelion_date;
X int j, nscanned;
X
X fgets(in_line, 1000, infile);
X fgets(in_line, 1000, infile);
X fgets(in_line, 1000, infile);
X
X
X j = 0;
X while ((j < maxbodies) && (!feof(infile))) {
X linep = fgets(in_line, 1000, infile);
X if (linep != NULL)
X nscanned = sscanf(linep, "%s %s %s %s %s %s %s %s %s %s %s",
X name, i, Omega, omega, q, Month, day, year, equinox_year,
X g, kappa);
X else nscanned = 0;
X if (nscanned < 11) continue;
X
X sprintf(perihelion_date_str, "%s %s %s", Month, day, year);
X str_to_jd(perihelion_date_str, 0, &perihelion_date);
X
X bodies[j].name = (char *) malloc((unsigned) (strlen(name)+1));
X if (bodies[j].name != NULL) strcpy(bodies[j].name, name);
X else bodies[j].name = "";
X
X bodies[j].orbit_type = parabolic_orbit;
X bodies[j].body_type = comet;
X bodies[j].parabolic_elements.perihelion_date = perihelion_date;
X bodies[j].parabolic_elements.equinox_year = atof(equinox_year);
X bodies[j].parabolic_elements.q = atof(q);
X bodies[j].parabolic_elements.i = atof(i);
X bodies[j].parabolic_elements.Omega = atof(Omega);
X bodies[j].parabolic_elements.omega = atof(omega);
X bodies[j].g = atof(g);
X bodies[j].kappa = atof(kappa);
X
X j++;
X };
X *nbodies_p = j;
X}
X
X
Xvoid parabolic_pos(T, sun_data, data)
X double T; /* time, jd */
X sun_data_t sun_data;
X wanderer_data_t *data;
X{
X double epsilon;
X double q_; /* perihelion distance, A.U. */
X double i_; /* inclination (degrees) */
X double omega_; /* argument of perihelion */
X double Omega_; /* longitude of ascending node */
X double T_0; /* Time of passage in perihelion */
X
X double W, s, gamma, gamma_1, beta;
X double nu, r;
X double A, B, C, a, b, c;
X double F, G, H, P, Q, R;
X double x, y, z, X, Y, Z;
X double Delta;
X double Psi_1, Psi_2, psi_t; /* For asteroid mag. calculation */
X double alpha, delta, alpha2000, delta2000;
X
X q_ = data->parabolic_elements.q;
X i_ = data->parabolic_elements.i;
X omega_ = data->parabolic_elements.omega;
X Omega_ = data->parabolic_elements.Omega;
X T_0 = data->parabolic_elements.perihelion_date;
X
X W = 0.0364911624 * (T - T_0)/(q_ * sqrt(q_));
X beta = atan2(2.0,W); /* note, beta in radians */
X gamma_1 = tan(beta/2.0);
X if (gamma_1 < 0) {
X gamma = atan(-exp(log(-gamma_1)/3.0));
X } else {
X gamma = atan(exp(log(gamma_1)/3.0));
X };
X s = 2.0/tan(2*gamma);
X
X nu = 2.0 * DATAN(s);
X
X r = q_ * (1 + s*s);
X
X epsilon = obl_year(data->parabolic_elements.equinox_year);
X F = DCOS(Omega_);
X G = DSIN(Omega_)*DCOS(epsilon);
X H = DSIN(Omega_)*DSIN(epsilon);
X
X P = -DSIN(Omega_)*DCOS(i_);
X Q = DCOS(Omega_)*DCOS(i_)*DCOS(epsilon) - DSIN(i_)*DSIN(epsilon);
X R = DCOS(Omega_)*DCOS(i_)*DSIN(epsilon) + DSIN(i_)*DCOS(epsilon);
X
X A = atan2(F,P)*RAD_TO_DEG;
X B = atan2(G,Q)*RAD_TO_DEG;
X C = atan2(H,R)*RAD_TO_DEG;
X
X
X a = sqrt(F*F + P*P);
X b = sqrt(G*G + Q*Q);
X c = sqrt(H*H + R*R);
X
X
X x = r * a * DSIN(A + omega_ + nu);
X y = r * b * DSIN(B + omega_ + nu);
X z = r * c * DSIN(C + omega_ + nu);
X
X sun_rect(T, data->parabolic_elements.equinox_year,
X sun_data.R, sun_data.Theta, &X, &Y, &Z);
X
X Delta = sqrt((X+x)*(X+x) + (Y+y)*(Y+y) + (Z+z)*(Z+z));
X R = sqrt(X*X + Y*Y + Z*Z);
X
X
X data->alpha = atan2(Y+y, X+x)*RAD_TO_DEG;
X if (data->alpha < 0) data->alpha += 360.0;
X data->delta = asin((Z+z)/Delta)*RAD_TO_DEG;
X data->r = r;
X data->Delta = Delta;
X
X if (data->parabolic_elements.equinox_year != 2000.0) {
X alpha = data->alpha;
X delta = data->delta;
X precess(data->parabolic_elements.equinox_year, 2000.0,
X alpha, delta, &alpha2000, &delta2000);
X data->alpha2000 = alpha2000;
X data->delta2000 = delta2000;
X } else {
X data->alpha2000 = data->alpha;
X data->delta2000 = data->delta;
X };
X/* Can't set l, b, lambda */
X
X data->psi = acos((R*R + Delta*Delta - r*r)/ (2*R*Delta))*RAD_TO_DEG;
X data->beta = acos((r*r + Delta*Delta - R*R)/ (2*r*Delta))*RAD_TO_DEG;
X
X if (data->body_type == asteroid) {
X G = data->G;
X H = data->H;
X psi_t = exp(log(DTAN(data->beta/2.0))*0.63);
X Psi_1 = exp(-3.33*psi_t);
X psi_t = exp(log(DTAN(data->beta/2.0))*1.22);
X Psi_2 = exp(-1.87*psi_t);
X data->mag = 5.0 * log10(r*Delta) + H
X - 2.5* log10((1-G)*Psi_1 + G*Psi_2);
X } else if (data->body_type == comet) {
X data->mag = data->g + 5.0 * log10(Delta)
X + 2.5 * data->kappa * log10(r);
X } else {
X data->mag = 1.0;
X }
X
X}
X
END_OF_FILE
if test 11271 -ne `wc -c <'observe/orbcalc.c'`; then
echo shar: \"'observe/orbcalc.c'\" unpacked with wrong size!
fi
# end of 'observe/orbcalc.c'
fi
if test -f 'observe/outsif.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'observe/outsif.c'\"
else
echo shar: Extracting \"'observe/outsif.c'\" \(9823 characters\)
sed "s/^X//" >'observe/outsif.c' <<'END_OF_FILE'
X/*
X * outsif.c
X * Output .sif and .star files for object(s)
X *
X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
X *
X * This software may be redistributed freely, not sold.
X * This copyright notice and disclaimer of warranty must remain
X * unchanged.
X *
X * No representation is made about the suitability of this
X * software for any purpose. It is provided "as is" without express or
X * implied warranty, to the extent permitted by applicable law.
X *
X */
X
X#ifndef lint
Xstatic char rcsid[] =
X "$Header: outsif.c,v 1.13 90/03/06 00:10:00 ccount Exp $";
X#endif
X
X
X#include <stdio.h>
X#ifndef SYSV
X#include <strings.h>
X#else
X#include <string.h>
X#endif
X#include "observe.h"
X#include "date.h"
X
X
Xvoid write_files(), tosizestr();
X
X
X/* Output .sif and .star files for object(s) */
Xvoid out_sif(o_sif, o_star, do_sif, do_star, one_day,
X sun_data, moon_data, planets, bodies, nbodies, objects, nobjects)
X FILE *o_sif, *o_star;
X int do_sif, do_star; /* output sif file , .star file */
X int one_day; /* only doing one day */
X sun_data_t sun_data;
X moon_data_t moon_data;
X planet_data_t planets[];
X wanderer_data_t bodies[];
X int nbodies;
X obj_data_t objects[];
X int nobjects;
X{
X int i;
X char moon_phase[20];
X char *typefield;
X
X if (one_day) {
X /* print all */
X write_files(o_sif, o_star, do_sif, do_star,
X sun_data.alpha2000/15.0, sun_data.delta2000,
X -26.0,
X "PS", "G2", sun_data.size,
X " ", "Sol", "");
X
X sprintf(moon_phase, "%6.1f %6.1f", moon_data.phase, moon_data.chi);
X write_files(o_sif, o_star, do_sif, do_star,
X moon_data.alpha2000/15.0, moon_data.delta2000,
X moon_data.mag,
X "PL", "G2", moon_data.size,
X " ", "Moon", moon_phase);
X
X for (i = 0; i < 7; i++)
X if (planets[i].name[0])
X write_files(o_sif, o_star, do_sif, do_star,
X planets[i].alpha2000/15.0, planets[i].delta2000,
X planets[i].mag,
X planets[i].type, planets[i].color, planets[i].size,
X " ", planets[i].name, "");
X
X for (i = 0; i < nbodies; i++) {
X if (bodies[i].body_type == asteroid)
X typefield = "PA";
X else if (bodies[i].body_type == comet)
X typefield = "PC";
X else
X typefield = "P?";
X
X write_files(o_sif, o_star, do_sif, do_star,
X bodies[i].alpha2000/15.0, bodies[i].delta2000,
X bodies[i].mag,
X typefield, " ", -1.0,
X " ", bodies[i].name, "");
X };
X
X for (i = 0; i < nobjects; i++)
X write_files(o_sif, o_star, do_sif, do_star,
X objects[i].alpha2000/15.0, objects[i].delta2000,
X objects[i].mag,
X objects[i].type, " ", objects[i].size,
X " ", objects[i].name, "");
X } else {
X /* only print object list */
X for (i = 0; i < nobjects; i++)
X write_files(o_sif, o_star, do_sif, do_star,
X objects[i].alpha2000/15.0, objects[i].delta2000,
X objects[i].mag,
X objects[i].type, " ", objects[i].size,
X " ", objects[i].name, "");
X }
X}
X
X
X/* Output .sif and .star files for a planet */
Xvoid out_sif_planet(o_sif, o_star, do_sif, do_star, one_day,
X planet, jd)
X FILE *o_sif, *o_star;
X int do_sif, do_star; /* output sif file , .star file */
X int one_day; /* only doing one day */
X planet_data_t planet;
X double jd;
X{
X static char *namep = "";
X char *vectfield;
X char datestr[15];
X char name_date[96];
X
X if (namep == planet.name) { /* we've done this before */
X vectfield = "VS";
X } else { /* this is a new one */
X namep = planet.name;
X vectfield = "VM";
X };
X
X jd_to_str(jd, datestr);
X sprintf(name_date, "%s %s", planet.name, datestr);
X
X write_files(o_sif, o_star, do_sif, do_star,
X planet.alpha2000/15.0, planet.delta2000,
X planet.mag,
X planet.type, " ", planet.size,
X " ", name_date, "");
X write_files(o_sif, o_star, do_sif, do_star,
X planet.alpha2000/15.0, planet.delta2000,
X planet.mag + 1.0,
X vectfield, " ", planet.size,
X " ", name_date, "");
X}
X
X/* Output .sif and .star files for a body */
Xvoid out_sif_body(o_sif, o_star, do_sif, do_star, one_day,
X body, jd)
X FILE *o_sif, *o_star;
X int do_sif, do_star; /* output sif file , .star file */
X int one_day; /* only doing one day */
X wanderer_data_t body;
X double jd;
X{
X static char *namep = "";
X char *vectfield, *typefield;
X char datestr[15];
X char name_date[96];
X
X if (namep == body.name) { /* we've done this before */
X vectfield = "VS";
X } else { /* this is a new one */
X namep = body.name;
X vectfield = "VM";
X };
X
X if (body.body_type == asteroid)
X typefield = "PA";
X else if (body.body_type == comet)
X typefield = "PC";
X else
X typefield = "P?";
X
X jd_to_str(jd, datestr);
X sprintf(name_date, "%s %s", body.name, datestr);
X
X write_files(o_sif, o_star, do_sif, do_star,
X body.alpha2000/15.0, body.delta2000,
X body.mag,
X typefield, " ", -1.0,
X " ", name_date, "");
X write_files(o_sif, o_star, do_sif, do_star,
X body.alpha2000/15.0, body.delta2000,
X body.mag + 1.0,
X vectfield, " ", -1.0,
X " ", name_date, "");
X}
X
X/* output sun */
Xvoid out_sif_sun(o_sif, o_star, do_sif, do_star, one_day,
X sun_data, jd)
X FILE *o_sif, *o_star;
X int do_sif, do_star; /* output sif file , .star file */
X int one_day; /* only doing one day */
X sun_data_t sun_data;
X double jd;
X{
X static char *namep = "";
X char *vectfield;
X char datestr[15];
X char name_date[96];
X
X if (!strcmp(namep,"Sol")) { /* we've done this before */
X vectfield = "VS";
X } else { /* this is a new one */
X namep = "Sol";
X vectfield = "VM";
X };
X
X jd_to_str(jd, datestr);
X sprintf(name_date, "%s %s", "Sol", datestr);
X
X write_files(o_sif, o_star, do_sif, do_star,
X sun_data.alpha2000/15.0, sun_data.delta2000,
X -26.0,
X "PS", "G2", sun_data.size,
X " ", name_date, "");
X write_files(o_sif, o_star, do_sif, do_star,
X sun_data.alpha2000/15.0, sun_data.delta2000,
X -25.0,
X vectfield, " ", sun_data.size,
X " ", name_date, "");
X}
X/* output moon */
Xvoid out_sif_moon(o_sif, o_star, do_sif, do_star, one_day,
X moon_data, jd)
X FILE *o_sif, *o_star;
X int do_sif, do_star; /* output sif file , .star file */
X int one_day; /* only doing one day */
X moon_data_t moon_data;
X double jd;
X{
X static char *namep = "";
X char *vectfield;
X char datestr[15];
X char name_date[96];
X char moon_phase[20];
X
X if (!strcmp(namep,"moon")) { /* we've done this before */
X vectfield = "VS";
X } else { /* this is a new one */
X namep = "moon";
X vectfield = "VM";
X };
X
X jd_to_str(jd, datestr);
X sprintf(name_date, "%s %s", "Moon", datestr);
X sprintf(moon_phase, "%6.1f %6.1f", moon_data.phase, moon_data.chi);
X
X write_files(o_sif, o_star, do_sif, do_star,
X moon_data.alpha2000/15.0, moon_data.delta2000,
X moon_data.mag,
X "PL", "G2", moon_data.size,
X " ", name_date, moon_phase);
X write_files(o_sif, o_star, do_sif, do_star,
X moon_data.alpha2000/15.0, moon_data.delta2000,
X moon_data.mag + 1.0,
X vectfield, " ", moon_data.size,
X " ", name_date, "");
X}
X
X
Xvoid write_files(o_sif, o_star, do_sif, do_star, ra, dec, mag, type, color,
X size, constell, name, comment)
X FILE *o_sif, *o_star;
X int do_sif, do_star; /* output sif file , .star file */
X double ra, dec, mag;
X char type[3], color[3];
X double size;
X char constell[4];
X char *name;
X char *comment;
X{
X int rah, ram, ras, dld, dlm, d_d, d_m, d_s, sign;
X double dec_t;
X int i;
X char magstr[4];
X char sizestr[3];
X
X rah = ra;
X ra -= rah;
X ram = ra*60.0;
X ra -= ram/60.0;
X ras = ra*3600.0 + 0.5;
X if (ras == 60) {
X ras = 0;
X ram++;
X }
X if (ram == 60) {
X ram = 0;
X rah++;
X }
X if (rah == 24) rah = 0;
X
X /* dec -> degrees and minutes */
X dec_t = dec;
X sign = (dec_t < 0.0);
X if (sign) dec_t = -dec_t;
X dld = dec_t;
X dec_t -= dld;
X dlm = dec_t * 60.0 + 0.5;
X if (dlm == 60) {
X dlm = 0;
X dld++;
X }
X
X /* dec -> degrees, minutes and seconds */
X dec_t = dec;
X if (sign) dec_t = -dec_t;
X d_d = (int) dec_t;
X d_m = (int)((dec_t - d_d)*60);
X d_s = (int)((dec_t - d_d - d_m/60.0)*3600 + 0.5);
X if (d_s == 60) {
X d_s = 0;
X d_m++;
X }
X if (d_m == 60) {
X d_m = 0;
X d_d++;
X }
X
X if (mag < 0.0) {
X if (mag < -10.0) strcpy(magstr,"-99");
X else {
X i = -mag*10 + .5;
X sprintf(magstr,"-%02d", i);
X };
X } else if (mag < 10.0) {
X i = mag*100 + .5;
X sprintf(magstr,"%03d", i);
X } else {
X i = mag*100 + .5;
X i %= 1000;
X sprintf(magstr,"%03d", i);
X magstr[0] = ((int) (mag - 10.0)) + 'A';
X };
X
X if (size >= 0.0)
X tosizestr(size, sizestr);
X else
X strcpy(sizestr, " ");
X
X if (do_star)
X if (comment[0])
X fprintf(o_star, "%02d%02d%02d%c%02d%02d%s%s%s%s%s%s,%s\n",
X rah, ram, ras, sign ? '-':'+', dld, dlm,
X magstr,
X type, color,
X sizestr,
X constell, name, comment);
X else
X fprintf(o_star, "%02d%02d%02d%c%02d%02d%s%s%s%s%s%s\n",
X rah, ram, ras, sign ? '-':'+', dld, dlm,
X magstr,
X type, color,
X sizestr,
X constell, name);
X
X if (do_sif)
X fprintf(o_sif, "%2d %2d %2d; %c%02d %2d %d; %.3f;%s;%s;%s;%s;%s;%s\n",
X rah, ram, ras, sign ? '-':'+', d_d, d_m, d_s,
X mag,
X type, color,
X sizestr,
X constell, name, comment);
X}
X
Xvoid tosizestr(sze, str)
X double sze;
X char str[];
X{
X if (sze < 99.5) sprintf(str, "%2d",(int) (sze + 0.5));
X else if (sze < 995.0) {
X sprintf(str, "%2d",(int) ((sze + 5.0)/10.0));
X str[0] = 'A' + str[0] - '0' - 1;
X } else if (sze < 9950.0) {
X sprintf(str, "%2d",(int) ((sze + 50.0)/100.0));
X str[0] = 'J' + str[0] - '0' - 1;
X } else if (sze < 89500.0) {
X sprintf(str, "%2d",(int) ((sze + 500.0)/1000.0));
X str[0] = 'S' + str[0] - '0' - 1;
X } else sprintf(str , "Z9");
X}
END_OF_FILE
if test 9823 -ne `wc -c <'observe/outsif.c'`; then
echo shar: \"'observe/outsif.c'\" unpacked with wrong size!
fi
# end of 'observe/outsif.c'
fi
if test -f 'observe/tablecalc.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'observe/tablecalc.c'\"
else
echo shar: Extracting \"'observe/tablecalc.c'\" \(12025 characters\)
sed "s/^X//" >'observe/tablecalc.c' <<'END_OF_FILE'
X/*
X * tablecalc.c
X * calculate positions by interpolation of a table
X *
X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
X *
X * This software may be redistributed freely, not sold.
X * This copyright notice and disclaimer of warranty must remain
X * unchanged.
X *
X * No representation is made about the suitability of this
X * software for any purpose. It is provided "as is" without express or
X * implied warranty, to the extent permitted by applicable law.
X *
X */
X
X#ifndef lint
Xstatic char rcsid[] =
X "$Header: tablecalc.c,v 1.8 90/02/19 17:21:52 ccount Exp $";
X#endif
X
X
X#include <stdio.h>
X#include <math.h>
X#include <ctype.h>
X
X#ifndef SYSV
X#include <strings.h>
X#else
X#include <string.h>
X#endif /* SYSV */
X#include "observe.h"
X#include "date.h"
X
X
X#ifndef FALSE
X#define FALSE 0
X#endif
X#ifndef TRUE
X#define TRUE 1
X#endif
X
X#ifndef MAX
X#define MAX(x,y) ((x)>(y)?(x):(y))
X#endif
X#ifndef MIN
X#define MIN(x,y) ((x)<(y)?(x):(y))
X#endif
X
Xstatic double polint();
Xstatic void readfile();
X
X#define MAXPTS 300
X
Xstatic double dates[MAXPTS], ra[MAXPTS], dec[MAXPTS],
X mag[MAXPTS], r[MAXPTS], Delta[MAXPTS];
Xstatic int Nread;
Xstatic double from_equinox;
X
Xvoid tabulated_pos(jd, sun_data, body)
X double jd;
X sun_data_t sun_data;
X wanderer_data_t *body;
X{
X double alpha, delta;
X double alpha2000, delta2000;
X double error;
X
X alpha = 15.0 * polint(dates, ra, Nread, jd, &error);
X delta = polint(dates, dec, Nread, jd, &error);
X precess(from_equinox, 2000.0, alpha, delta, &alpha2000, &delta2000);
X
X body->alpha = alpha;
X body->delta = delta;
X body->alpha2000 = alpha2000;
X body->delta2000 = delta2000;
X body->mag = polint(dates, mag, Nread, jd, &error);
X body->r = polint(dates, r, Nread, jd, &error);
X body->Delta = polint(dates, Delta, Nread, jd, &error);
X body->body_type = no_type;
X
X /* Unknown */
X body->beta = -999.0;
X body->psi = -999.0;
X}
X
Xvoid read_table(infile, in_type)
X FILE *infile;
X fformat_t in_type;
X{
X double ra_1, ra_2;
X int i;
X int yr;
X int adjust_ra;
X
X
X
X /* Prepare for epoch change */
X switch (in_type) {
X case emp:
X from_equinox = 1950.0;
X break;
X case empb:
X from_equinox = 1950.0;
X break;
X case aa:
X from_equinox = 2000.0;
X break;
X case st:
X from_equinox = 2000.0;
X break;
X case iau:
X from_equinox = 1950.0;
X break;
X default:
X break;
X }
X
X yr = now_year();
X readfile(infile, in_type, yr);
X
X
X /* Adjust ra to be continuous */
X /* If the difference between adjacent numbers is greater than
X the difference if you subtract 24 from the larger,
X then shift all by 24 hrs */
X adjust_ra = FALSE;
X for (i = 0; i < Nread-1; i++) {
X ra_2 = MAX(ra[i],ra[i+1]);
X ra_1 = MIN(ra[i],ra[i+1]);
X if (fabs(ra_2-ra_1) > fabs(ra_2-24-ra_1))
X adjust_ra = TRUE;
X }
X if (adjust_ra)
X for (i = 0; i < Nread; i++)
X if (ra[i] < 12.0) ra[i] += 24.0;
X}
X
X
Xstatic void readfile(fptr, fform, year)
X FILE *fptr;
X fformat_t fform;
X int year;
X{
X char lbuf[1000], *bufp;
X char s1[100], s2[100], s3[100], s4[100], s5[100], s6[100], s7[100], s8[100],
X s9[100], s10[100], s11[100];
X int i, n;
X int mo, last_mo, yr;
X double dy;
X
X mo = -1;
X last_mo = -2;
X dy = -1;
X yr = year;
X
X fgets(lbuf, 1000, fptr);
X n = sscanf(lbuf, "year %d", &i);
X if (n == 1) yr = i;
X fgets(lbuf, 1000, fptr);
X n = sscanf(lbuf, "year %d", &i);
X if (n == 1) yr = i;
X fgets(lbuf, 1000, fptr);
X n = sscanf(lbuf, "year %d", &i);
X if (n == 1) yr = i;
X
X
X switch (fform) {
X case emp:
X/*
Xmonth day ra ra dec dec
X1 2 3 4 5 6
XVIII 17 0 23.7 -13 48
X 27 0 19.1 -14 51
X
X*/
X i = 0;
X while (!feof(fptr)) {
X bufp = fgets(lbuf, 1000, fptr);
X if (bufp != NULL)
X n = sscanf(bufp, "%s %s %s %s %s %s",
X s1, s2, s3, s4, s5, s6);
X else n = 0;
X if (n < 5) continue;
X if ((lbuf[0] == ' ') || (lbuf[0] == '\t')) {
X /* use current month */
X dy = atof(s1);
X
X ra[i] = atof(s2) + atof(s3)/60.0;
X dec[i] = atof(s4);
X dec[i] += (atof(s5)/60.0)*(s4[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X
X mag[i] = 0.0; /* don't know it */
X r[i] = -1.0; /* don't know it */
X Delta[i] = -1.0; /* don't know it */
X } else {
X mo = tr_mname(s1);
X if (mo < last_mo) yr++;
X last_mo = mo;
X dy = atof(s2);
X
X ra[i] = atof(s3) + atof(s4)/60.0;
X dec[i] = atof(s5);
X dec[i] += (atof(s6)/60.0)*(s5[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X
X mag[i] = 0.0; /* don't know it */
X r[i] = -1.0; /* don't know it */
X Delta[i] = -1.0; /* don't know it */
X }
X
X cal_to_jd(dy, mo, yr, &dates[i]);
X i++;
X };
X Nread = i;
X break;
X case empb:
X/*
Xmonth day ra ra dec dec r Delta V beta
X1 2 3 4 5 6 7 8 9 10
XX 6 23 48.36 -18 5.5 2.958 2.033 7.8 8.8
X 16 23 41.45 -18 13.1 2.955 2.095 8.0 11.6
X*/
X i = 0;
X while (!feof(fptr)) {
X bufp = fgets(lbuf, 1000, fptr);
X if (bufp != NULL)
X n = sscanf(bufp, "%s %s %s %s %s %s %s %s %s %s",
X s1, s2, s3, s4, s5, s6, s7, s8, s9, s10);
X else n = 0;
X if (n < 5) continue;
X if ((lbuf[0] == ' ') || (lbuf[0] == '\t')) {
X /* use current month */
X dy = atof(s1);
X
X ra[i] = atof(s2) + atof(s3)/60.0;
X dec[i] = atof(s4);
X dec[i] += (atof(s5)/60.0)*(s4[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X
X r[i] = atof(s6);
X Delta[i] = atof(s7);
X mag[i] = atof(s8);
X/* beta[i] = atof(s9);*/
X } else {
X mo = tr_mname(s1);
X if (mo < last_mo) yr++;
X last_mo = mo;
X dy = atof(s2);
X
X ra[i] = atof(s3) + atof(s4)/60.0;
X dec[i] = atof(s5);
X dec[i] += (atof(s6)/60.0)*(s5[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X
X r[i] = atof(s7);
X Delta[i] = atof(s8);
X mag[i] = atof(s9);
X/* beta[i] = atof(s10);*/
X }
X
X cal_to_jd(dy, mo, yr, &dates[i]);
X
X i++;
X };
X Nread = i;
X break;
X case aa:
X/*
Xdate RA DEC r Ephemeris Transit
X1 2 3 4 5 6 7 8 9 10 11
XOct. 1 23 54 52.1 -17 37 21 2.011 23 10.0
X 3 23 53 16.1 -17 42 32 2.019 23 00.5
X*/
X i = 0;
X while (!feof(fptr)) {
X bufp = fgets(lbuf, 1000, fptr);
X if (bufp != NULL)
X n = sscanf(bufp, "%s %s %s %s %s %s %s %s %s %s %s",
X s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11);
X else n = 0;
X if (n < 7) continue;
X if ((lbuf[0] == ' ') || (lbuf[0] == '\t')) {
X /* use current month */
X dy = atof(s1);
X
X ra[i] = atof(s2) + atof(s3)/60.0 + atof(s4)/3600.0;
X dec[i] = atof(s5);
X dec[i] += (atof(s6)/60.0 + atof(s7)/3600.0)*(s5[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X
X r[i] = atof(s8);
X
X mag[i] = 0.0; /* don't know it */
X Delta[i] = -1.0; /* don't know it */
X } else {
X mo = tr_mname(s1);
X if (mo < last_mo) yr++;
X last_mo = mo;
X dy = atof(s2);
X
X ra[i] = atof(s3) + atof(s4)/60.0 + atof(s5)/3600.0;
X dec[i] = atof(s6);
X dec[i] += (atof(s7)/60.0 + atof(s8)/3600.0)*(s6[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X r[i] = atof(s9);
X
X mag[i] = 0.0; /* don't know it */
X Delta[i] = -1.0; /* don't know it */
X }
X
X cal_to_jd(dy, mo, yr, &dates[i]);
X
X i++;
X };
X Nread = i;
X break;
X case st:
X/*
XDate RA DEC Elongation Mag.
X1 2 3 4 5 6 7 8
XOct 1 14 07.6 4 06 25 5.4
X 6 14 52.3 3 28 32 6.5
X*/
X i = 0;
X while (!feof(fptr)) {
X bufp = fgets(lbuf, 1000, fptr);
X if (bufp != NULL)
X n = sscanf(bufp, "%s %s %s %s %s %s %s %s",
X s1, s2, s3, s4, s5, s6, s7, s8);
X else n = 0;
X if (n < 5) continue;
X if ((lbuf[0] == ' ') || (lbuf[0] == '\t')) {
X /* use current month */
X dy = atof(s1);
X
X ra[i] = atof(s2) + atof(s3)/60.0;
X dec[i] = atof(s4);
X dec[i] += (atof(s5)/60.0)*(s4[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X mag[i] = atof(s7);
X
X r[i] = -1.0; /* don't know it */
X Delta[i] = -1.0; /* don't know it */
X } else {
X mo = tr_mname(s1);
X if (mo < last_mo) yr++;
X last_mo = mo;
X dy = atof(s2);
X
X ra[i] = atof(s3) + atof(s4)/60.0;
X dec[i] = atof(s5);
X dec[i] += (atof(s6)/60.0)*(s5[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X mag[i] = atof(s8);
X
X r[i] = -1.0; /* don't know it */
X Delta[i] = -1.0; /* don't know it */
X }
X
X cal_to_jd(dy, mo, yr, &dates[i]);
X
X i++;
X };
X Nread = i;
X break;
X case iau:
X/*
Xdate RA DEC \Delta r (V or m1)
X *Only gives \Delta r and V or m1 for every other date*
X
X1 2 3 4 5 6 7 8 9
XOct. 6 14 50.24 3 41.0 1.204 0.643 12.5
X 11 15 29.62 2 48.8
X 16 16 04.01 1 54.1 1.339 0.889 14.1
X 21 16 33.96 1 02.5
X*/
X i = 0;
X while (!feof(fptr)) {
X bufp = fgets(lbuf, 1000, fptr);
X if (bufp != NULL)
X n = sscanf(bufp, "%s %s %s %s %s %s %s %s %s",
X s1, s2, s3, s4, s5, s6, s7, s8, s9);
X else n = 0;
X if (n < 5) continue;
X if ((lbuf[0] == ' ') || (lbuf[0] == '\t')) {
X /* use current month */
X dy = atof(s1);
X
X ra[i] = atof(s2) + atof(s3)/60.0;
X dec[i] = atof(s4);
X dec[i] += (atof(s5)/60.0)*(s4[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X if (n > 5) {
X Delta[i] = atof(s6);
X r[i] = atof(s7);
X mag[i] = atof(s8);
X } else {
X Delta[i] =
X r[i] =
X mag[i] =
X -9999.0;
X }
X } else {
X mo = tr_mname(s1);
X if (mo < last_mo) yr++;
X last_mo = mo;
X dy = atof(s2);
X
X ra[i] = atof(s3) + atof(s4)/60.0;
X dec[i] = atof(s5);
X dec[i] += (atof(s6)/60.0)*(s5[0] == '-' ? -1 : 1);
X /* Beware of the sign */
X if (n > 5) {
X Delta[i] = atof(s7);
X r[i] = atof(s8);
X mag[i] = atof(s9);
X } else {
X Delta[i] =
X r[i] =
X mag[i] =
X -9999.0;
X }
X }
X
X cal_to_jd(dy, mo, yr, &dates[i]);
X
X i++;
X };
X Nread = i;
X
X /* now fix mag, r, and Delta */
X for (i = 0; i < Nread; i++) {
X if (mag[i] < -1000.0)
X mag[i] = (mag[i-1] + mag[i-1])/2.0;
X if (r[i] < -1000.0)
X r[i] = (r[i-1] + r[i-1])/2.0;
X if (Delta[i] < -1000.0)
X Delta[i] = (Delta[i-1] + Delta[i-1])/2.0;
X };
X break;
X default:
X break;
X }
X}
X
X
X
X/* Maximum number of points */
X#define NMAX MAXPTS
X
X/* Polymomial interpolation (or extrapolation) function
XAdopted from Numerical Recipies
XGiven arrays xa and ya, each of length N, and given a value x, this routine
Xreturns a value y and an error estimate dy. If P(x) is the polynomial of
Xdegree N-1 such that P(xa[i]) = ya[i], i = 1, ..., N then the returned
Xvalue y = P(x); */
Xstatic double polint(xa, ya, N, x, dy)
X double xa[], ya[]; /* value arrays */
X int N; /* Order */
X double x; /* x point desired */
X double *dy; /* error estimate */
X{
X int i, NS, M;
X double dif, dift, c[NMAX], d[NMAX], ho, hp, w, den, y;
X
X NS = 0;
X dif = fabs(x-xa[0]);
X /* Find the index NS of closest table entry */
X for (i = 0; i < N; i++) {
X dift = fabs(x - xa[i]);
X if (dift < dif) {
X NS = i;
X dif = dift;
X }
X /* initialize the 'tableau' of c's and d's */
X c[i] =
X d[i] = ya[i];
X }
X y = ya[NS]; /* Initial approximation to Y. */
X NS--;
X /* For each column of the tableay, we loop over the current c's and d's
X and update them */
X for (M = 1; M <= N-1; M++) {
X for (i = 0; i < N-M; i++) {
X ho = xa[i] - x;
X hp = xa[i+M] - x;
X w = c[i+1] - d[i];
X den = ho - hp;
X if (den == 0.0) {
X /* This can occur only if two input xa's are identical */
X fprintf(stderr, "Error in routine polint\n");
X exit(1);
X }
X den = w/den;
X d[i] = hp*den;
X c[i] = ho*den;
X }
X
X /* After each column in the tableau is completed, we decide
X which correction, c or d, we want to add to our accumulating value of y,
X i.e. which path to take throught the tableau -- forking up or down.
X We do this in such a way as to take the most "straight line" route
X through the tableau to its apex, updating NS accordingly to keep track
X of where we are. This route keeps the apartial approximations centered
X (insofar as possible) on the target x. The last dy added is thus
X the error indication. */
X if ((NS+1)*2 < N-M)
X *dy = c[NS+1];
X else {
X *dy = d[NS];
X NS--;
X }
X y = y + *dy;
X }
X
X return y;
X}
END_OF_FILE
if test 12025 -ne `wc -c <'observe/tablecalc.c'`; then
echo shar: \"'observe/tablecalc.c'\" unpacked with wrong size!
fi
# end of 'observe/tablecalc.c'
fi
if test -f 'starchart/descrip.mms' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'starchart/descrip.mms'\"
else
echo shar: Extracting \"'starchart/descrip.mms'\" \(11285 characters\)
sed "s/^X//" >'starchart/descrip.mms' <<'END_OF_FILE'
X###########################################################################
X#
X# DESCRIP.MMS - a 'makefile' for VAX/VMS and VAX C V3.0 or greater
X# by Michael Campanella (campanella at cvg.enet.dec.com)
X#
X# $Header: descrip.mms,v 1.5 90/01/13 14:41:44 ccount Exp $
X#
X###########################################################################
X# Makefile for starchart programs
X#
X# $Header: descrip.mms,v 1.5 90/01/13 14:41:44 ccount Exp $
X#
X#list ONLY the programs you want to use at your site
XTARGS= \
X stardsp.exe \
X starX11.exe \
X starXaw.exe \
X starpost.exe \
X startek.exe
X# staruplot
X# starsunv
X# starlaser
X# starX10
X# startool must be made specially, see below.
X# Also consider "postconv.awk"
X
X#SITE DEPENDENCIES
X#
X# Uncomment out the version appropriate for your site.
X# At present dependencies for sysV UNIX
X#
X#LOCAL=-DSYSV -Dindex=strchr
X#LOCAL = /define=(SYSV,"index=strchr","unlink=delete")
X
X# FOR ALL
X# define OLD_GREEK if you have the old yale.star file, with a
X# slightly different greek encoding
X# To produce programs which allow keyboard user interaction with the -u flag,
X# see COBJ and starmain.OBJ below.
X# FOR X11
X# define USE_X_DASHES if your server can draw dashed lines
X# define RELEASE3_FONTS if you want to use the X11R3 font names
X# define X11R4 if you are using Release 4 (for the athena widgets).
X# FOR POSTSCRIPT
X# define USE_FINE_MACROS if you want to use finer macros than usual:
X# star size varies continuously with magnitude.
X# Needs printer with lots of available memory
X#
X#DEFINES= -DRELEASE3_FONTS -DUSE_X_DASHES -DUSE_FINE_MACROS
X#DEFINES= -DRELEASE3_FONTS -DUSE_X_DASHES
X#DEFINES = /define=(USE_X_DASHES,RELEASE3_FONTS)
X
X#destination for 'make install', otherwise not important
XBINDIR = "/usr/local"
X
X#XINCLUDES is for DECwindows UWS 2.0
X#XINCLUDES = -I/usr/include/mit
XXINCLUDES =
X
X#list ALL header files
XHDRS=icon.h parse_input.h star3.h starXaw.h starXawDlog.h patchlevel.h
X#list ALL source files, whether or not you use them
XSRCS= interact.c parse_input.c readfile.c starX10.c starX11.c starXaw.c \
X starXawDlog.c starXawHelp.c starXawMwin.c starcust.c \
X stardsp.c starimages.c starlaser.c starm2.c starmain.c \
X starpost.c starsample.c starsunv.c starsupp.c startek.c staruplot.c
X
X#list ALL object files which could be produced
XOBJS= interact.OBJ parse_input.OBJ readfile.OBJ starX10.OBJ \
X starX11.OBJ starX11_aw.OBJ starXaw.OBJ starXawDlog.OBJ \
X starXawHelp.OBJ starXawMwin.OBJ starcust.OBJ stardsp.OBJ \
X starimages.OBJ starimages_a.OBJ starlaser.OBJ starm2.OBJ starm2_i.OBJ \
X starmain.OBJ starmain_i.OBJ starpost.OBJ starsunv.OBJ starsupp.OBJ \
X startek.OBJ staruplot.OBJ
X
XATHENA_OBJS = command.obj form.obj label.obj simple.obj text.obj vpaned.obj -
X asciitext.obj box.obj asciisink.obj strtojust.obj disksrc.obj -
X intrinsic.obj stringsrc.obj utils.obj lower.obj dialog.obj scroll.obj -
X strtoornt.obj graypixmap.obj
X
XSTARTOOL=startool.tt startool.icon startool.sh
XSUPP=postconv.awk
XVMSFILES=decwxtk.opt descrip.mms starchart_init.com vaxcrtl.opt
XIBMFILES=pcstar.h Starchar.MSC staribm.c
XFILES = Makefile. README. ${SRCS} ${HDRS} ${STARTOOL} ${SUPP} \
X ${VMSFILES} ${IBMFILES}
X
XDISTDIR=../../dist/starchart
X
X#The following may be defined here to set default data file locations
X# filename filetype description
X# STARFILE STARFTYPE bright star data (yale)
X# INDEXFILE INDEXFTYPE index to fainter stars (SAO)
X# NEBFILE NEBFTYPE nebulae
X# BOUNDFILE BOUNDFTYPE constellation boundaries
X# PATTERNFILE PATTFTYPE constellation patterns
X# CNAMEFILE CNAMEFTYPE constellation names
X# PLANETFILE PLANETFTYPE planet positions
X
X# other files
X# CONSTFILE constellation locations
X# RCFILE resource file
X
X# Define as needed only
X# Remember, there are defaults in the code
X
X# Example
XFILEROOT=/starchart/
XSTAR="${FILEROOT}/yale.star"
XSTART=LINEREAD
XINDEX="${FILEROOT}/index.indx"
XINDEXT=INDEXTYPE
X# only currently valid index file type
XNEB="${FILEROOT}/neb.star"
XNEBT=LINEREAD
XBOUND="${FILEROOT}/boundaries.star"
XBOUNDT=LINEREAD
XPATT="${FILEROOT}/pattern.star"
XPATTTY=LINEREAD
XCNAME="${FILEROOT}/cnames.star"
XCNAMET=LINEREAD
XPLANET="./planet.star"
X# Planets move, so make it local
XPLANETTY=LINEREAD
XCONS="${FILEROOT}/con.locs"
XRC="./.starrc"
X
XFILEFLAGS= \
X -DSTARFILE='$(STAR)' \
X -DSTARFTYPE='$(START)' \
X -DINDEXFILE='$(INDEX)' \
X -DINDEXFTYPE='$(INDEXT)' \
X -DNEBFILE='$(NEB)' \
X -DNEBFTYPE='$(NEBT)' \
X -DBOUNDFILE='$(BOUND)' \
X -DBOUNDFTYPE='$(BOUNDT)' \
X -DPATTERNFILE='$(PATT)' \
X -DPATTFTYPE='$(PATTTY)' \
X -DCNAMEFILE='$(CNAME)' \
X -DCNAMEFTYPE='$(CNAMET)' \
X -DPLANETFILE='$(PLANET)' \
X -DPLANETFTYPE='$(PLANETTY)' \
X -DCONSTFILE='$(CONS)' \
X -DRCFILE='$(RC)'
X
X.first
X pu/nolog/keep=3
X set prot=(g:rwed,w:re)/default
X define sys sys$library
X define x11 decw$include,sys$disk:[]
X
X.last
X pu/nolog
X
Xall : $(TARGS)
X ! Done !
X
X#CFLAGS= ${FILEFLAGS} ${LOCAL} ${DEFINES} -g
XCFLAGS = -
X/list/define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS)
X#LDFLAGS = -g
XLINKFLAGS = /nodebug/trace
X
X#Include interact.OBJ in COBJ to support keyboard user interaction
X#COBJ=starmain.OBJ starm2.OBJ starsupp.OBJ readfile.OBJ parse_input.OBJ
XCOBJ=starmain.OBJ starm2.OBJ starsupp.OBJ readfile.OBJ parse_input.OBJ -
X interact.OBJ
XCOBJIM=$(COBJ) starimages.OBJ
XCOBJIMA=$(COBJ) starimages_a.OBJ
X
Xstardsp.exe : $(COBJ) stardsp.OBJ starcust.OBJ
X $ define/user lnk$library sys$library:vaxcrtl.olb
X $ link/exe=$(mms$target) $(LINKFLAGS) $(mms$source_list)
X# $(CC) $(LDFLAGS) ${COBJ} stardsp.OBJ starcust.OBJ -lm -o $@
X
Xstarlaser.exe : $(COBJIMA) starlaser.OBJ starcust.OBJ
X $(CC) $(LDFLAGS) ${COBJIMA} starlaser.OBJ starcust.OBJ -lm -o $@
X
Xstarpost.exe : $(COBJ) starpost.OBJ starcust.OBJ
X $ define/user lnk$library sys$library:vaxcrtl.olb
X $ link/exe=$(mms$target) $(LINKFLAGS) $(mms$source_list)
X# $(CC) $(LDFLAGS) $(COBJ) starpost.OBJ starcust.OBJ -lm -o $@
X
Xstartek.exe : $(COBJIMA) startek.OBJ starcust.OBJ
X $ define/user lnk$library sys$library:vaxcrtl.olb
X $ link/exe=$(mms$target) $(LINKFLAGS) $(mms$source_list)
X# $(CC) $(LDFLAGS) ${COBJIMA} startek.OBJ starcust.OBJ -lm -o $@
X
Xstaruplot.exe : $(COBJIMA) staruplot.OBJ starcust.OBJ
X $(CC) $(LDFLAGS) ${COBJIMA} staruplot.OBJ starcust.OBJ -lm -lplot -o $@
X
XstarX10.exe : ${COBJIMA} starX10.OBJ starcust.OBJ
X $(CC) $(LDFLAGS) ${COBJIMA} starX10.OBJ starcust.OBJ -lm -lX -o $@
X
XstarX11.exe : $(COBJIM) starX11.OBJ starcust.OBJ
X $ define/user lnk$library sys$library:vaxcrtl.olb
X $ link/exe=$(mms$target) $(LINKFLAGS) $(mms$source_list),decwxtk.opt/opt
X# $(CC) $(LDFLAGS) ${COBJIM} starX11.OBJ starcust.OBJ -lm -lX11 -o $@
X
XstarXaw.exe : starmain_i.OBJ starm2_i.OBJ starsupp.OBJ readfile.OBJ starX11_aw.OBJ \
X starXaw.OBJ starXawDlog.OBJ starXawHelp.OBJ starXawMwin.OBJ\
X starcust.OBJ starimages.OBJ parse_input.OBJ $(ATHENA_OBJS)
X $ define/user lnk$library sys$library:vaxcrtl.olb
X $ link/exe=$(mms$target) $(LINKFLAGS) $(mms$source_list),decwxtk.opt/opt
X# $(CC) $(LDFLAGS) starmain_i.OBJ starm2_i.OBJ starsupp.OBJ readfile.OBJ \
X# starXaw.OBJ starXawDlog.OBJ starXawHelp.OBJ starXawMwin.OBJ \
X# starX11_aw.OBJ starcust.OBJ starimages.OBJ parse_input.OBJ\
X# -lm -lXaw -lXmu -lXt -lX11 -o $@
X
Xstarsunv.exe : starmain_i.OBJ starm2_i.OBJ starsupp.OBJ readfile.OBJ starsunv.OBJ \
X starcust.OBJ starimages.OBJ parse_input.OBJ interact.OBJ
X $(CC) $(LDFLAGS) starmain_i.OBJ starm2_i.OBJ starsupp.OBJ readfile.OBJ \
X starsunv.OBJ starcust.OBJ starimages.OBJ parse_input.OBJ interact.OBJ \
X -lm -lsuntool -lsunwindow -lpixrect -o $@
Xstartool.exe : starsunv
X echo "You must edit startool, startool.tt and startool.sh,"
X echo " and install them"
X echo "You must have the program tooltool,"
X echo " which is available from sun PD archives"
X echo "tooltool -f startool.tt" > startool
X
X# use -DINTERACTIVE_CONTROL in starmain.OBJ and starm2.OBJ
X# to allow keyboard user interaction
Xstarmain.OBJ : starmain.c Makefile star3.h parse_input.h
X $(CC) $(CFLAGS) starmain.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS,INTERACTIVE_CONTROL)
X# $(CC) $(CFLAGS) -DINTERACTIVE_CONTROL -c starmain.c
X
Xstarm2.OBJ : starm2.c Makefile star3.h
X $(CC) $(CFLAGS) starm2.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS,INTERACTIVE_CONTROL)
X# $(CC) $(CFLAGS) -DINTERACTIVE_CONTROL -c starm2.c
X
Xstarmain_i.OBJ : starmain.c Makefile star3.h parse_input.h
X - copy starmain.OBJ starmain_n.OBJ
X $(CC) $(CFLAGS) starmain.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS,INTERACTIVE_CONTROL)
X# $(CC) $(CFLAGS) -DINTERACTIVE_CONTROL -c starmain.c
X COPY starmain.OBJ starmain_i.OBJ
X - copy starmain_n.OBJ starmain.OBJ
X
Xstarm2_i.OBJ : starm2.c Makefile star3.h
X - copy starm2.OBJ starm2_n.OBJ
X $(CC) $(CFLAGS) starm2.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS,INTERACTIVE_CONTROL)
X# $(CC) $(CFLAGS) -DINTERACTIVE_CONTROL -c starm2.c
X COPY starm2.OBJ starm2_i.OBJ
X - copy starm2_n.OBJ starm2.OBJ
X
Xreadfile.OBJ : readfile.c star3.h
X $(CC) $(CFLAGS) readfile.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS)
X
Xstarimages.OBJ : starimages.c star3.h
X $(CC) $(CFLAGS) starimages.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS)
X# $(CC) $(CFLAGS) -c starimages.c
X
X#starimages_a.OBJ defines area operations for drivers which otherwise don't
X# support them
Xstarimages_a.OBJ : Makefile starimages.c star3.h
X - copy starimages.OBJ starimages_n.OBJ
X $(CC) $(CFLAGS) starimages.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS,AREAS)
X# $(CC) $(CFLAGS) -DAREAS -c starimages.c
X COPY starimages.OBJ starimages_a.OBJ
X - copy starimages_n.OBJ starimages.OBJ
X
XstarX11.OBJ : starX11.c Makefile icon.h star3.h
X $(CC) $(CFLAGS) $(XINCLUDES) starX11.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS,STARX11)
X# $(CC) $(CFLAGS) $(XINCLUDES) -DSTARX11 -c starX11.c
X
XstarX11_aw.OBJ : starX11.c Makefile icon.h star3.h
X - copy starX11.OBJ starX11_n.OBJ
X $(CC) $(CFLAGS) $(XINCLUDES) starX11.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS,STARXAW)
X# $(CC) $(CFLAGS) $(XINCLUDES) -DSTARXAW -c starX11.c
X COPY starX11.OBJ starX11_aw.OBJ
X - copy starX11_n.OBJ starX11.OBJ
X
XstarXaw.OBJ : starXaw.c star3.h starXaw.h icon.h
X $(CC) $(CFLAGS) $(XINCLUDES) starXaw.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS)
X# $(CC) $(CFLAGS) $(XINCLUDES) -c starXaw.c
X
XstarXawDlog.OBJ : starXawDlog.c star3.h starXaw.h starXawDlog.h
X $(CC) $(CFLAGS) $(XINCLUDES) starXawDlog.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS)
X# $(CC) $(CFLAGS) $(XINCLUDES) -c starXawDlog.c
X
XstarXawHelp.OBJ : starXawHelp.c star3.h starXaw.h
X $(CC) $(CFLAGS) $(XINCLUDES) starXawHelp.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS)
X# $(CC) $(CFLAGS) $(XINCLUDES) -c starXawHelp.c
X
XstarXawMwin.OBJ : starXawMwin.c star3.h starXaw.h
X $(CC) $(CFLAGS) $(XINCLUDES) starXawMwin.c -
X /define=(SYSV,"index=strchr",USE_X_DASHES,RELEASE3_FONTS)
X# $(CC) $(CFLAGS) $(XINCLUDES) -c starXawMwin.c
X
Xstarsunv.OBJ : star3.h
Xinteract.OBJ : star3.h parse_input.h
Xparse_input.OBJ : star3.h parse_input.h
Xstarcust.OBJ : star3.h
Xstardsp.OBJ : star3.h
Xstarlaser.OBJ : star3.h
Xstarpost.OBJ : star3.h
Xstarsample.OBJ : star3.h
Xstarsupp.OBJ : star3.h
Xstartek.OBJ : star3.h
Xstaruplot.OBJ : star3.h
END_OF_FILE
echo shar: 1 control character may be missing from \"'starchart/descrip.mms'\"
if test 11285 -ne `wc -c <'starchart/descrip.mms'`; then
echo shar: \"'starchart/descrip.mms'\" unpacked with wrong size!
fi
# end of 'starchart/descrip.mms'
fi
echo shar: End of archive 7 \(of 32\).
cp /dev/null ark7isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 32 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
More information about the Comp.sources.misc
mailing list