001: /*
002:  * cblas_dtpmv.c
003:  * The program is a C interface to dtpmv.
004:  *
005:  * Keita Teranishi  5/20/98
006:  *
007:  */
008: #include "cblas.h"
009: #include "cblas_f77.h"
010: void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
011:                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
012:                  const int N, const double  *Ap, double  *X, const int incX)
013: {
014:    char TA;
015:    char UL;
016:    char DI;
017: #ifdef F77_CHAR
018:    F77_CHAR F77_TA, F77_UL, F77_DI;
019: #else
020:    #define F77_TA &TA
021:    #define F77_UL &UL
022:    #define F77_DI &DI
023: #endif
024: #ifdef F77_INT
025:    F77_INT F77_N=N, F77_incX=incX;
026: #else
027:    #define F77_N N
028:    #define F77_incX incX
029: #endif
030:    extern int CBLAS_CallFromC;
031:    extern int RowMajorStrg;
032:    RowMajorStrg = 0;
033: 
034:    CBLAS_CallFromC = 1;
035:    if (order == CblasColMajor)
036:    {
037:       if (Uplo == CblasUpper) UL = 'U';
038:       else if (Uplo == CblasLower) UL = 'L';
039:       else
040:       {
041:          cblas_xerbla(2, "cblas_dtpmv","Illegal Uplo setting, %d\n", Uplo);
042:          CBLAS_CallFromC = 0;
043:          RowMajorStrg = 0;
044:          return;
045:       }
046:       if (TransA == CblasNoTrans) TA = 'N';
047:       else if (TransA == CblasTrans) TA = 'T';
048:       else if (TransA == CblasConjTrans) TA = 'C';
049:       else
050:       {
051:          cblas_xerbla(3, "cblas_dtpmv","Illegal TransA setting, %d\n", TransA);
052:          CBLAS_CallFromC = 0;
053:          RowMajorStrg = 0;
054:          return;
055:       }
056:       if (Diag == CblasUnit) DI = 'U';
057:       else if (Diag == CblasNonUnit) DI = 'N';
058:       else
059:       {
060:          cblas_xerbla(4, "cblas_dtpmv","Illegal Diag setting, %d\n", Diag);
061:          CBLAS_CallFromC = 0;
062:          RowMajorStrg = 0;
063:          return;
064:       }
065:       #ifdef F77_CHAR
066:          F77_UL = C2F_CHAR(&UL);
067:          F77_TA = C2F_CHAR(&TA);
068:          F77_DI = C2F_CHAR(&DI);
069:       #endif
070:       F77_dtpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX);
071:    }
072:    else if (order == CblasRowMajor)
073:    {
074:       RowMajorStrg = 1;
075:       if (Uplo == CblasUpper) UL = 'L';
076:       else if (Uplo == CblasLower) UL = 'U';
077:       else
078:       {
079:          cblas_xerbla(2, "cblas_dtpmv","Illegal Uplo setting, %d\n", Uplo);
080:          CBLAS_CallFromC = 0;
081:          RowMajorStrg = 0;
082:          return;
083:       }
084: 
085:       if (TransA == CblasNoTrans) TA = 'T';
086:       else if (TransA == CblasTrans) TA = 'N';
087:       else if (TransA == CblasConjTrans) TA = 'N';
088:       else
089:       {
090:          cblas_xerbla(3, "cblas_dtpmv","Illegal TransA setting, %d\n", TransA);
091:          CBLAS_CallFromC = 0;
092:          RowMajorStrg = 0;
093:          return;
094:       }
095: 
096:       if (Diag == CblasUnit) DI = 'U';
097:       else if (Diag == CblasNonUnit) DI = 'N';
098:       else
099:       {
100:          cblas_xerbla(4, "cblas_dtpmv","Illegal Diag setting, %d\n", Diag);
101:          CBLAS_CallFromC = 0;
102:          RowMajorStrg = 0;
103:          return;
104:       }
105:       #ifdef F77_CHAR
106:          F77_UL = C2F_CHAR(&UL);
107:          F77_TA = C2F_CHAR(&TA);
108:          F77_DI = C2F_CHAR(&DI);
109:       #endif
110: 
111:       F77_dtpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX);
112:    }
113:    else cblas_xerbla(1, "cblas_dtpmv", "Illegal Order setting, %d\n", order);
114:    CBLAS_CallFromC = 0;
115:    RowMajorStrg = 0;
116:    return;
117: }
118: