gpp4
1.3.1
|
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 3 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Lesser General Public License for more details. 00015 00016 You should have received a copy of the GNU Lesser General Public 00017 License along with This library. If not, see 00018 <http://www.gnu.org/licenses/>. 00019 00020 */ 00021 00030 #ifndef __CCP4_FORTRAN 00031 #define __CCP4_FORTRAN 00032 00033 #include "ccp4_types.h" 00034 00035 /* stardent is now obsolete, but we retain this category in case it is useful later */ 00036 #ifdef CALL_LIKE_STARDENT 00037 /* SStrParam is used in Ardent-like machines' fortran calls */ 00038 /* for passing a string parameter */ 00039 DefineStructure(SStrPar) 00040 struct SStrPar { 00041 pstr S; 00042 int len; 00043 int id; 00044 }; 00045 #endif 00046 00047 #define _LVTOB(l) ((long) ((l) == 0 ? 0 : 1)) 00048 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : 1)) 00049 #if defined (__OSF1__) || defined (__osf__) 00050 #undef _BTOLV 00051 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : -1)) 00052 #endif 00053 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 #if (CALL_LIKE_MVS == 2) 00275 00276 typedef pstr fpstr; 00277 00278 #define FTN_STR(s) s 00279 #define FTN_LEN(s) s##_len 00280 00281 #define char_struct(s) \ 00282 pstr s; \ 00283 int s##_len; 00284 #define fill_char_struct(s,str) \ 00285 s = str; \ 00286 s##_len = strlen(str); 00287 #define init_char_struct(s,str,size) \ 00288 s = str; \ 00289 s##_len = size; 00290 00291 #define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \ 00292 void NAME p_sun 00293 #define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \ 00294 NAME p_sun 00295 #define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \ 00296 val NAME p_sun 00297 00298 #else 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 00315 # define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \ 00316 void __stdcall NAME p_mvs 00317 # define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \ 00318 NAME p_mvs 00319 # define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \ 00320 val __stdcall NAME p_mvs 00321 00322 # endif 00323 00324 #else 00325 00326 # error Unknown machine!!! 00327 00328 typedef pstr fpstr; 00329 00330 # define FTN_STR(s) s 00331 # define FTN_LEN(s) s##_len 00332 00333 # define char_struct(s) \ 00334 pstr s; \ 00335 int s##_len; 00336 # define fill_char_struct(s,str) \ 00337 s = str; \ 00338 s##_len = strlen(str); 00339 # define init_char_struct(s,str,size) \ 00340 s = str; \ 00341 s##_len = size; 00342 00351 # define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \ 00352 void name##_ p_sun 00353 00361 # define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \ 00362 name##_ p_sun 00363 00373 # define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \ 00374 val name##_ p_sun 00375 00376 #endif 00377 00378 /* Define Fortran logical */ 00379 typedef unsigned int ftn_logical; 00380 #if defined (KNOWN_MACHINE) 00381 # define FORTRAN_LOGICAL_TRUE 1 00382 # define FORTRAN_LOGICAL_FALSE 0 00383 #endif 00384 #if defined (__OSF1__) || defined (__osf__) 00385 # undef FORTRAN_LOGICAL_TRUE 00386 # define FORTRAN_LOGICAL_TRUE -1 00387 #endif 00388 00389 char *ccp4_FtoCString(fpstr str1, int str1_len); 00390 void ccp4_CtoFString(fpstr str1, int str1_len, const char *cstring); 00391 00392 #endif /* __CCP4_FORTRAN */ 00393 00394 /* 00395 Local variables: 00396 mode: font-lock 00397 End: 00398 */