This file is indexed.

/usr/share/gnudatalanguage/astrolib/xdispstr.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
;+
;  NAME:      
;     XDISPSTR
;
;  PURPOSE:   
;     Display a string array in a text widget with a simple search capability.
;
; EXPLANATION:
;     Similar to the IDL XDISPLAYFILE procedure but includes a search capbility.
; CALLING SEQUENCE:    
;                 
;     xdispstr, array, [/BLOCK, WIDTH= , HEIGHT=, TITLE=, GROUP_LEADER=, FONT=
;                       TOP_LINE=, POS= ]
;
; INPUT PARAMETER:
;
;     array  - String array (.e.g. FITS header) to be displayed
;
;  OPTIONAL INPUT KEYWORD PARAMETERS:
;
;    block -  Set to 1 to make widget blocking.  Default = block=0
;
;    font  -     Display font for text.
;          
;    width, height  - Scalars giving number of characters per line, number
;                           of lines.  Default = 80x48
;
;    group_leader  -    Group leader for top level base.
;
;    title  - Scalar Title for outermost base widget.
;
;    pos - 2 element array containing the normalized X and Y position to
;            display the widget on the screen.    [0,0] is the upper left
;            hand corner.
;
;    top_line - first line in the string array to display (default is 0)
;
; PROCEDURES USED:
;     CGCENTERTLB
;
;  MODIFICATION HISTORY:
;     Written by R. S. Hill, RITSS, 17 Nov 2000
;     Use cumulative keyword to TOTAL   W. Landsman   May 2006
;     Made resizeable, default size now 48 lines  W. Landsman   July 2013
;     Added POS keyword W. Landsman  Sep 2013
;-


PRO XDISPSTR_EVENT, Event

widget_control, event.top, get_uvalue=info

search = 0b
destroy = 0b
if tag_names(event,/STRUCTURE_NAME) EQ 'WIDGET_BASE' then begin
    widget_control,(*info).array_text, $
          scr_ysize = event.Y,scr_xsize=event.X
endif else begin	  
CASE event.id OF
(*info).done_button:  destroy=1b
(*info).search_button:  search=1b
(*info).search_text:  search=1b
ELSE:
ENDCASE
endelse

IF search THEN BEGIN
    widget_control, (*info).search_text, get_value=seastr
    seastr = seastr[0]
    sp = strpos(strupcase(*(*info).arrayptr), strupcase(seastr))
    w = where(sp GE 0, c)
    IF c GT 0 THEN BEGIN
        tptr = sp[w] + (*(*info).clenptr)[w]
        tlen = strlen(seastr)
        ts = widget_info((*info).array_text, /text_select)
        this_line = max(where(ts[0] GE *(*info).clenptr, c3))
        line_frag = $
            strmid(strupcase((*(*info).arrayptr)[this_line]), $
                   ts[0] - (*(*info).clenptr)[this_line] + tlen)
        again = strpos(line_frag, strupcase(seastr))
        IF again GE 0 THEN BEGIN
            newtptr = again + tlen + ts[0]
        ENDIF ELSE BEGIN
            next = min(where(tptr GT ts[0], c2))
            IF c2 GT 0 THEN newtptr = tptr[next] ELSE newtptr = tptr[0]
        ENDELSE
        widget_control, (*info).array_text, set_text_select=[newtptr,tlen]
        new_line = max(where(newtptr GE *(*info).clenptr))
        middle = (*info).height/2
        nl = n_elements(*(*info).arrayptr)
        tl = ((new_line-middle)>0)<(nl-(*info).height)
        widget_control, (*info).array_text, set_text_top_line=tl
        widget_control, (*info).msg_text, set_value='Line '+strn(new_line)
    ENDIF ELSE BEGIN
        widget_control, (*info).msg_text, set_value='String not found'
    ENDELSE
ENDIF

IF destroy THEN widget_control, event.top, /destroy

RETURN
END

PRO XDISPSTR_CLEANUP, Id
widget_control, id, get_uvalue=info
IF ptr_valid(info) THEN BEGIN
    IF ptr_valid((*info).clenptr) THEN ptr_free, (*info).clenptr
    IF ptr_valid((*info).arrayptr) THEN ptr_free, (*info).arrayptr
    ptr_free, info
ENDIF
RETURN
END


PRO XDISPSTR, Array, BLOCK=block, WIDTH=width, HEIGHT=height, TITLE=title, $
                     GROUP_LEADER=group_leader, FONT=font,top_line=top_line, $
		     POS = pos

on_error, 2

IF N_params() LT 1 THEN BEGIN
    print, 'CALLING SEQUENCE:  XDISPSTR, Array'
    print, 'KEYWORD PARAMETERS:  BLOCK, WIDTH, HEIGHT, TITLE, ' $
            + 'GROUP_LEADER, FONT'
    RETURN
ENDIF

IF n_elements(block) LT 1 THEN block=0
IF n_elements(width) LT 1 THEN width=80
IF n_elements(height) LT 1 THEN height=48 < N_elements(array)
IF n_elements(title) LT 1 THEN title='XDISPSTR'

tlb = widget_base(title=title,col=1,group_leader=group_leader,/TLB_Size_Events)

controls = widget_base(tlb, frame=1, row=1)
done_button = widget_button(controls, value='Done', /no_release)
search_button = widget_button(controls, value='Search:', /no_release)
search_text = widget_text(controls, xsize=30, ysize=1, /editable, font=font)
msg_label = widget_label(controls, value='Message: ')
msg_text = widget_text(controls, xsize=20, ysize=1, font=font)

array_text = widget_text(tlb, value=array, $
                         xsize=width, ysize=height, /scroll, edit=0, font=font)

if N_elements(top_line) EQ 0 then top_line = 0
widget_control, array_text, set_text_top_line=top_line
widget_control, array_text, set_text_select=[0,0]

widget_control, tlb, /realize
    
linelen1 = strlen(array) + 1
cumul_len = [0, total(linelen1,/cumulative,/integer)]
geom = widget_info(tlb,/geometry)
info = ptr_new({done_button:done_button, $
                search_button:search_button, search_text:search_text, $
                array_text:array_text, arrayptr:ptr_new(array), $
                clenptr:ptr_new(cumul_len,/no_copy), $
                msg_text:msg_text, width:width, height:height})


widget_control, tlb, set_uvalue=info
widget_control, tlb,tlb_get_size = basesize
xmanager, 'xdispstr', tlb, cleanup='xdispstr_cleanup', $
          event_handler='xdispstr_event', no_block=1b-block, $
          group_leader=group_leader
if N_elements(pos) EQ 2 then cgcentertlb,tlb,pos[0],pos[1]	  

RETURN
END