home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / fchek284.zip / intrins.h < prev    next >
C/C++ Source or Header  |  1995-03-11  |  9KB  |  251 lines

  1. /* intrins.h:
  2.    List of intrinsic functions for use by find_intrinsic
  3.    and check_intrins_args.  You may add locally available intrinsics
  4.    to this list (order not important).
  5.  
  6.     Copyright (C) 1993 by Robert K. Moniot.
  7.     This program is free software.  Permission is granted to
  8.     modify it and/or redistribute it, retaining this notice.
  9.     No guarantees accompany this software.
  10.  
  11.  
  12. */
  13.  
  14.  
  15.     /* Define positional flags to allow specifying more
  16.        than one allowed type of argument for generics.
  17.      */
  18.  
  19. #define I   (1 << type_INTEGER)
  20. #define R   (1 << type_REAL)
  21. #define D   (1 << type_DP)
  22. #define C   (1 << type_COMPLEX)
  23. #define Z   (1 << type_DCOMPLEX)
  24. #define L   (1 << type_LOGICAL)
  25. #define STR (1 << type_STRING)
  26.  
  27.     /* Table contains: name, num_args, arg_type, result_type, flags.
  28.        Special num_args values are defined in symtab.h.
  29.  
  30.        Flags: I_F77 if it is in Table 5 p. 15-24, I_NONF77 otherwise
  31.           I_MIXED_ARGS if arguments are not all of same type.
  32.           I_NONPURE if arg need not have defined value (LEN).
  33.           I_C_TO_R indicates complex -> real in generic cases
  34.               (ABS,IMAG,REAL).
  35.           I_SP_R indicates specific REAL result (REAL)
  36.               I_NOTARG if it is a generic with no specific meaning,
  37.               or if it is a type conversion, lexical relationship,
  38.               or min or max (cf. p. 15-3, sec. 15.3.2)
  39.      */
  40.  
  41. {"INT",     1,    I|R|D|C|Z,type_INTEGER,    I_F77|I_NOTARG},
  42. {"IFIX",    1,    R,    type_INTEGER,    I_F77|I_NOTARG},
  43. {"IDINT",    1,    D,    type_INTEGER,    I_F77|I_NOTARG},
  44. {"REAL",    1,    I|R|D|C|Z,type_GENERIC, I_F77|I_NOTARG|I_C_TO_R|I_SP_R},
  45. {"FLOAT",    1,    I,    type_REAL,    I_F77|I_NOTARG},
  46. {"SNGL",    1,    D,    type_REAL,    I_F77|I_NOTARG},
  47. {"DBLE",    1,    I|R|D|C|Z,type_DP,    I_F77|I_NOTARG},
  48. {"CMPLX",    I_1or2,    I|R|D|C|Z,type_COMPLEX,    I_F77|I_NOTARG},
  49. {"ICHAR",    1,    STR,    type_INTEGER,    I_F77|I_NOTARG|I_ICHAR},
  50. {"CHAR",    1,    I,    type_STRING,    I_F77|I_NOTARG|I_CHAR},
  51. {"AINT",    1,    R|D,    type_GENERIC,    I_F77},
  52. {"DINT",    1,    D,    type_DP,    I_F77},
  53. {"ANINT",    1,    R|D,    type_GENERIC,    I_F77},
  54. {"DNINT",    1,    D,    type_DP,    I_F77},
  55. {"NINT",    1,    R|D,    type_INTEGER,    I_F77},
  56. {"IDNINT",    1,    D,    type_INTEGER,    I_F77},
  57. {"ABS",     1,    I|R|D|C|Z,type_GENERIC,    I_F77|I_C_TO_R|I_ABS},
  58. {"IABS",    1,    I,    type_INTEGER,    I_F77|I_ABS},
  59. {"DABS",    1,    D,    type_DP,    I_F77},
  60. {"CABS",    1,    C,    type_REAL,    I_F77},
  61. {"MOD",     2,    I|R|D,    type_GENERIC,    I_F77|I_MOD},
  62. {"AMOD",    2,    R,    type_REAL,    I_F77},
  63. {"DMOD",    2,    D,    type_DP,    I_F77},
  64. {"SIGN",    2,    I|R|D,    type_GENERIC,    I_F77|I_SIGN},
  65. {"ISIGN",    2,    I,    type_INTEGER,    I_F77|I_SIGN},
  66. {"DSIGN",    2,    D,    type_DP,    I_F77},
  67. {"DIM",        2,    I|R|D,    type_GENERIC,    I_F77|I_DIM},
  68. {"IDIM",    2,    I,    type_INTEGER,    I_F77|I_DIM},
  69. {"DDIM",    2,    D,    type_DP,    I_F77},
  70. {"DPROD",    2,    R,    type_DP,    I_F77},
  71. {"MAX",        I_2up,    I|R|D,    type_GENERIC,    I_F77|I_NOTARG|I_MAX},
  72. {"MAX0",    I_2up,    I,    type_INTEGER,    I_F77|I_NOTARG|I_MAX},
  73. {"AMAX1",    I_2up,    R,    type_REAL,    I_F77|I_NOTARG},
  74. {"DMAX1",    I_2up,    D,    type_DP,    I_F77|I_NOTARG},
  75. {"AMAX0",    I_2up,    I,    type_REAL,    I_F77|I_NOTARG},
  76. {"MAX1",    I_2up,    R,    type_INTEGER,    I_F77|I_NOTARG},
  77. {"MIN",     I_2up,    I|R|D,    type_GENERIC,    I_F77|I_NOTARG|I_MIN},
  78. {"MIN0",    I_2up,    I,    type_INTEGER,    I_F77|I_NOTARG|I_MIN},
  79. {"AMIN1",    I_2up,    R,    type_REAL,    I_F77|I_NOTARG},
  80. {"DMIN1",    I_2up,    D,    type_DP,    I_F77|I_NOTARG},
  81. {"AMIN0",    I_2up,    I,    type_REAL,    I_F77|I_NOTARG},
  82. {"MIN1",    I_2up,    R,    type_INTEGER,    I_F77|I_NOTARG},
  83. {"LEN",     1,    STR,    type_INTEGER,    I_F77|I_LEN},
  84. {"INDEX",    2,    STR,    type_INTEGER,    I_F77|I_INDEX},
  85. {"AIMAG",    1,    C,    type_REAL,    I_F77},
  86. {"CONJG",    1,    C,    type_COMPLEX,    I_F77},
  87. {"SQRT",    1,    R|D|C|Z,type_GENERIC,    I_F77},
  88. {"DSQRT",    1,    D,    type_DP,    I_F77},
  89. {"CSQRT",    1,    C,    type_COMPLEX,    I_F77},
  90. {"EXP",        1,    R|D|C|Z,type_GENERIC,    I_F77},
  91. {"DEXP",    1,    D,    type_DP,    I_F77},
  92. {"CEXP",    1,    C,    type_COMPLEX,    I_F77},
  93. {"LOG",     1,    R|D|C|Z,type_GENERIC,    I_F77|I_NOTARG},
  94. {"ALOG",    1,    R,    type_REAL,    I_F77},
  95. {"DLOG",    1,    D,    type_DP,    I_F77},
  96. {"CLOG",    1,    C,    type_COMPLEX,    I_F77},
  97. {"LOG10",    1,    R|D,    type_GENERIC,    I_F77|I_NOTARG},
  98. {"ALOG10",    1,    R,    type_REAL,    I_F77},
  99. {"DLOG10",    1,    D,    type_DP,    I_F77},
  100. {"SIN",     1,    R|D|C|Z,type_GENERIC,    I_F77},
  101. {"DSIN",    1,    D,    type_DP,    I_F77},
  102. {"CSIN",    1,    C,    type_COMPLEX,    I_F77},
  103. {"COS",     1,    R|D|C|Z,type_GENERIC,    I_F77},
  104. {"DCOS",    1,    D,    type_DP,    I_F77},
  105. {"CCOS",    1,    C,    type_COMPLEX,    I_F77},
  106. {"TAN",     1,    R|D,    type_GENERIC,    I_F77},
  107. {"DTAN",    1,    D,    type_DP,    I_F77},
  108. {"ASIN",    1,    R|D,    type_GENERIC,    I_F77},
  109. {"DASIN",    1,    D,    type_DP,    I_F77},
  110. {"ACOS",    1,    R|D,    type_GENERIC,    I_F77},
  111. {"DACOS",    1,    D,    type_DP,    I_F77},
  112. {"ATAN",    1,    R|D,    type_GENERIC,    I_F77},
  113. {"DATAN",    1,    D,    type_DP,    I_F77},
  114. {"ATAN2",    2,    R|D,    type_GENERIC,    I_F77},
  115. {"DATAN2",    2,    D,    type_DP,    I_F77},
  116. {"SINH",    1,    R|D,    type_GENERIC,    I_F77},
  117. {"DSINH",    1,    D,    type_DP,    I_F77},
  118. {"COSH",    1,    R|D,    type_GENERIC,    I_F77},
  119. {"DCOSH",    1,    D,    type_DP,    I_F77},
  120. {"TANH",    1,    R|D,    type_GENERIC,    I_F77},
  121. {"DTANH",    1,    D,    type_DP,    I_F77},
  122. {"LGE",     2,    STR,    type_LOGICAL,    I_F77|I_NOTARG},
  123. {"LGT",     2,    STR,    type_LOGICAL,    I_F77|I_NOTARG},
  124. {"LLE",     2,    STR,    type_LOGICAL,    I_F77|I_NOTARG},
  125. {"LLT",     2,    STR,    type_LOGICAL,    I_F77|I_NOTARG},
  126.  
  127.         /* DOUBLE COMPLEX intrinsics are included regardless
  128.            of NONSTD_INTRINSICS option, since they are essential
  129.            to support of this datatype.
  130.          */
  131. {"DCMPLX",    I_1or2,    I|R|D|C|Z,type_DCOMPLEX,I_NONF77|I_NOTARG},
  132. {"DCONJG",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  133. {"DIMAG",    1,    Z,    type_DP,    I_NONF77},
  134. {"IMAG",    1,    C|Z,    type_GENERIC,    I_NONF77|I_NOTARG|I_C_TO_R},
  135. {"DREAL",    1,    Z,    type_DP,    I_NONF77},
  136. {"CDABS",    1,    Z,    type_DP,    I_NONF77},
  137. {"ZABS",    1,    Z,    type_DP,    I_NONF77},
  138. {"CDSQRT",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  139. {"ZSQRT",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  140. {"CDEXP",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  141. {"ZEXP",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  142. {"CDLOG",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  143. {"ZLOG",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  144. {"CDSIN",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  145. {"ZSIN",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  146. {"CDCOS",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  147. {"ZCOS",    1,    Z,    type_DCOMPLEX,    I_NONF77},
  148.  
  149.         /* DFLOAT has been available in almost all Fortran
  150.                    implementations for decades, but curiously, was
  151.                    omitted from the Fortran 66 and Fortran 77
  152.                    standards.  A separate intrinsic is essential,
  153.                    because DBLE(FLOAT()) will lose bits for integer
  154.                    arguments larger than the REAL fraction size.  If
  155.                    we don't include it here, declaration file output
  156.                    will incorrectly type it as REAL instead of DOUBLE
  157.                    PRECISION. */
  158.  
  159. {"DFLOAT",    1,    I,    type_DP,    I_NONF77},
  160.  
  161.  
  162. #ifdef NONSTD_INTRINSICS
  163.  
  164.     /* Nonstandard but widely used intrinsics.  These follow both
  165.        VMS and AIX defns, so they are probably de facto standard.
  166.        Not included: specifics covered by a generic.
  167.        N.B. Argument checking is not tight for these: some
  168.        take arrays, 0 or 1 arguments, etc. that are not
  169.        handled by check_intrins_args().  Remarks are placed by
  170.        these cases.
  171.      */
  172.  
  173.  
  174.         /* Bit test & Shift operations */
  175. {"BTEST",    2,    I,    type_LOGICAL,    I_NONF77},
  176. {"IAND",    2,    I,    type_INTEGER,    I_NONF77},
  177. {"IOR",        2,    I,    type_INTEGER,    I_NONF77},
  178. {"IBSET",    2,    I,    type_INTEGER,    I_NONF77},
  179. {"IBCLR",    2,    I,    type_INTEGER,    I_NONF77},
  180. {"IBITS",    3,    I,    type_INTEGER,    I_NONF77},
  181. {"IEOR",    2,    I,    type_INTEGER,    I_NONF77},
  182. {"ISHFT",    2,    I,    type_INTEGER,    I_NONF77},
  183. {"ISHFTC",    3,    I,    type_INTEGER,    I_NONF77},
  184. {"NOT",        1,    I,    type_INTEGER,    I_NONF77},
  185.  
  186.         /* Address-of function */
  187. {"LOC",        1,I|R|D|C|Z|L|STR,type_INTEGER,    I_NONF77},
  188.  
  189.         /* Utility routines */
  190. {"EXIT",       I_0or1,    I,    type_SUBROUTINE,I_NONF77},
  191. #endif
  192.  
  193.         /* Unix only.  These are a selected subset of the I_F77
  194.            library routines listed in the USENIX manual section 3F.
  195.          */
  196. #ifdef UNIX_INTRINSICS
  197. {"ABORT",    1,    STR,    type_SUBROUTINE,I_NONF77},
  198. {"AND",        2,    I,    type_INTEGER,    I_NONF77},
  199.         /* I, then STR not enforced in GETARG. */
  200. {"GETARG",    2,    I|STR,    type_SUBROUTINE,I_MIXED_ARGS|I_NONF77},
  201. {"GETENV",    2,    STR,    type_SUBROUTINE,I_NONF77},
  202. {"GMTIME",    2,    I,    type_SUBROUTINE,I_NONF77},/*2nd arg array(9)*/
  203. #ifdef IARGC_NO_ARG
  204. {"IARGC",    0,    0,    type_INTEGER,    I_NONF77},
  205. #else
  206. #ifdef IARGC_ONE_ARG
  207. {"IARGC",    1,    I,    type_INTEGER,    I_NONF77},
  208. #else  /* default is to allow 0 or 1 */
  209. {"IARGC",    I_0or1,    I,    type_INTEGER,    I_NONF77},
  210. #endif
  211. #endif
  212. {"LSHIFT",    2,    I,    type_INTEGER,    I_NONF77},
  213. {"LTIME",    2,    I,    type_SUBROUTINE,I_NONF77},/*2nd arg array(9)*/
  214. {"OR",        2,    I,    type_INTEGER,    I_NONF77},
  215. #ifdef RAND_NO_ARG    /*RAND() form*/
  216. {"IRAND",    0,    0,    type_INTEGER,    I_NONF77},
  217. {"RAND",    0,    0,    type_REAL,    I_NONF77},
  218. #else
  219. #ifdef RAND_ONE_ARG    /*RAND(ISEED) form*/
  220. {"IRAND",    1,    I,    type_INTEGER,    I_NONF77|I_NONPURE},
  221. {"RAND",    1,    I,    type_REAL,    I_NONF77|I_NONPURE},
  222. #else                /* Allow either form */
  223. {"IRAND",    I_0or1,    I,    type_INTEGER,    I_NONF77|I_NONPURE},
  224. {"RAND",    I_0or1,    I,    type_REAL,    I_NONF77|I_NONPURE},
  225. #endif
  226. #endif
  227. {"RSHIFT",    2,    I,    type_INTEGER,    I_NONF77},
  228. {"SRAND",    1,    I|R,    type_SUBROUTINE,I_NONF77},/*AIX has this*/
  229. {"SYSTEM",    1,    STR,    type_SUBROUTINE,I_NONF77},
  230. {"TIME",    I_0or1,    I,    type_INTEGER,    I_NONF77},
  231. {"XOR",        2,    I,    type_INTEGER,    I_NONF77},
  232. #endif
  233.  
  234. #ifdef VMS_INTRINSICS        /* VMS only */
  235. {"DATE",    1,    STR,    type_SUBROUTINE,I_NONF77},
  236. {"ERRSNS",    5,    I,    type_SUBROUTINE,I_NONF77},
  237. {"IDATE",    3,    I,    type_SUBROUTINE,I_NONF77},
  238. {"RAN",        1,    I,    type_REAL,    I_NONF77|I_NONPURE},
  239. {"SECNDS",    1,    R,    type_REAL,    I_NONF77},
  240. {"SIZEOF",    1,    I|R|D|C|Z|L|STR,type_INTEGER,    I_NONF77},
  241. {"TIME",    1,    STR,    type_SUBROUTINE,I_NONF77},
  242. #endif
  243.  
  244. #undef I
  245. #undef R
  246. #undef D
  247. #undef C
  248. #undef Z
  249. #undef L
  250. #undef STR
  251.