Home | History | Annotate | Download | only in src
      1 /*
      2  * cblas_dtbsv.c
      3  * The program is a C interface to dtbsv.
      4  *
      5  * Keita Teranishi  5/20/98
      6  *
      7  */
      8 #include "cblas.h"
      9 #include "cblas_f77.h"
     10 void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
     11                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
     12                  const int N, const int K, const double  *A, const int lda,
     13                  double  *X, const int incX)
     14 {
     15    char TA;
     16    char UL;
     17    char DI;
     18 #ifdef F77_CHAR
     19    F77_CHAR F77_TA, F77_UL, F77_DI;
     20 #else
     21    #define F77_TA &TA
     22    #define F77_UL &UL
     23    #define F77_DI &DI
     24 #endif
     25 #ifdef F77_INT
     26    F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX;
     27 #else
     28    #define F77_N N
     29    #define F77_K K
     30    #define F77_lda lda
     31    #define F77_incX incX
     32 #endif
     33    extern int CBLAS_CallFromC;
     34    extern int RowMajorStrg;
     35    RowMajorStrg = 0;
     36 
     37    CBLAS_CallFromC = 1;
     38    if (order == CblasColMajor)
     39    {
     40       if (Uplo == CblasUpper) UL = 'U';
     41       else if (Uplo == CblasLower) UL = 'L';
     42       else
     43       {
     44          cblas_xerbla(2, "cblas_dtbsv","Illegal Uplo setting, %d\n", Uplo);
     45          CBLAS_CallFromC = 0;
     46          RowMajorStrg = 0;
     47          return;
     48       }
     49       if (TransA == CblasNoTrans) TA = 'N';
     50       else if (TransA == CblasTrans) TA = 'T';
     51       else if (TransA == CblasConjTrans) TA = 'C';
     52       else
     53       {
     54          cblas_xerbla(3, "cblas_dtbsv","Illegal TransA setting, %d\n", TransA);
     55          CBLAS_CallFromC = 0;
     56          RowMajorStrg = 0;
     57          return;
     58       }
     59       if (Diag == CblasUnit) DI = 'U';
     60       else if (Diag == CblasNonUnit) DI = 'N';
     61       else
     62       {
     63          cblas_xerbla(4, "cblas_dtbsv","Illegal Diag setting, %d\n", Diag);
     64          CBLAS_CallFromC = 0;
     65          RowMajorStrg = 0;
     66          return;
     67       }
     68       #ifdef F77_CHAR
     69          F77_UL = C2F_CHAR(&UL);
     70          F77_TA = C2F_CHAR(&TA);
     71          F77_DI = C2F_CHAR(&DI);
     72       #endif
     73       F77_dtbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X,
     74                       &F77_incX);
     75    }
     76    else if (order == CblasRowMajor)
     77    {
     78       RowMajorStrg = 1;
     79       if (Uplo == CblasUpper) UL = 'L';
     80       else if (Uplo == CblasLower) UL = 'U';
     81       else
     82       {
     83          cblas_xerbla(2, "cblas_dtbsv","Illegal Uplo setting, %d\n", Uplo);
     84          CBLAS_CallFromC = 0;
     85          RowMajorStrg = 0;
     86          return;
     87       }
     88 
     89       if (TransA == CblasNoTrans) TA = 'T';
     90       else if (TransA == CblasTrans) TA = 'N';
     91       else if (TransA == CblasConjTrans) TA = 'N';
     92       else
     93       {
     94          cblas_xerbla(3, "cblas_dtbsv","Illegal TransA setting, %d\n", TransA);
     95          CBLAS_CallFromC = 0;
     96          RowMajorStrg = 0;
     97          return;
     98       }
     99 
    100       if (Diag == CblasUnit) DI = 'U';
    101       else if (Diag == CblasNonUnit) DI = 'N';
    102       else
    103       {
    104          cblas_xerbla(4, "cblas_dtbsv","Illegal Diag setting, %d\n", Diag);
    105          CBLAS_CallFromC = 0;
    106          RowMajorStrg = 0;
    107          return;
    108       }
    109       #ifdef F77_CHAR
    110          F77_UL = C2F_CHAR(&UL);
    111          F77_TA = C2F_CHAR(&TA);
    112          F77_DI = C2F_CHAR(&DI);
    113       #endif
    114 
    115       F77_dtbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X,
    116                       &F77_incX);
    117    }
    118    else cblas_xerbla(1, "cblas_dtbsv", "Illegal Order setting, %d\n", order);
    119    CBLAS_CallFromC = 0;
    120    RowMajorStrg = 0;
    121    return;
    122 }
    123