⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfortran.h

📁 c++经典教材 Blitz++ v0.8
💻 H
📖 第 1 页 / 共 5 页
字号:
   CFC_(UN,LN)( CFARGTA20(AACF,JCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) ); \ WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) WCF(T6,A6,6) \ WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,AA,A) WCF(TB,AB,B) WCF(TC,AC,C) \ WCF(TD,AD,D) WCF(TE,AE,E) WCF(TF,AF,F) WCF(TG,AG,G) WCF(TH,AH,H) WCF(TI,AI,I) \ WCF(TJ,AJ,J) WCF(TK,AK,K) }while(FALSE)#endif#endif         /* MAX_PREPRO_ARGS *//*-------------------------------------------------------------------------*//*               UTILITIES FOR C TO CALL FORTRAN FUNCTIONS                 *//*N.B. PROTOCCALLSFFUNn(..) generates code, whether or not the FORTRAN  function is called. Therefore, especially for creator's of C header files  for large FORTRAN libraries which include many functions, to reduce  compile time and object code size, it may be desirable to create  preprocessor directives to allow users to create code for only those  functions which they use.                                                *//* The following defines the maximum length string that a function can return.   Of course it may be undefine-d and re-define-d before individual   PROTOCCALLSFFUNn(..) as required. It would also be nice to have this derived   from the individual machines' limits.                                      */#define MAX_LEN_FORTRAN_FUNCTION_STRING 0x4FE/* The following defines a character used by CFORTRAN.H to flag the end of a   string coming out of a FORTRAN routine.                                 */#define CFORTRAN_NON_CHAR 0x7F#ifdef OLD_VAXC                                /* Prevent %CC-I-PARAMNOTUSED. */#pragma nostandard#endif#define _SEP_(TN,C,COMMA)     _(__SEP_,C)(TN,COMMA)#define __SEP_0(TN,COMMA)  #define __SEP_1(TN,COMMA)     _Icf(2,SEP,TN,COMMA,0)#define        INT_cfSEP(T,B) _(A,B)#define       INTV_cfSEP(T,B) INT_cfSEP(T,B)#define      INTVV_cfSEP(T,B) INT_cfSEP(T,B)#define     INTVVV_cfSEP(T,B) INT_cfSEP(T,B)#define    INTVVVV_cfSEP(T,B) INT_cfSEP(T,B)#define   INTVVVVV_cfSEP(T,B) INT_cfSEP(T,B)#define  INTVVVVVV_cfSEP(T,B) INT_cfSEP(T,B)#define INTVVVVVVV_cfSEP(T,B) INT_cfSEP(T,B)#define       PINT_cfSEP(T,B) INT_cfSEP(T,B)#define      PVOID_cfSEP(T,B) INT_cfSEP(T,B)#define    ROUTINE_cfSEP(T,B) INT_cfSEP(T,B)#define     SIMPLE_cfSEP(T,B) INT_cfSEP(T,B)#define       VOID_cfSEP(T,B) INT_cfSEP(T,B)    /* For FORTRAN calls C subr.s.*/#define     STRING_cfSEP(T,B) INT_cfSEP(T,B)#define    STRINGV_cfSEP(T,B) INT_cfSEP(T,B)#define    PSTRING_cfSEP(T,B) INT_cfSEP(T,B)#define   PSTRINGV_cfSEP(T,B) INT_cfSEP(T,B)#define   PNSTRING_cfSEP(T,B) INT_cfSEP(T,B)#define   PPSTRING_cfSEP(T,B) INT_cfSEP(T,B)#define    ZTRINGV_cfSEP(T,B) INT_cfSEP(T,B)#define   PZTRINGV_cfSEP(T,B) INT_cfSEP(T,B)                         #if defined(SIGNED_BYTE) || !defined(UNSIGNED_BYTE)#ifdef OLD_VAXC#define INTEGER_BYTE               char    /* Old VAXC barfs on 'signed char' */#else#define INTEGER_BYTE        signed char    /* default */#endif#else#define INTEGER_BYTE        unsigned char#endif#define    BYTEVVVVVVV_cfTYPE INTEGER_BYTE#define  DOUBLEVVVVVVV_cfTYPE DOUBLE_PRECISION #define   FLOATVVVVVVV_cfTYPE float#define     INTVVVVVVV_cfTYPE int#define LOGICALVVVVVVV_cfTYPE int#define    LONGVVVVVVV_cfTYPE long#define   SHORTVVVVVVV_cfTYPE short#define          PBYTE_cfTYPE INTEGER_BYTE#define        PDOUBLE_cfTYPE DOUBLE_PRECISION #define         PFLOAT_cfTYPE float#define           PINT_cfTYPE int#define       PLOGICAL_cfTYPE int#define          PLONG_cfTYPE long#define         PSHORT_cfTYPE short#define CFARGS0(A,T,V,W,X,Y,Z) _3(T,_cf,A)#define CFARGS1(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V)#define CFARGS2(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W)#define CFARGS3(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X)#define CFARGS4(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X,Y)#define CFARGS5(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X,Y,Z)#define  _Icf(N,T,I,X,Y)                 _(I,_cfINT)(N,T,I,X,Y,0)#define _Icf4(N,T,I,X,Y,Z)               _(I,_cfINT)(N,T,I,X,Y,Z)#define           BYTE_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)#define         DOUBLE_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INT,B,X,Y,Z,0)#define          FLOAT_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)#define            INT_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)#define        LOGICAL_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)#define           LONG_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)#define          SHORT_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)#define          PBYTE_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)#define        PDOUBLE_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,PINT,B,X,Y,Z,0)#define         PFLOAT_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)#define           PINT_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)#define       PLOGICAL_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)#define          PLONG_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)#define         PSHORT_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)#define          BYTEV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)#define         BYTEVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)#define        BYTEVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)#define       BYTEVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)#define      BYTEVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)#define     BYTEVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)#define    BYTEVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)#define        DOUBLEV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTV,B,X,Y,Z,0)#define       DOUBLEVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVV,B,X,Y,Z,0)#define      DOUBLEVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVV,B,X,Y,Z,0)#define     DOUBLEVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVV,B,X,Y,Z,0)#define    DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVV,B,X,Y,Z,0)#define   DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVVV,B,X,Y,Z,0)#define  DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVVVV,B,X,Y,Z,0)#define         FLOATV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)#define        FLOATVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)#define       FLOATVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)#define      FLOATVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)#define     FLOATVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)#define    FLOATVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)#define   FLOATVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)#define           INTV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)#define          INTVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)#define         INTVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)#define        INTVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)#define       INTVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)#define      INTVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)#define     INTVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)#define       LOGICALV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)#define      LOGICALVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)#define     LOGICALVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)#define    LOGICALVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)#define   LOGICALVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)#define  LOGICALVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)#define LOGICALVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)#define          LONGV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)#define         LONGVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)#define        LONGVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)#define       LONGVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)#define      LONGVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)#define     LONGVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)#define    LONGVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)#define         SHORTV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)#define        SHORTVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)#define       SHORTVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)#define      SHORTVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)#define     SHORTVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)#define    SHORTVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)#define   SHORTVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)#define          PVOID_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,B,B,X,Y,Z,0)#define        ROUTINE_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)/*CRAY coughs on the first,  i.e. the usual trouble of not being able to  define macros to macros with arguments.   New ultrix is worse, it coughs on all such uses. *//*#define       SIMPLE_cfINT                    PVOID_cfINT*/#define         SIMPLE_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define           VOID_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define         STRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define        STRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define        PSTRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define       PSTRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define       PNSTRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define       PPSTRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define        ZTRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define       PZTRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)#define           CF_0_cfINT(N,A,B,X,Y,Z)                         #define   UCF(TN,I,C)  _SEP_(TN,C,COMMA) _Icf(2,U,TN,_(A,I),0)#define  UUCF(TN,I,C)  _SEP_(TN,C,COMMA) _SEP_(TN,1,I) #define UUUCF(TN,I,C)  _SEP_(TN,C,COLON) _Icf(2,U,TN,_(A,I),0)#define        INT_cfU(T,A) _(T,VVVVVVV_cfTYPE)   A#define       INTV_cfU(T,A) _(T,VVVVVV_cfTYPE)  * A#define      INTVV_cfU(T,A) _(T,VVVVV_cfTYPE)   * A#define     INTVVV_cfU(T,A) _(T,VVVV_cfTYPE)    * A#define    INTVVVV_cfU(T,A) _(T,VVV_cfTYPE)     * A#define   INTVVVVV_cfU(T,A) _(T,VV_cfTYPE)      * A#define  INTVVVVVV_cfU(T,A) _(T,V_cfTYPE)       * A#define INTVVVVVVV_cfU(T,A) _(T,_cfTYPE)        * A#define       PINT_cfU(T,A) _(T,_cfTYPE)        * A#define      PVOID_cfU(T,A) void  *A #define    ROUTINE_cfU(T,A) void (*A)() #define       VOID_cfU(T,A) void   A    /* Needed for C calls FORTRAN sub.s.  */#define     STRING_cfU(T,A) char  *A    /*            via VOID and wrapper.   */#define    STRINGV_cfU(T,A) char  *A#define    PSTRING_cfU(T,A) char  *A#define   PSTRINGV_cfU(T,A) char  *A#define    ZTRINGV_cfU(T,A) char  *A#define   PZTRINGV_cfU(T,A) char  *A/* VOID breaks U into U and UU. */#define       INT_cfUU(T,A) _(T,VVVVVVV_cfTYPE) A#define      VOID_cfUU(T,A)             /* Needed for FORTRAN calls C sub.s.  */#define    STRING_cfUU(T,A) char *A #define      BYTE_cfPU(A)   CFextern INTEGER_BYTE      FCALLSC_QUALIFIER A#define    DOUBLE_cfPU(A)   CFextern DOUBLE_PRECISION  FCALLSC_QUALIFIER A#if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))#define     FLOAT_cfPU(A)   CFextern float FCALLSC_QUALIFIER   A#else				   	                   #define     FLOAT_cfPU(A)   CFextern FLOATFUNCTIONTYPE FCALLSC_QUALIFIER A#endif				   	                   #define       INT_cfPU(A)   CFextern int   FCALLSC_QUALIFIER   A#define   LOGICAL_cfPU(A)   CFextern int   FCALLSC_QUALIFIER   A#define      LONG_cfPU(A)   CFextern long  FCALLSC_QUALIFIER   A#define     SHORT_cfPU(A)   CFextern short FCALLSC_QUALIFIER   A#define    STRING_cfPU(A)   CFextern void  FCALLSC_QUALIFIER   A#define      VOID_cfPU(A)   CFextern void  FCALLSC_QUALIFIER   A#define    BYTE_cfE INTEGER_BYTE     A0;#define  DOUBLE_cfE DOUBLE_PRECISION A0;#if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))#define   FLOAT_cfE float  A0;#else#define   FLOAT_cfE float AA0;   FLOATFUNCTIONTYPE A0;#endif#define     INT_cfE int    A0;#define LOGICAL_cfE int    A0;#define    LONG_cfE long   A0;#define   SHORT_cfE short  A0;#define    VOID_cfE#ifdef vmsFortran#define  STRING_cfE static char AA0[1+MAX_LEN_FORTRAN_FUNCTION_STRING];        \                       static fstring A0 =                                     \             {MAX_LEN_FORTRAN_FUNCTION_STRING,DSC$K_DTYPE_T,DSC$K_CLASS_S,AA0};\               memset(AA0, CFORTRAN_NON_CHAR, MAX_LEN_FORTRAN_FUNCTION_STRING);\                                    *(AA0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';#else#ifdef CRAYFortran#define  STRING_cfE static char AA0[1+MAX_LEN_FORTRAN_FUNCTION_STRING];        \                   static _fcd A0; *(AA0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';\                memset(AA0,CFORTRAN_NON_CHAR, MAX_LEN_FORTRAN_FUNCTION_STRING);\                            A0 = _cptofcd(AA0,MAX_LEN_FORTRAN_FUNCTION_STRING);#else/* 'cc: SC3.0.1 13 Jul 1994' barfs on char A0[0x4FE+1];  * char A0[0x4FE +1]; char A0[1+0x4FE]; are both OK.     */#define STRING_cfE static char A0[1+MAX_LEN_FORTRAN_FUNCTION_STRING];          \                       memset(A0, CFORTRAN_NON_CHAR,                           \                              MAX_LEN_FORTRAN_FUNCTION_STRING);                \                       *(A0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';#endif#endif/* ESTRING must use static char. array which is guaranteed to exist after   function returns.                                                     *//* N.B.i) The diff. for 0 (Zero) and >=1 arguments.       ii)That the following create an unmatched bracket, i.e. '(', which          must of course be matched in the call.       iii)Commas must be handled very carefully                         */#define    INT_cfGZ(T,UN,LN) A0=CFC_(UN,LN)(#define   VOID_cfGZ(T,UN,LN)    CFC_(UN,LN)(#ifdef vmsFortran#define STRING_cfGZ(T,UN,LN)    CFC_(UN,LN)(&A0#else#if defined(CRAYFortran) || defined(AbsoftUNIXFortran)#define STRING_cfGZ(T,UN,LN)    CFC_(UN,LN)( A0#else#define STRIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -