gpp4  1.3.1
ccp4_fortran.h
Go to the documentation of this file.
1 /*
2  ccp4_fortran.h: header file for Fortran APIs
3  Copyright (C) 2001 Eugene Krissinel
4  Copyright (C) 2007 Morten Kjeldgaard
5 
6  This library is free software: you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation, either
9  version 3 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with This library. If not, see
18  <http://www.gnu.org/licenses/>.
19 
20 */
21 
30 #ifndef __CCP4_FORTRAN
31 #define __CCP4_FORTRAN
32 
33 #include "ccp4_types.h"
34 
35 /* stardent is now obsolete, but we retain this category in case it is useful later */
36 #ifdef CALL_LIKE_STARDENT
37  /* SStrParam is used in Ardent-like machines' fortran calls */
38  /* for passing a string parameter */
39  DefineStructure(SStrPar)
40  struct SStrPar {
41  pstr S;
42  int len;
43  int id;
44  };
45 #endif
46 
47 #define _LVTOB(l) ((long) ((l) == 0 ? 0 : 1))
48 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : 1))
49 #if defined (__OSF1__) || defined (__osf__)
50 #undef _BTOLV
51 #define _BTOLV(l) ((int) ((l) == 0 ? 0 : -1))
52 #endif
53 
174 #if defined(CALL_LIKE_SUN)
175 
176  typedef pstr fpstr;
177 
178 #define FTN_STR(s) s
179 #define FTN_LEN(s) s##_len
180 
181 #define char_struct(s) \
182  pstr s; \
183  int s##_len;
184 #define fill_char_struct(s,str) \
185  s = str; \
186  s##_len = strlen(str);
187 #define init_char_struct(s,str,size) \
188  s = str; \
189  s##_len = size;
190 
191 #define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
192  void name##_ p_sun
193 #define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
194  name##_ p_sun
195 #define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
196  val name##_ p_sun
197 #elif defined(CALL_LIKE_HPUX)
198 
199  typedef pstr fpstr;
200 
201 # define FTN_STR(s) s
202 # define FTN_LEN(s) s##_len
203 
204 # define char_struct(s) \
205  pstr s; \
206  int s##_len;
207 # define fill_char_struct(s,str) \
208  s = str; \
209  s##_len = strlen(str);
210 # define init_char_struct(s,str,size) \
211  s = str; \
212  s##_len = size;
213 
214 # define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
215  void name p_sun
216 # define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
217  name p_sun
218 # define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
219  val name p_sun
220 #elif defined(CALL_LIKE_STARDENT)
221 
222  typedef PStrPar fpstr;
223 
224 # define FTN_STR(s) s->Str_pointer
225 # define FTN_LEN(s) s->Str_length
226 
227 # define char_struct(s) \
228  SStrPar s;
229 # define fill_char_struct(s,str) \
230  s.S = str; \
231  s.len = strlen(FName); \
232  s.id = 0;
233 # define init_char_struct(s,str,size) \
234  s.S = str; \
235  s.len = size; \
236  s.id = 0;
237 
238 # define FORTRAN_SUBR(NAME,name,p_send,p_sstruct,p_sflw) \
239  void NAME p_stardent
240 # define FORTRAN_CALL(NAME,name,p_send,p_sstruct,p_sflw) \
241  NAME p_stardent
242 # define FORTRAN_FUN(val,NAME,name,p_send,p_sstruct,p_sflw) \
243  val NAME p_stardent
244 
245 #elif defined(CALL_LIKE_VMS)
246 
247  typedef dsc$descriptor_s * fpstr;
248 
249 # define FTN_STR(s) s->dsc$a_pointer;
250 # define FTN_LEN(s) s->dsc$w_length;
251 
252 # define char_struct(s) \
253  dsc$descriptor_s s;
254 # define fill_char_struct(s,str) \
255  s.dsc$a_pointer = str; \
256  s.dsc$w_length = strlen(str); \
257  s.dsc$b_dtype = DSC$K_DTYPE_T; \
258  s.dsc$b_class = DSC$K_CLASS_S;
259 # define init_char_struct(s,str,size) \
260  s.dsc$a_pointer = str; \
261  s.dsc$w_length = size; \
262  s.dsc$b_dtype = DSC$K_DTYPE_T; \
263  s.dsc$b_class = DSC$K_CLASS_S;
264 
265 # define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
266  void NAME p_stardent
267 # define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
268  NAME p_stardent
269 # define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
270  val NAME p_stardent
271 
272 #elif defined(CALL_LIKE_MVS)
273 
274 #if (CALL_LIKE_MVS == 2)
275 
276  typedef pstr fpstr;
277 
278 #define FTN_STR(s) s
279 #define FTN_LEN(s) s##_len
280 
281 #define char_struct(s) \
282  pstr s; \
283  int s##_len;
284 #define fill_char_struct(s,str) \
285  s = str; \
286  s##_len = strlen(str);
287 #define init_char_struct(s,str,size) \
288  s = str; \
289  s##_len = size;
290 
291 #define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
292  void NAME p_sun
293 #define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
294  NAME p_sun
295 #define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
296  val NAME p_sun
297 
298 #else
299 
300  typedef pstr fpstr;
301 
302 # define FTN_STR(s) s
303 # define FTN_LEN(s) s##_len
304 
305 # define char_struct(s) \
306  pstr s; \
307  int s##_len;
308 # define fill_char_struct(s,str) \
309  s = str; \
310  s##_len = strlen(str);
311 # define init_char_struct(s,str,size) \
312  s = str; \
313  s##_len = size;
314 
315 # define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
316  void __stdcall NAME p_mvs
317 # define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
318  NAME p_mvs
319 # define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
320  val __stdcall NAME p_mvs
321 
322 # endif
323 
324 #else
325 
326 # error Unknown machine!!!
327 
328  typedef pstr fpstr;
329 
330 # define FTN_STR(s) s
331 # define FTN_LEN(s) s##_len
332 
333 # define char_struct(s) \
334  pstr s; \
335  int s##_len;
336 # define fill_char_struct(s,str) \
337  s = str; \
338  s##_len = strlen(str);
339 # define init_char_struct(s,str,size) \
340  s = str; \
341  s##_len = size;
342 
351 # define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
352  void name##_ p_sun
353 
361 # define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
362  name##_ p_sun
363 
373 # define FORTRAN_FUN(val,NAME,name,p_sun,p_stardent,p_mvs) \
374  val name##_ p_sun
375 
376 #endif
377 
378 /* Define Fortran logical */
379 typedef unsigned int ftn_logical;
380 #if defined (KNOWN_MACHINE)
381 # define FORTRAN_LOGICAL_TRUE 1
382 # define FORTRAN_LOGICAL_FALSE 0
383 #endif
384 #if defined (__OSF1__) || defined (__osf__)
385 # undef FORTRAN_LOGICAL_TRUE
386 # define FORTRAN_LOGICAL_TRUE -1
387 #endif
388 
389 char *ccp4_FtoCString(fpstr str1, int str1_len);
390 void ccp4_CtoFString(fpstr str1, int str1_len, const char *cstring);
391 
392 #endif /* __CCP4_FORTRAN */
393 
394 /*
395  Local variables:
396  mode: font-lock
397  End:
398 */
Header file containing various commonly used type definitions and some useful macros.
pstr fpstr
Definition: ccp4_fortran.h:328
void ccp4_CtoFString(fpstr str1, int str1_len, const char *cstring)
Definition: library_f.c:71
char * ccp4_FtoCString(fpstr str1, int str1_len)
Definition: library_f.c:50