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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
include <pkg/mef.h>
# MEFOPEN --- Open a FITS extension, it can be the Primary or extension
# unit, file.fits[0] for the PU or file.fits[extn] for the
# Extension Unit.
#
# filename.ext[abs#][extname,extver]
#
# The absolute extension number (abs#) convention is zero for
# the Primary Unit.
#
# MEF_OPEN -- Open a FITS Unit from a file and returns its characteristics.
pointer procedure mef_open (fitsfile, acmode, oldp)
char fitsfile[ARB] #I Input FITS filename
int acmode #I access mode
pointer oldp #I Old Fits pointer or header size
pointer sp, ksec, section, mef
int group, clsize, open()
begin
call smark (sp)
call salloc (ksec, LEN_CARD, TY_CHAR)
call salloc (section, LEN_CARD, TY_CHAR)
call calloc (mef, LEN_MEF, TY_STRUCT)
MEF_ACMODE(mef) = acmode
# Get filename components
call imparse (fitsfile, MEF_FNAME(mef), SZ_FNAME, Memc[ksec],
LEN_CARD, Memc[section], LEN_CARD, group, clsize)
# Check if file has an extension and exists.
call mef_file_access (MEF_FNAME(mef), acmode)
if (Memc[section] != EOS)
call error(13, "mefopen: Image sections not allowed")
MEF_FD(mef) = open (MEF_FNAME(mef), acmode, BINARY_FILE)
MEF_ENUMBER(mef) = group
MEF_CGROUP(mef) = -1
MEF_KEEPXT(mef) = NO
call sfree (sp)
return(mef)
end
# MEF_FILE_ACCESS -- Check that file exists if READ* mode is given. Mainly we
# want to check if there is an extension 'fits'. If file was given with no
# extension, append .fits and see if exists.
procedure mef_file_access (fname, acmode)
char fname[ARB]
int acmode
pointer sp, fext, fn
int len, fnextn(), access(), strncmp()
begin
if (acmode == NEW_FILE || acmode == NEW_COPY)
return
call smark (sp)
call salloc (fext, SZ_FNAME, TY_CHAR)
call salloc (fn, SZ_FNAME, TY_CHAR)
call strcpy (fname, Memc[fn], SZ_FNAME)
len = fnextn (Memc[fn], Memc[fext], SZ_FNAME)
if (strncmp("fits", Memc[fext], 4) == 0)
return
# See if file exists with no extension
if (access(fname, 0, 0) == YES)
return
else {
call strcat( ".fits", Memc[fn], SZ_FNAME)
if (access(Memc[fn], 0, 0) == YES) {
call strcpy (Memc[fn], fname, SZ_FNAME)
return
}
}
call sfree(sp)
end
|