This file is indexed.

/usr/share/gnudatalanguage/astrolib/tvbox.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
185
186
187
188
189
190
191
pro tvbox,width,x,y,color,DATA = data,Color=TheColor, ANGLE = angle, $
                 DEVICE=device, SQUARE=SQUARE,  _EXTRA = _EXTRA
;+
; NAME:
;      TVBOX
; PURPOSE:
;      Draw a box(es) or rectangle(s) of specified width
; EXPLANATION: 
;      Positions can be specified either by the cursor position or by 
;      supplying a vector of X,Y positions.  By default, TVBOX now
;     (since Jan 2012) assumes data coordinates if !X.crange is set. 
;
; CALLING SEQUENCE:
;      TVBOX, width, [ x, y, color, /DATA, ANGLE= ,COLOR =, _EXTRA =  ]
;
; INPUTS:
;      WIDTH -  either a scalar giving the width of a box, or a 2 element
;               vector giving the length and width of a rectangle.
;
; OPTIONAL INPUTS:           
;      X  -  x position for box center, scalar or vector
;      Y  -  y position for box center, scalar or vector.   If vector, then Y
;            must have the same number of elements as X
;            Positions are specified in device coordinates unless /DATA is set
;            If X and Y are not specified, and device has a cursor, then 
;            TVBOX will draw a box at current cursor position
;      COLOR - String or integer specifying the color  to draw the box(es)
;            If COLORS is a scalar then all boxes are drawn with the same
;            color value.   Otherwise, the Nth box is drawn with the
;            Nth value of color.    Color can also be specified as 
;            string (e.g.'red').   See cgCOLOR for a list of available
;            color names.     Default = "opposite".    
; OUTPUTS:
;      None
;
; OPTIONAL KEYWORD INPUTS:
;      ANGLE - numeric scalar specifying the clockwise rotation of
;              the boxes or rectangles.
;      COLOR - Scalar or vector, overrides the COLOR input parameter
;              Color can be specified as a string (e.g. 'red') or intensity 
;              value. See cgCOLOR() for a list of color names.       
;               Default = 'opposite' (i.e. color opposite the background).   
;      /DATA - if this keyword is set and non-zero, then the box width and
;              X,Y position center are interpreted as being in DATA 
;              coordinates.   Note that data coordinates must be previously
;              defined (with a PLOT or CONTOUR call).   The default
;              is to assume data coordinates if !X.CRANGE is set.    Force
;              device coordinates by setting DATA = 0 or /DEVICE
;      /DEVICE Set this keyword to force use of device coordinates
;      /FILL  - If set, fill the box using cgCOLORFILL
;      /SQUARE - If set, then a square is drawn, even if in data coordinates
;               with unequal X and Y axes.   The X width is used for the
;               square width, and the Y width is ignored.
;
;      Any keyword recognized by cgPLOTS (or cgCOLORFILL if /FILL is set) 
;      is also recognized by TVBOX.   
;      In particular, the linestyle, thickness and clipping of the boxes
;      is controlled by the  LINESTYLE, THICK and NOCLIP keywords.
;      (Clipping is turned off by default, set NOCLIP=0 to activate it.)
;      If /FILL is set then available keywords include LINE_FILL and 
;      FILL_PATTERN. 
;
; SIDE EFFECTS:
;       A square or rectangle will be drawn on the device
;       For best results WIDTH should be odd when using the default DEVICE
;       coordinates.  (If WIDTH is even, the actual size of the box will be 
;       WIDTH + 1, so that box remains centered.)
;
; EXAMPLES:
;       (1) Draw a double thick box of width 13, centered at 221,256 in the
;       currently active window
;
;           IDL> tvbox, 13, 221, 256, thick=2
;
;       (2) Overlay a "slit" with dimension 52" x 2" on a previously displayed
;           image at a position angle (East of North) of 32 degrees.    The 
;           slit is to be centered at XC, YC and the plate scale 
;           arcsec_per_pixel is known.
;
;           IDL> w = [2.,52.]/arcsec_per_pixel ;Convert slit size to pixel units
;           IDL> tvbox,w,XC,YC,ang=-32          ;Draw slit
; RESTRICTIONS:
;         Allows use of only device (default) or data (if /DATA is set) 
;           coordinates.   Normalized coordinates are not allowed
; PROCEDURES USED:
;       cgpolygon, zparcheck
; REVISON HISTORY:
;       Written, W. Landsman   STX Co.           10-6-87
;       Modified to take vector arguments. Greg Hennessy Mar 1991
;       Fixed centering of odd width    W. Landsman    Sep. 1991
;       Let the user specify COLOR=0, accept vector color, W. Landsman Nov. 1995
;       Fixed typo in _EXTRA keyword  W. Landsman   August 1997
;       Added ANGLE keyword    W.Landsman     February 2000 
;       Make sure ANGLE is a scalar   W. Landsman  September 2001
;       Don't round coordinates if /DATA is set.   M. Perrin  August 2005
;       Use STRICT_EXTRA to flag valid keywords W. Landsman Sep 2005
;       Check that width has only 1 or 2 elements W. Landsman August 2010
;       Use Coyote Graphcis  W. Landsman February 2011
;       Added /FILL keyword  W. Landsman  July 2011
;       Default to data coordinates if !X.crange present  WL Jan 2012
;       Added Square keyword  WL.  April 2012
;       
;-
 compile_opt idl2
 On_error,2

 npar = N_params()                         ;Get number of parameters

 if ( npar LT 1 ) then begin
     print,'Syntax - TVBOX, width,[ x, y, color, THICK= ,/DATA, ANGLE=, COLOR=]'
     return
 endif

 zparcheck, 'TVBOX', width, 1, [1,2,3,4,5], [0,1], 'Box Width'

 if N_elements(width) GT 2 then message, $
     'ERROR - First parameter (box width) must have 1 or 2 values' 
 if ( N_elements(width) EQ 2 ) then w = width/2. else w = [width,width]/2.

