📄 cfortran.h
字号:
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 + -