Viewing contents of file '../idllib/contrib/buie/badpar.pro'
;+
; NAME:
; badpar
; PURPOSE: (one line)
; Validate an input parameter against valid entries.
; DESCRIPTION:
;
; This is a general parameter checking function for validating input
; quantities in other procedures and functions. This routine will
; generate an error message indicating what is wrong with the item.
;
; Example of use:
;
; pro foo,array
; if badpar(array,[4,5],2,CALLER='foo') then return
; .
; . code for foo .
; .
; end
;
;
; This would cause an immediate return to the routine that called foo
; with an error message if the input was not either floating or double
; and 2 dimensional.
;
; As of IDL v3.0, these are the recognized type codes (see 1-218 in
; reference guide).
;
; Type
; Code Data Type
; ---- -----------------------------
; 0 Undefined
; 1 Byte
; 2 Integer
; 3 Longword integer
; 4 Floating point
; 5 Double-precision floating
; 6 Complex floating
; 7 String
; 8 Structure
;
; CATEGORY:
; Utility
; CALLING SEQUENCE:
; val = badpar(param,goodtype,goodrank)
; INPUTS:
; param - IDL variable to validate.
; goodtype - Scalar or vector of type codes that are valid.
; goodrank - Scalar or vector of valid ranks.
; OPTIONAL INPUT PARAMETERS:
; KEYWORD PARAMETERS:
; CALLER - String identifying the calling routine.
; DEFAULT - Value to return in param if undefined and undefined allowed.
; DIMEN - Dimensions of variable.
; NPTS - Total number of elements in variable.
; RANK - Rank of variable.
; TYPE - Type of variable.
; OUTPUTS:
; Return value is true if the parameter is bad. False if good.
; COMMON BLOCKS:
; SIDE EFFECTS:
; RESTRICTIONS:
; PROCEDURE:
; MODIFICATION HISTORY:
; 3/24/93 - Written by Marc W. Buie, Lowell Observatory.
; 4/27/93 - MWB, added TYPE and DEFAULT keywords.
;-
function badpar,param,goodtype,goodrank, $
CALLER=caller, DEFAULT=default, DIMEN=dimen, $
NPTS=npts, RANK=rank, TYPE=type
errval = 0
sz = size(param)
rank = sz[0]
type = sz[rank+1]
npts = sz[rank+2]
err1=''
err2=''
if rank eq 0 then dimen=0 else dimen = sz[1:rank]
z=where(goodtype eq type, count)
if count eq 0 then begin
case type of
0 : err1 = 'Undefined variable is not allowed.'
1 : err1 = 'Byte variable type is not allowed.'
2 : err1 = 'Integer variable type is not allowed.'
3 : err1 = 'Longword integer variable type is not allowed.'
4 : err1 = 'Floating point variable type is not allowed.'
5 : err1 = 'Double-precision floating point variable type is not allowed.'
6 : err1 = 'Complex floating point variable type is not allowed.'
7 : err1 = 'String variable type is not allowed.'
8 : err1 = 'Structure variable type is not allowed.'
else : err1 = 'Unrecognized variable type code. Impossible!'
endcase
errval=1
endif
if type ne 0 then begin
z=where(goodrank eq rank, count)
if count eq 0 then begin
case rank of
0 : err2 = 'Scalar variables are not allowed.'
1 : err2 = 'Vector variables are not allowed.'
2 : err2 = '2-D variables are not allowed.'
3 : err2 = '3-D variables are not allowed.'
4 : err2 = '4-D variables are not allowed.'
5 : err2 = '5-D variables are not allowed.'
6 : err2 = '6-D variables are not allowed.'
7 : err2 = '7-D variables are not allowed.'
8 : err2 = '8-D variables are not allowed.'
else : err2 = 'Unrecognized variable rank. Impossible!'
endcase
errval=1
endif
endif
if errval then begin
if not keyword_set(caller) then caller = ''
print,caller,'Illegal variable encountered.'
if err1 ne '' then print,err1
if err2 ne '' then print,err2
return,errval
endif
if type eq 0 then begin
szd = size(default)
if szd[szd[0]+1] ne 0 then begin
param = default
sz = size(param)
rank = sz[0]
type = sz[rank+1]
npts = sz[rank+2]
endif
endif
return,errval
end