/usr/share/gnudatalanguage/astrolib/strn.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 | function strn, number, LENGTH = length, PADTYPE = padtype, PADCHAR = padchar, $
FORMAT = Format
;+
; NAME:
; STRN
; PURPOSE:
; Convert a number to a string and remove padded blanks.
; EXPLANATION:
; The main and original purpose of this procedure is to convert a number
; to an unpadded string (i.e. with no blanks around it.) However, it
; has been expanded to be a multi-purpose formatting tool. You may
; specify a length for the output string; the returned string is either
; set to that length or padded to be that length. You may specify
; characters to be used in padding and which side to be padded. Finally,
; you may also specify a format for the number. NOTE that the input
; "number" need not be a number; it may be a string, or anything. It is
; converted to string.
;
; CALLING SEQEUNCE:
; tmp = STRN( number, [ LENGTH=, PADTYPE=, PADCHAR=, FORMAT = ] )
;
; INPUT:
; NUMBER This is the input variable to be operated on. Traditionally,
; it was a number, but it may be any scalar type.
;
; OPTIONAL INPUT:
; LENGTH This KEYWORD specifies the length of the returned string.
; If the output would have been longer, it is truncated. If
; the output would have been shorter, it is padded to the right
; length.
; PADTYPE This KEYWORD specifies the type of padding to be used, if any.
; 0=Padded at End, 1=Padded at front, 2=Centered (pad front/end)
; IF not specified, PADTYPE=1
; PADCHAR This KEYWORD specifies the character to be used when padding.
; The default is a space (' ').
; FORMAT This keyword allows the FORTRAN type formatting of the input
; number (e.g. '(f6.2)')
;
; OUTPUT:
; tmp The formatted string
;
; USEFUL EXAMPLES:
; print,'Used ',strn(stars),' stars.' ==> 'Used 22 stars.'
; print,'Attempted ',strn(ret,leng=6,padt=1,padch='0'),' retries.'
; ==> 'Attempted 000043 retries.'
; print,strn('M81 Star List',length=80,padtype=2)
; ==> an 80 character line with 'M81 Star List' centered.
; print,'Error: ',strn(err,format='(f15.2)')
; ==> 'Error: 3.24' or ==> 'Error: 323535.22'
;
; HISTORY:
; 03-JUL-90 Version 1 written by Eric W. Deutsch
; 10-JUL-90 Trimming and padding options added (E. Deutsch)
; 29-JUL-91 Changed to keywords and header spiffed up (E. Deutsch)
; Ma7 92 Work correctly for byte values (W. Landsman)
; 19-NOV-92 Added Patch to work around IDL 2.4.0 bug which caused an
; error when STRN('(123)') was encountered. (E. Deutsch)
;; Handles array input, M. Sullivan March 2014
; Use V6.0 notation W. Landsman April 2014
; Fix problem with vector strings of different length WL Aug 2014
;-
On_error,2
if ( N_params() LT 1 ) then begin
print,'Call: IDL> tmp=STRN(number,[length=,padtype=,padchar=,format=])'
print,"e.g.: IDL> print,'Executed ',strn(ret,leng=6,padt=1,padch='0'),' retries.'"
return,''
endif
if (N_elements(padtype) eq 0) then padtype=1
if (N_elements(padchar) eq 0) then padchar=' '
if (N_elements(Format) eq 0) then Format=''
padc = byte(padchar)
pad = string(replicate(padc[0],200))
tmp=STRARR(N_ELEMENTS(number))
FOR i=0L,N_ELEMENTS(number)-1 DO BEGIN
ss=size(number[i]) & PRN=1 & if (ss[1] eq 7) then PRN=0
if ( Format EQ '') then tmp[i] = strtrim( string(number[i], PRINT=PRN),2) $
else tmp[i] = strtrim( string( number[i], FORMAT=Format, PRINT=PRN),2)
if (N_elements(length) eq 0) then len=strlen(tmp[i]) else len = length
if (strlen(tmp[i]) gt len) then tmp[i]=strmid(tmp[i],0,len)
if (strlen(tmp[i]) lt len) && (padtype eq 0) then begin
tmp[i] += strmid(pad,0,len-strlen(tmp[i]))
endif
if (strlen(tmp[i]) lt len) && (padtype eq 1) then begin
tmp[i] = strmid(pad,0,len-strlen(tmp[i]))+tmp[i]
endif
if (strlen(tmp[i]) lt len) && (padtype eq 2) then begin
padln=len-strlen(tmp[i]) & padfr=padln/2 & padend=padln-padfr
tmp[i]=strmid(pad,0,padfr)+tmp[i]+strmid(pad,0,padend)
endif
endfor
;;Return an array if passed an array, or not if not
IF ( SIZE(number,/DIMENSION) EQ 0 ) THEN RETURN,tmp[0] ELSE RETURN,tmp
end
|