aboutsummaryrefslogtreecommitdiff
path: root/sys/qpoe/qploadwcs.x
blob: b4609ce7457723a79c81f19a43e1e982d8fcf88e (plain) (blame)
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
33
34
35
36
37
38
include	<syserr.h>
include	"qpoe.h"

# QP_LOADWCS -- Load the default WCS, if there is one, from the QPOE image
# header.  A QPOE file can contain any number of WCS, but the default WCS
# should relate the physical coordinate system, e.g., sky coordinates in 
# the range 1024sq, 8192sq, etc., to world coordinates, e.g., the TAN
# projection.  Probably we should provide for multiple physical coordinate
# systems (sky, detector, etc.) each with its own WCS, but at present we
# assume a single WCS.

pointer procedure qp_loadwcs (qp)

pointer	qp				#I QPOE descriptor

int	wcslen
pointer	sp, svwcs, mw
errchk	qp_lenf, syserrs, qp_read, mw_open
int	qp_lenf(), qp_read()
pointer	mw_open()
string	s_qpwcs QPWCS

begin
	# Determine if there is a WCS, and if so, how big the saved version is.
	wcslen = qp_lenf (qp, s_qpwcs)
	if (wcslen <= 0)
	    call syserrs (SYS_QPNOWCS, QP_DFNAME(qp))

	call smark (sp)
	call salloc (svwcs, wcslen, TY_CHAR)

	# Retrieved the saved wcs, and load it into an MWCS descriptor.
	wcslen = qp_read (qp, s_qpwcs, Memc[svwcs], wcslen, 1, "opaque")
	mw = mw_open (svwcs, 0)

	call sfree (sp)
	return (mw)
end