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 
00148 #ifndef __CCP4_FORTRAN
00149 #define __CCP4_FORTRAN
00150 
00151 #include "ccp4_types.h"
00152 
00153 /* stardent is now obsolete, but we retain this category in case it is useful later */
00154 #ifdef CALL_LIKE_STARDENT
00155   /* SStrParam is used in Ardent-like machines' fortran calls */
00156   /* for passing a string parameter */
00157   DefineStructure(SStrPar)
00158   struct SStrPar  {
00159     pstr S;
00160     int  len;
00161     int  id;
00162   };
00163 #endif
00164 
00165 #define _LVTOB(l) ((long) ((l) == 0 ? 0 : 1))  
00166 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : 1))
00167 #if defined (__OSF1__) || defined (__osf__)
00168 #undef _BTOLV
00169 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : -1))  
00170 #endif    
00171 
00172 
00173 
00174 #if  defined(CALL_LIKE_SUN)
00175 
00176   typedef pstr fpstr;
00177 
00178 #  define FTN_STR(s)  s
00179 #  define FTN_LEN(s)  s##_len
00180 
00181 #  define char_struct(s)           \
00182     pstr  s;                       \
00183     int   s##_len;
00184 #  define fill_char_struct(s,str)  \
00185     s  = str;                      \
00186     s##_len = strlen(str);
00187 #  define init_char_struct(s,str,size)  \
00188     s  = str;                      \
00189     s##_len = size;
00190 
00191 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00192     void name##_ p_sun
00193 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00194     name##_ p_sun
00195 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00196     val name##_ p_sun
00197 #elif defined(CALL_LIKE_HPUX)
00198 
00199   typedef pstr fpstr;
00200 
00201 #  define FTN_STR(s)  s
00202 #  define FTN_LEN(s)  s##_len
00203 
00204 #  define char_struct(s)  \
00205     pstr  s;              \
00206     int   s##_len;
00207 #  define fill_char_struct(s,str)  \
00208     s  = str;                      \
00209     s##_len = strlen(str);
00210 #  define init_char_struct(s,str,size)  \
00211     s  = str;                      \
00212     s##_len = size;
00213 
00214 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00215     void name p_sun
00216 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00217     name p_sun
00218 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00219     val name p_sun
00220 #elif defined(CALL_LIKE_STARDENT)
00221 
00222   typedef PStrPar fpstr;
00223 
00224 #  define FTN_STR(s)  s->Str_pointer
00225 #  define FTN_LEN(s)  s->Str_length
00226 
00227 #  define char_struct(s)           \
00228     SStrPar s;
00229 #  define fill_char_struct(s,str)  \
00230     s.S   = str;                   \
00231     s.len = strlen(FName);         \
00232     s.id  = 0;
00233 #  define init_char_struct(s,str,size)  \
00234     s.S   = str;                   \
00235     s.len = size;         \
00236     s.id  = 0;
00237 
00238 #  define FORTRAN_SUBR(NAME,name,p_send,p_sstruct,p_sflw) \
00239     void NAME p_stardent
00240 #  define FORTRAN_CALL(NAME,name,p_send,p_sstruct,p_sflw) \
00241     NAME p_stardent
00242 #  define FORTRAN_FUN(val,NAME,name,p_send,p_sstruct,p_sflw) \
00243     val NAME p_stardent
00244 
00245 #elif defined(CALL_LIKE_VMS)
00246 
00247   typedef dsc$descriptor_s * fpstr;
00248 
00249 #  define FTN_STR(s)  s->dsc$a_pointer;
00250 #  define FTN_LEN(s)  s->dsc$w_length;
00251 
00252 #  define char_struct(s)                \
00253     dsc$descriptor_s s;
00254 #  define fill_char_struct(s,str)     \
00255     s.dsc$a_pointer = str;            \
00256     s.dsc$w_length  = strlen(str);    \
00257     s.dsc$b_dtype   = DSC$K_DTYPE_T;  \
00258     s.dsc$b_class   = DSC$K_CLASS_S;
00259 #  define init_char_struct(s,str,size)     \
00260     s.dsc$a_pointer = str;            \
00261     s.dsc$w_length  = size;    \
00262     s.dsc$b_dtype   = DSC$K_DTYPE_T;  \
00263     s.dsc$b_class   = DSC$K_CLASS_S;
00264 
00265 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00266     void NAME p_stardent
00267 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00268     NAME p_stardent
00269 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00270     val NAME p_stardent
00271 
00272 #elif defined(CALL_LIKE_MVS)
00273 
00274   typedef pstr fpstr;
00275 
00276 #  define FTN_STR(s)  s
00277 #  define FTN_LEN(s)  s##_len
00278 
00279 #  define char_struct(s)  \
00280     pstr  s;              \
00281     int   s##_len;
00282 #  define fill_char_struct(s,str)  \
00283     s  = str;                      \
00284     s##_len = strlen(str);
00285 #  define init_char_struct(s,str,size)  \
00286     s  = str;                      \
00287     s##_len = size;
00288 
00289 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00290     void __stdcall NAME p_mvs
00291 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00292     NAME p_mvs
00293 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00294     val __stdcall NAME p_mvs
00295 
00296 #else
00297 
00298 #  error  Unknown machine!!!
00299 
00300   typedef pstr fpstr;
00301 
00302 #  define FTN_STR(s)  s
00303 #  define FTN_LEN(s)  s##_len
00304 
00305 #  define char_struct(s)  \
00306     pstr  s;              \
00307     int   s##_len;
00308 #  define fill_char_struct(s,str)  \
00309     s  = str;                      \
00310     s##_len = strlen(str);
00311 #  define init_char_struct(s,str,size)  \
00312     s  = str;                      \
00313     s##_len = size;
00314 
00323 #  define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
00324     void name##_ p_sun
00325 
00333 #  define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
00334     name##_ p_sun
00335 
00345 #  define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
00346     val name##_ p_sun
00347 
00348 #endif
00349 
00350 /* Define Fortran logical */
00351 typedef unsigned int ftn_logical;
00352 #if defined (KNOWN_MACHINE)
00353 #  define FORTRAN_LOGICAL_TRUE  1
00354 #  define FORTRAN_LOGICAL_FALSE 0
00355 #endif
00356 #if defined (__OSF1__) || defined (__osf__)
00357 #  undef FORTRAN_LOGICAL_TRUE
00358 #  define FORTRAN_LOGICAL_TRUE  -1
00359 #endif     
00360 
00361 char *ccp4_FtoCString(fpstr str1, int str1_len);
00362 void ccp4_CtoFString(fpstr str1, int str1_len, const char *cstring);
00363 
00364 #endif    /* __CCP4_FORTRAN */
00365 
00366 /*
00367   Local variables:
00368   mode: font-lock
00369   End:
00370 */

Generated on Wed Oct 29 21:14:36 2008 for gpp4 by  doxygen 1.4.7