function strn, number, LENGTH = length, PADTYPE = padtype, PADCHAR = padchar, $
                       FORMAT = Format
;
 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))

  ss=size(number) & PRN=1 & if (ss(1) eq 7) then PRN=0
  if ( Format EQ '') then tmp = strtrim( string(number, PRINT=PRN),2) $
    else tmp = strtrim( string( number, FORMAT=Format, PRINT=PRN),2)

  if (N_elements(length) eq 0) then length=strlen(tmp)

  if (strlen(tmp) gt length) then tmp=strmid(tmp,0,length)

  if (strlen(tmp) lt length) and (padtype eq 0) then begin
    tmp = tmp+strmid(pad,0,length-strlen(tmp))
    endif

  if (strlen(tmp) lt length) and (padtype eq 1) then begin
    tmp = strmid(pad,0,length-strlen(tmp))+tmp
    endif

  if (strlen(tmp) lt length) and (padtype eq 2) then begin
    padln=length-strlen(tmp) & padfr=padln/2 & padend=padln-padfr
    tmp=strmid(pad,0,padfr)+tmp+strmid(pad,0,padend)
    endif

  return,tmp
end