• Main Page
  • Related Pages
  • Classes
  • Files
  • File List
  • File Members

src/ccp4_fortran.h

Go to the documentation of this file.
00001 /*
00002      ccp4_fortran.h: header file for Fortran APIs
00003      Copyright (C) 2001   Eugene Krissinel
00004      Copyright (C) 2007   Morten Kjeldgaard
00005 
00006      This library is free software; you can redistribute it and/or
00007      modify it under the terms of the GNU Lesser General Public
00008      License as published by the Free Software Foundation; either
00009      version 2.1 of the License, or (at your option) any later
00010      version.
00011 
00012      This library is distributed in the hope that it will be useful,
00013      but WITHOUT ANY WARRANTY; without even the implied warranty of
00014      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015      Lesser General Public License for more details.
00016 
00017      You should have received a copy of the GNU Lesser General Public
00018      License along with this library; if not, write to the Free
00019      Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00020      Boston, MA 02110-1301 USA
00021 
00022 */
00023 
00032 #ifndef __CCP4_FORTRAN
00033 #define __CCP4_FORTRAN
00034 
00035 #include "ccp4_types.h"
00036 
00037 /* stardent is now obsolete, but we retain this category in case it is useful later */
00038 #ifdef CALL_LIKE_STARDENT
00039   /* SStrParam is used in Ardent-like machines' fortran calls */
00040   /* for passing a string parameter */
00041   DefineStructure(SStrPar)
00042   struct SStrPar  {
00043     pstr S;
00044     int  len;
00045     int  id;
00046   };
00047 #endif
00048 
00049 #define _LVTOB(l) ((long) ((l) == 0 ? 0 : 1))  
00050 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : 1))
00051 #if defined (__OSF1__) || defined (__osf__)
00052 #undef _BTOLV
00053 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : -1))  
00054 #endif    
00055 
00176 #if  defined(CALL_LIKE_SUN)
00177 
00178   typedef pstr fpstr;
00179 
00180 #define FTN_STR(s)  s
00181 #define FTN_LEN(s)  s##_len
00182 
00183 #define char_struct(s)           \
00184     pstr  s;                       \
00185     int   s##_len;
00186 #define fill_char_struct(s,str)  \
00187     s  = str;                      \
00188     s##_len = strlen(str);
00189 #define init_char_struct(s,str,size)  \
00190     s  = str;                      \
00191     s##_len = size;
00192 
00193 #define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00194     void name##_ p_sun
00195 #define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00196     name##_ p_sun
00197 #define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00198     val name##_ p_sun
00199 #elif defined(CALL_LIKE_HPUX)
00200 
00201   typedef pstr fpstr;
00202 
00203 #  define FTN_STR(s)  s
00204 #  define FTN_LEN(s)  s##_len
00205 
00206 #  define char_struct(s)  \
00207     pstr  s;              \
00208     int   s##_len;
00209 #  define fill_char_struct(s,str)  \
00210     s  = str;                      \
00211     s##_len = strlen(str);
00212 #  define init_char_struct(s,str,size)  \
00213     s  = str;                      \
00214     s##_len = size;
00215 
00216 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00217     void name p_sun
00218 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00219     name p_sun
00220 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00221     val name p_sun
00222 #elif defined(CALL_LIKE_STARDENT)
00223 
00224   typedef PStrPar fpstr;
00225 
00226 #  define FTN_STR(s)  s->Str_pointer
00227 #  define FTN_LEN(s)  s->Str_length
00228 
00229 #  define char_struct(s)           \
00230     SStrPar s;
00231 #  define fill_char_struct(s,str)  \
00232     s.S   = str;                   \
00233     s.len = strlen(FName);         \
00234     s.id  = 0;
00235 #  define init_char_struct(s,str,size)  \
00236     s.S   = str;                   \
00237     s.len = size;         \
00238     s.id  = 0;
00239 
00240 #  define FORTRAN_SUBR(NAME,name,p_send,p_sstruct,p_sflw) \
00241     void NAME p_stardent
00242 #  define FORTRAN_CALL(NAME,name,p_send,p_sstruct,p_sflw) \
00243     NAME p_stardent
00244 #  define FORTRAN_FUN(val,NAME,name,p_send,p_sstruct,p_sflw) \
00245     val NAME p_stardent
00246 
00247 #elif defined(CALL_LIKE_VMS)
00248 
00249   typedef dsc$descriptor_s * fpstr;
00250 
00251 #  define FTN_STR(s)  s->dsc$a_pointer;
00252 #  define FTN_LEN(s)  s->dsc$w_length;
00253 
00254 #  define char_struct(s)                \
00255     dsc$descriptor_s s;
00256 #  define fill_char_struct(s,str)     \
00257     s.dsc$a_pointer = str;            \
00258     s.dsc$w_length  = strlen(str);    \
00259     s.dsc$b_dtype   = DSC$K_DTYPE_T;  \
00260     s.dsc$b_class   = DSC$K_CLASS_S;
00261 #  define init_char_struct(s,str,size)     \
00262     s.dsc$a_pointer = str;            \
00263     s.dsc$w_length  = size;    \
00264     s.dsc$b_dtype   = DSC$K_DTYPE_T;  \
00265     s.dsc$b_class   = DSC$K_CLASS_S;
00266 
00267 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00268     void NAME p_stardent
00269 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00270     NAME p_stardent
00271 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00272     val NAME p_stardent
00273 
00274 #elif defined(CALL_LIKE_MVS)
00275 
00276 #if (CALL_LIKE_MVS == 2)
00277 
00278   typedef pstr fpstr;
00279 
00280 #define FTN_STR(s)  s
00281 #define FTN_LEN(s)  s##_len
00282 
00283 #define char_struct(s)           \
00284     pstr  s;                       \
00285     int   s##_len;
00286 #define fill_char_struct(s,str)  \
00287     s  = str;          \
00288         s##_len = strlen(str);
00289 #define init_char_struct(s,str,size)  \
00290     s  = str;                   \
00291         s##_len = size;
00292 
00293 #define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00294     void NAME p_sun
00295 #define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00296     NAME p_sun
00297 #define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00298     val NAME p_sun
00299 
00300 #else
00301 
00302   typedef pstr fpstr;
00303 
00304 #  define FTN_STR(s)  s
00305 #  define FTN_LEN(s)  s##_len
00306 
00307 #  define char_struct(s)  \
00308     pstr  s;              \
00309     int   s##_len;
00310 #  define fill_char_struct(s,str)  \
00311     s  = str;                      \
00312     s##_len = strlen(str);
00313 #  define init_char_struct(s,str,size)  \
00314     s  = str;                      \
00315     s##_len = size;
00316 
00317 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00318     void __stdcall NAME p_mvs
00319 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00320     NAME p_mvs
00321 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00322     val __stdcall NAME p_mvs
00323 
00324 # endif
00325 
00326 #else
00327 
00328 #  error  Unknown machine!!!
00329 
00330   typedef pstr fpstr;
00331 
00332 #  define FTN_STR(s)  s
00333 #  define FTN_LEN(s)  s##_len
00334 
00335 #  define char_struct(s)  \
00336     pstr  s;              \
00337     int   s##_len;
00338 #  define fill_char_struct(s,str)  \
00339     s  = str;                      \
00340     s##_len = strlen(str);
00341 #  define init_char_struct(s,str,size)  \
00342     s  = str;                      \
00343     s##_len = size;
00344 
00353 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00354     void name##_ p_sun
00355 
00363 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00364     name##_ p_sun
00365 
00375 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00376     val name##_ p_sun
00377 
00378 #endif
00379 
00380 /* Define Fortran logical */
00381 typedef unsigned int ftn_logical;
00382 #if defined (KNOWN_MACHINE)
00383 #  define FORTRAN_LOGICAL_TRUE  1
00384 #  define FORTRAN_LOGICAL_FALSE 0
00385 #endif
00386 #if defined (__OSF1__) || defined (__osf__)
00387 #  undef FORTRAN_LOGICAL_TRUE
00388 #  define FORTRAN_LOGICAL_TRUE  -1
00389 #endif     
00390 
00391 char *ccp4_FtoCString(fpstr str1, int str1_len);
00392 void ccp4_CtoFString(fpstr str1, int str1_len, const char *cstring);
00393 
00394 #endif    /* __CCP4_FORTRAN */
00395 
00396 /*
00397   Local variables:
00398   mode: font-lock
00399   End:
00400 */

Generated on Mon Jan 10 2011 for gpp4 by  doxygen 1.7.1