; Use data coordinates if !X.crange is set (previous plot) and /DEVICE not set 

; Default to data coordinates if !X.crange is set (previous plot) 
   if keyword_set(device) then datacoord = 0 else begin
      if N_elements(data) eq 0 then datacoord = !x.crange[0] NE !x.crange[1]  $
                          else datacoord = logical_true(data)
   endelse   			  
 

; Can't figure out in IDL how to figure out if the device has a cursor so
; we'll just check for a postscript device

 if ( npar LT 3 ) then if  (!D.NAME NE 'PS') then begin 
    cursor,x,y,/DEVICE,/NOWAIT          ;Read X,Y from the window
    if (x LT 0) or (y LT 0) then begin
       message,'Position cursor in window ' + strtrim(!D.WINDOW,2) + $
              ' -- then hit mouse button',/INF
       cursor,x,y,/DEVICE,/WAIT
       message, 'Box is centered at (' + strtrim(x,2) + ',' + $
                 strtrim(y,2) + ')',/INF
    endif
 endif else message, $
     'ERROR - X,Y position must be specified for Postscript device'

 if N_elements(TheColor) EQ 0 then begin 
     if N_elements(color) EQ 0 then color = cgcolor('opposite')
 endif else color = TheColor    
 nbox = N_elements(x)                      ;Number of boxes to draw
 if ( nbox NE N_elements(Y) ) then $
       message,'ERROR - X and Y positions must have same number of elements'

 xs = x & ys = y
 
 Ncol = N_elements(color)
 xbox = [1,1,-1,-1,1]*w[0]
 ybox = [-1,1,1,-1,-1]*w[1]
 if keyword_set(angle) then begin           ;Non-zero rotation angle?
       ang = angle[0]/!RADEG
       xprime =  xbox*cos(ang) + ybox*sin(ang)
       yprime = -xbox*sin(ang) + ybox*cos(ang)
       xbox = xprime
       ybox = yprime
 endif
 
 if keyword_set(square) && datacoord then begin
 ; Get ratio of unit vectors in X and Y direction
   t = convert_coord([0,w[0],0],[0,0,w[0]],/data,/to_device)
   ratio = (t[0,1]-t[0,0])/(t[1,2]-t[1,0])
    ybox = ybox*ratio
 endif
      
 for i = 0l, nbox-1 do begin

  j = i < (Ncol-1)
  xt = xs[i] + xbox      ;X edges of rectangle
  yt = ys[i] + ybox     ;Y edges of rectangle
   
; Plot the box in data or device coordinates.   Default for Coyote graphcis
; is data coordinates. 

  if datacoord then $
     cgpolygon, xt, yt, color= color[j], _STRICT_EXTRA = _EXTRA $
   else begin    
 ; only round coordinates to integers if using device coords;
 ; data coords can potentially be fractional.
     xt = round(xt) & yt = round(yt)
     cgpolygon,xt,yt,/DEVICE,color=color[j],_STRICT_EXTRA=_EXTRA  
   endelse
 endfor

 return
 end