STScI Logo


include	<fset.h>

# PRECESS -- Precess a list of coordinates read from the standard input
# from startyear to endyear.

procedure t_precess()

char	fname[SZ_FNAME]
int	filelist
double	default_year1, default_year2, stdepoch
bool	streq()
double	clgetd()
int	clpopni(), clgfil()

	# Input can come from the standard input, a file, or a list of files.
	# The following procedure makes both cases look like a list of files.

	filelist = clpopni ("input")

	# Fetch default startyear and endyear parameters from the CL.
	default_year1 = clgetd ("startyear")
	default_year2 = clgetd ("endyear")

	# Output coords for a standard epoch as well as for year2?
	stdepoch = clgetd ("stdepoch")

	# Process each coordinate list.  If reading from the standard input,
	# set up the standard output to flush after every output line, so that
	# precessed coords come back immediately when working interactively.

	while (clgfil (filelist, fname, SZ_FNAME) != EOF) {
	    if (streq (fname, "STDIN"))
		call fseti (STDOUT, F_FLUSHNL, YES)
		call fseti (STDOUT, F_FLUSHNL, NO)
	    call precess_coordinate_list (STDOUT, fname,
		default_year1, default_year2, stdepoch)

	call clpcls (filelist)

# PRECESS_COORDINATE_LIST -- Precess a list of coordinates read from the
# named file, writing the results on the output file.  If stdepoch is not
# zero, print the coords precessed to the given standard epoch as well.

procedure precess_coordinate_list (out, listfile, defyear1, defyear2, stdepoch)

int	out					# output stream
char	listfile[SZ_FNAME]			# input file
double	defyear1, defyear2			# default years
double	stdepoch				# standard epoch

int	in
double	year1, year2
double	ra1, dec1, ra2, dec2
int	fscan(), nscan(), open()
errchk	open, fscan, printf

	in = open (listfile, READ_ONLY, TEXT_FILE)

	# Read successive RA,DEC coordinate pairs from the standard input,
	# precessing and printing the result on the standard output.

	while (fscan (in) != EOF) {
	    call gargd (ra1)
	    call gargd (dec1)
	    call gargd (year1)
	    call gargd (year2)

	    # If there is something wrong with the input coords, print warning
	    # and skip the precession.  If years are not given with entry,
	    # use defaults (nscan returns the number of items successfully
	    # decoded from the input line)

	    if (nscan() < 2) {
		call eprintf ("Bad entry in coordinate list\n")
	    } else if (nscan() == 2) {
		year1 = defyear1
		year2 = defyear2
	    } else if (nscan() == 3)
		year2 = defyear2

	    # Call precession routine to perform the precession, and write
	    # precessed coords to the standard output.

	    call ast_precess (ra1, dec1, year1, ra2, dec2, year2)
	    call fprintf (out, "%13.2h %13.2h %7.1f")
		call pargd (ra2)
		call pargd (dec2)
		call pargd (year2)

	    # Add output for the input coords precessed to the standard
	    # epoch, if desired.

	    if (stdepoch != 0) {
		call ast_precess (ra1, dec1, year1, ra2, dec2, stdepoch)
		call fprintf (out, "%18.2h %12.2h %7.1f")
		    call pargd (ra2)
		    call pargd (dec2)
		    call pargd (stdepoch)

	    call fprintf (out, "\n")

	call close (in)

Source Code · Search Form · STSDAS