function [ wts, ndx ] = ciqfs ( nt, t, mlt, nwts, ndx, key, kind, alpha, ...
  beta, lo )

%*****************************************************************************80
%
%% ciqfs() computes some weights of a quadrature formula in the default interval.
%
%  Discussion:
%
%    This routine computes some or all the weights of a quadrature formula
%    for a classical weight function with default values of A and B,
%    and a given set of knots and multiplicities.
%
%    The weights may be packed into the output array WTS according to a
%    user-defined pattern or sequentially.
%
%    The routine will also optionally print knots and weights and a check of
%    the moments.
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    10 February 2010
%
%  Author:
%
%    Original FORTRAN77 version by Sylvan Elhay, Jaroslav Kautsky.
%    MATLAB version by John Burkardt.
%
%  Reference:
%
%    Sylvan Elhay, Jaroslav Kautsky,
%    Algorithm 655: IQPACK, FORTRAN Subroutines for the Weights of
%    Interpolatory Quadrature,
%    ACM Transactions on Mathematical Software,
%    Volume 13, Number 4, December 1987, pages 399-415.
%
%  Input:
%
%    integer NT, the number of knots.
%
%    real T(NT), the knots.
%
%    integer MLT(NT), the multiplicity of the knots.
%
%    integer NWTS, the number of weights.
%
%    integer NDX(NT),  used to index the output
%    array WTS.  If KEY = 1, then NDX need not be preset.  For more
%    details see the comments in CAWIQ.
%
%    integer KEY, indicates the structure of the WTS
%    array.  It will normally be set to 1.  For more details see
%    the comments in CAWIQ.
%
%    integer KIND, the rule.
%    1, Legendre,             (a,b)       1.0
%    2, Chebyshev Type 1,     (a,b)       ((b-x)*(x-a))^(-0.5)
%    3, Gegenbauer,           (a,b)       ((b-x)*(x-a))^alpha
%    4, Jacobi,               (a,b)       (b-x)^alpha*(x-a)^beta
%    5, Generalized Laguerre, (a,+oo)     (x-a)^alpha*exp(-b*(x-a))
%    6, Generalized Hermite,  (-oo,+oo)   |x-a|^alpha*exp(-b*(x-a)^2)
%    7, Exponential,          (a,b)       |x-(a+b)/2.0|^alpha
%    8, Rational,             (a,+oo)     (x-a)^alpha*(x+b)^beta
%    9, Chebyshev Type 2,     (a,b)       ((b-x)*(x-a))^(+0.5)
%
%    real ALPHA, the value of Alpha, if needed.
%
%    real BETA, the value of Beta, if needed.
%
%    integer LO, selects the actions to perform.
%     > 0, compute and print weights.  Print moments check.
%     = 0, compute weights.
%     < 0, compute and print weights.
%
%  Output:
%
%    real WTS(NWTS), the weights.
%
%    integer NDX(NT), is returned by this routine if not set.
%
  jdf = 0;
  n = 0;
  l = abs ( key );

  for j = 1 : nt

    if ( l == 1 || abs ( ndx(j) ) ~= 0 )
      n = n + mlt(j);
    end

  end
%
%  N knots when counted according to multiplicity.
%
  if ( nwts < n )
    fprintf ( 1, '\n' );
    fprintf ( 1, 'CIQFS - Fatal error!\n' );
    fprintf ( 1, '  NWTS < N.\n' );
    error ( 'CIQFS - Fatal error!' );
  end

  m = n + 1;
  mex = n + 3;
  nst = floor ( m / 2 );
%
%  Get the Jacobi matrix.
%
  [ aj, bj, zemu ] = class_matrix ( kind, nst, alpha, beta );
%
%  Call weights routine.
%
  [ wts, ndx ] = cawiq ( nt, t, mlt, n, ndx, key, nst, aj, bj, jdf, zemu );
%
%  Return if no printing or checking required.
%
  if ( lo == 0 )
    return
  end
%
%  Call checking routine.
%
  mop = m - 1;
  w = zeros ( mex, 1 );

  chkqfs ( t, wts, mlt, nt, n, ndx, key, mop, mex, kind, ...
    alpha, beta, lo, w );

  return
end
