/usr/share/gnudatalanguage/astrolib/irafdir.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184  | pro irafdir,directory,TEXTOUT=textout
;+
; NAME:
;	IRAFDIR
; PURPOSE:
;	Provide a brief description of the IRAF images on a directory
; CALLING SEQUENCE:
;	IRAFDIR, [ directory, TEXTOUT = ]
;
; OPTIONAL INPUT PARAMETERS:
;	DIRECTORY - Scalar string giving file name, disk or directory to 
;		be searched 
;
; OPTIONAL INPUT KEYWORD:
;	TEXTOUT - specifies output device (see TEXTOPEN)
;		textout=1	TERMINAL using /more option
;		textout=2	TERMINAL without /more option
;		textout=3	<program>.prt
;		textout=4	laser.tmp
;		textout=5      user must open file
;		textout=7       Append to existing <program>.prt file
;		textout = 'filename' (default extension of .prt)
;
; OUTPUT PARAMETERS:
;	None
;
; PROCEDURE:
;	FINDFILE is used to find all '.imh' files in the directory. 
;	The object name and image size (NAXIS1, NAXIS2) are extracted
;	from the header. Each header is also searched for the parameters
;	DATE-OBS (or TDATEOBS), TELESCOP (or OBSERVAT), EXPTIME.
;  
; RESTRICTIONS:
;	(1) Some fields may be truncated since IRAFDIR uses a fixed format 
;		output
;	(2) No more than 2 dimension sizes are displayed 
; SYSTEM VARIABLES:
;	If 'textout' keyword is not specified to select an output device,
;	!TEXTOUT will be the default.    This non-standard system variable
;	can be added using the procedure ASTROLIB.
;
; PROCEDURE CALLS:
;	EXPAND_TILDE(), FDECOMP, REMCHAR, TEXTOPEN, TEXTCLOSE
; MODIFICATION HISTORY:
;	Written, K. Venkatakrishna, ST Systems Corp, August 1991
;	Work for IRAF V2.11 format   W. Landsman   November 1997
;	Assume since V5.5 use file_search W. Landsman   Sep 2006
;-
 On_error,2                          ;Return to caller
 
 ext='*.imh'
 defsysv,'!TEXTUNIT',exist=i
 if i EQ 0 THEN astrolib
 if keyword_set(directory) then begin 
	dir = strlowcase(directory)
	if strpos(dir,'~') GE 0 then dir = expand_tilde(dir)
 endif
 if N_ELEMENTS(dir) eq 0 then cd,current = dir
 dir = dir + path_sep()
 fil = file_search( dir + ext, COUNT=nfiles)
 if nfiles EQ 0 then begin
    message,'No IRAF (*.imh) files found ',/CON
    return
 endif
; Set output device according to keyword TEXTOUT or system variable !TEXTOUT
 if not keyword_set(textout) then textout=!textout
 textopen,'irafdir',TEXTOUT=textout
;  Print the title header
 printf,!textunit,format='(a,/)','IRAF file directory  '+strmid(systime(),4,20)
 printf,!textunit,$
'       NAME         SIZE     OBJECT      DATE-OF-OBS     TELESCOP      EXP TIME'
 get_lun,lun1
 fmt = '(a15,1x,i5,1x,i5,2x,a10,4x,a8,7x,a8,5x,a8)'
 dir2 = 'dummy'
 for i=0,nfiles-1 do begin                          ;Loop over each .imh file
   file1 = fil[i]                                       
   fdecomp,file1,disk,dir2,fname,qual             ;Decompose into disk+filename
   openr,lun1,file1,/stream                       ;open the file
   irafver = bytarr(5)
   readu,lun1,irafver
   newformat = string(irafver) EQ 'imhv2'
   point_lun,lun1,0
   tmp = assoc(lun1,bytarr(32))
   hdr = tmp[0]
 
   exptim ='    ?   '                ;Set default values
   telescop = '   ?      '
   date = '   ?      '
 if not newformat then begin
   hdr2 = hdr                                         ;Read the first 572 bytes
   byteorder,hdr,/sswap                               ; Perform byte swaps
   byteorder,hdr,/lswap 
   hdrlen = fix(hdr,12)                               ;Extract header length,
   ndim = fix(hdr,20)                                 ; number of dimensions,
   naxis1 = long(hdr2,24)                             ; dimension vector
   naxis2 = long(hdr2,28)
   if hdrlen EQ 0 then begin
		close,lun1
		goto, PRINTER
   endif
   tmp1 = assoc(lun1,bytarr(hdrlen*4l,/NOZERO))               
   hdr = tmp1[0]                                     ;Read the entire header
   close,lun1
   byteorder,hdr,/sswap  ;
   nfits = (hdrlen*4l-2054)/162                     ; find the number of records
   linelen = 162
   index = 2052l + indgen(80)*2
  
 endif else begin
   hdrlen = fix(hdr,8)                               ;Extract header length,
   ndim = fix(hdr,20)                                 ; number of dimensions,
   naxis1 = long(hdr,22)                             ; dimension vector
   naxis2 = long(hdr,26)
   tmp1 = assoc(lun1,bytarr(hdrlen*2l,/NOZERO))               
   hdr = tmp1[0]                                     ;Read the entire header
   close,lun1
   nfits = (hdrlen*2l-2049)/81                     ; find the number of records
   linelen = 81
   index = 2046l + indgen(80)
  endelse
; Form the string 'hd', 
; hd will be a FITS style header, that contains all the basic information 
 if nfits EQ 0 then goto, PRINTER
 hd = strarr(nfits)                              ; to break the header into
 for j = 0l,nfits-1 do hd[j] = string(hdr[linelen*j + index] )   
 
   keyword = strtrim( strmid(hd,0,8),2 )
   value = strtrim( strmid(hd,10,20),2 )
 l = where(keyword EQ 'TELESCOP',nfound)           ;Search for OBSERVAT keyword
 if nfound EQ 0 then l = where(keyword EQ 'OBSERVAT', nfound)
 if nfound GT 0 then begin
      telescop = value[l[0]]
      remchar,telescop,"'"
 endif 
 l = where(keyword EQ 'EXPTIME',nfound)           ;Search for EXPTIME keyword
 if nfound GT 0 then begin
    exptim = float(value[l[0]])
    if exptim EQ 0. then exptim = '   ?      ' else $
                 exptim = string(exptim,format= '(f7.1)')     
 endif 
 l = where(keyword EQ 'DATE-OBS' ,nfound)       ;Search for DATE-OBS keyword 
 if nfound EQ 0 then l = where(keyword EQ 'TDATEOBS', nfound)
 if nfound GT 0 then begin
   date=value[l[0]]
   remchar,date,"'"
 endif 
;Extract object name
PRINTER:
 if newformat then object = string( hdr[638 + indgen(8)]) else $
		   object = string( hdr[732 + indgen(8)*2]) 
 if dir2 NE dir then begin			;Has directory changed?   
       if ( dir2 EQ '' ) then cd,current=dir else dir = dir2
       printf,!textunit,format='(/a/)',disk+dir   ;Print new directory
       dir = dir2                                  ;Save new directory
 endif                   
;                                                  original header 
 printf,!textunit,FORMAT=fmt,fname,naxis1,naxis2,object,date,telescop,exptim
 if textout EQ 1 then if !ERR EQ 1 then return
 endfor
 textclose, TEXTOUT=textout
 free_lun, lun1
 return
 end
 |