home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / f2csrc.zip / f2csrc / src / defines.h < prev    next >
C/C++ Source or Header  |  1994-01-25  |  9KB  |  297 lines

  1. #define PDP11 4
  2.  
  3. #define BIGGEST_CHAR    0x7f        /* Assumes 32-bit arithmetic */
  4. #define BIGGEST_SHORT    0x7fff        /* Assumes 32-bit arithmetic */
  5. #define BIGGEST_LONG    0x7fffffff    /* Assumes 32-bit arithmetic */
  6.  
  7. #define M(x) (1<<x)    /* Mask (x) returns 2^x */
  8.  
  9. #define ALLOC(x)    (struct x *) ckalloc((int)sizeof(struct x))
  10. #define ALLEXPR        (expptr) ckalloc((int)sizeof(union Expression) )
  11. typedef int *ptr;
  12. typedef char *charptr;
  13. typedef FILE *FILEP;
  14. typedef int flag;
  15. typedef char field;    /* actually need only 4 bits */
  16. typedef long int ftnint;
  17. #define LOCAL static
  18.  
  19. #define NO 0
  20. #define YES 1
  21.  
  22. #define CNULL (char *) 0    /* Character string null */
  23. #define PNULL (ptr) 0
  24. #define CHNULL (chainp) 0    /* Chain null */
  25. #define ENULL (expptr) 0
  26.  
  27.  
  28. /* BAD_MEMNO - used to distinguish between long string constants and other
  29.    constants in the table */
  30.  
  31. #define BAD_MEMNO -32768
  32.  
  33.  
  34. /* block tag values -- syntactic stuff */
  35.  
  36. #define TNAME 1
  37. #define TCONST 2
  38. #define TEXPR 3
  39. #define TADDR 4
  40. #define TPRIM 5        /* Primitive datum - should not appear in an
  41.                expptr variable, it should have already been
  42.                identified */
  43. #define TLIST 6
  44. #define TIMPLDO 7
  45. #define TERROR 8
  46.  
  47.  
  48. /* parser states - order is important, since there are several tests for
  49.    state < INDATA   */
  50.  
  51. #define OUTSIDE 0
  52. #define INSIDE 1
  53. #define INDCL 2
  54. #define INDATA 3
  55. #define INEXEC 4
  56.  
  57. /* procedure classes */
  58.  
  59. #define PROCMAIN 1
  60. #define PROCBLOCK 2
  61. #define PROCSUBR 3
  62. #define PROCFUNCT 4
  63.  
  64.  
  65. /* storage classes -- vstg values.  BSS and INIT are used in the later
  66.    merge pass over identifiers; and they are entered differently into the
  67.    symbol table */
  68.  
  69. #define STGUNKNOWN 0
  70. #define STGARG 1    /* adjustable dimensions */
  71. #define STGAUTO 2    /* for stack references */
  72. #define STGBSS 3    /* uninitialized storage (normal variables) */
  73. #define STGINIT 4    /* initialized storage */
  74. #define STGCONST 5
  75. #define STGEXT 6    /* external storage */
  76. #define STGINTR 7    /* intrinsic (late decision) reference.  See
  77.                chapter 5 of the Fortran 77 standard */
  78. #define STGSTFUNCT 8
  79. #define STGCOMMON 9
  80. #define STGEQUIV 10
  81. #define STGREG 11    /* register - the outermost DO loop index will be
  82.                in a register (because the compiler is one
  83.                pass, it can't know where the innermost loop is
  84.                */
  85. #define STGLENG 12
  86. #define STGNULL 13
  87. #define STGMEMNO 14    /* interemediate-file pointer to constant table */
  88.  
  89. /* name classes -- vclass values, also   procclass   values */
  90.  
  91. #define CLUNKNOWN 0
  92. #define CLPARAM 1    /* Parameter - macro definition */
  93. #define CLVAR 2        /* variable */
  94. #define CLENTRY 3
  95. #define CLMAIN 4
  96. #define CLBLOCK 5
  97. #define CLPROC 6
  98. #define CLNAMELIST 7    /* in data with this tag, the   vdcldone   flag should
  99.                be ignored (according to vardcl()) */
  100.  
  101.  
  102. /* vprocclass values -- there is some overlap with the vclass values given
  103.    above */
  104.  
  105. #define PUNKNOWN 0
  106. #define PEXTERNAL 1
  107. #define PINTRINSIC 2
  108. #define PSTFUNCT 3
  109. #define PTHISPROC 4    /* here to allow recursion - further distinction
  110.                is given in the CL tag (those just above).
  111.                This applies to the presence of the name of a
  112.                function used within itself.  The function name
  113.                means either call the function again, or assign
  114.                some value to the storage allocated to the
  115.                function's return value. */
  116.  
  117. /* control stack codes - these are part of a state machine which handles
  118.    the nesting of blocks (i.e. what to do about the ELSE statement) */
  119.  
  120. #define CTLDO 1
  121. #define CTLIF 2
  122. #define CTLELSE 3
  123. #define CTLIFX 4
  124.  
  125.  
  126. /* operators for both Fortran input and C output.  They are common because
  127.    so many are shared between the trees */
  128.  
  129. #define OPPLUS 1
  130. #define OPMINUS 2
  131. #define OPSTAR 3
  132. #define OPSLASH 4
  133. #define OPPOWER 5
  134. #define OPNEG 6
  135. #define OPOR 7
  136. #define OPAND 8
  137. #define OPEQV 9
  138. #define OPNEQV 10
  139. #define OPNOT 11
  140. #define OPCONCAT 12
  141. #define OPLT 13
  142. #define OPEQ 14
  143. #define OPGT 15
  144. #define OPLE 16
  145. #define OPNE 17
  146. #define OPGE 18
  147. #define OPCALL 19
  148. #define OPCCALL 20
  149. #define OPASSIGN 21
  150. #define OPPLUSEQ 22
  151. #define OPSTAREQ 23
  152. #define OPCONV 24
  153. #define OPLSHIFT 25
  154. #define OPMOD 26
  155. #define OPCOMMA 27
  156. #define OPQUEST 28
  157. #define OPCOLON 29
  158. #define OPABS 30
  159. #define OPMIN 31
  160. #define OPMAX 32
  161. #define OPADDR 33
  162. #define OPCOMMA_ARG 34
  163. #define OPBITOR 35
  164. #define OPBITAND 36
  165. #define OPBITXOR 37
  166. #define OPBITNOT 38
  167. #define OPRSHIFT 39
  168. #define OPWHATSIN 40        /* dereferencing operator */
  169. #define OPMINUSEQ 41        /* assignment operators */
  170. #define OPSLASHEQ 42
  171. #define OPMODEQ 43
  172. #define OPLSHIFTEQ 44
  173. #define OPRSHIFTEQ 45
  174. #define OPBITANDEQ 46
  175. #define OPBITXOREQ 47
  176. #define OPBITOREQ 48
  177. #define OPPREINC 49        /* Preincrement (++x) operator */
  178. #define OPPREDEC 50        /* Predecrement (--x) operator */
  179. #define OPDOT 51        /* structure field reference */
  180. #define OPARROW 52        /* structure pointer field reference */
  181. #define OPNEG1 53        /* simple negation under forcedouble */
  182. #define OPDMIN 54        /* min(a,b) macro under forcedouble */
  183. #define OPDMAX 55        /* max(a,b) macro under forcedouble */
  184. #define OPASSIGNI 56        /* assignment for inquire stmt */
  185. #define OPIDENTITY 57        /* for turning TADDR into TEXPR */
  186. #define OPCHARCAST 58        /* for casting to char * (in I/O stmts) */
  187. #define OPDABS 59        /* abs macro under forcedouble */
  188. #define OPMIN2 60        /* min(a,b) macro */
  189. #define OPMAX2 61        /* max(a,b) macro */
  190.  
  191. /* label type codes -- used with the ASSIGN statement */
  192.  
  193. #define LABUNKNOWN 0
  194. #define LABEXEC 1
  195. #define LABFORMAT 2
  196. #define LABOTHER 3
  197.  
  198.  
  199. /* INTRINSIC function codes*/
  200.  
  201. #define INTREND 0
  202. #define INTRCONV 1
  203. #define INTRMIN 2
  204. #define INTRMAX 3
  205. #define INTRGEN 4    /* General intrinsic, e.g. cos v. dcos, zcos, ccos */
  206. #define INTRSPEC 5
  207. #define INTRBOOL 6
  208. #define INTRCNST 7    /* constants, e.g. bigint(1.0) v. bigint (1d0) */
  209.  
  210.  
  211. /* I/O statement codes - these all form Integer Constants, and are always
  212.    reevaluated */
  213.  
  214. #define IOSTDIN ICON(5)
  215. #define IOSTDOUT ICON(6)
  216. #define IOSTDERR ICON(0)
  217.  
  218. #define IOSBAD (-1)
  219. #define IOSPOSITIONAL 0
  220. #define IOSUNIT 1
  221. #define IOSFMT 2
  222.  
  223. #define IOINQUIRE 1
  224. #define IOOPEN 2
  225. #define IOCLOSE 3
  226. #define IOREWIND 4
  227. #define IOBACKSPACE 5
  228. #define IOENDFILE 6
  229. #define IOREAD 7
  230. #define IOWRITE 8
  231.  
  232.  
  233. /* User name tags -- these identify the form of the original identifier
  234.    stored in a   struct Addrblock   structure (in the   user   field). */
  235.  
  236. #define UNAM_UNKNOWN 0        /* Not specified */
  237. #define UNAM_NAME 1        /* Local symbol, store in the hash table */
  238. #define UNAM_IDENT 2        /* Character string not stored elsewhere */
  239. #define UNAM_EXTERN 3        /* External reference; check symbol table
  240.                    using   memno   as index */
  241. #define UNAM_CONST 4        /* Constant value */
  242. #define UNAM_CHARP 5        /* pointer to string */
  243. #define UNAM_REF 6        /* subscript reference with -s */
  244.  
  245.  
  246. #define IDENT_LEN 31        /* Maximum length user.ident */
  247.  
  248. /* type masks - TYLOGICAL defined in   ftypes   */
  249.  
  250. #define MSKLOGICAL    M(TYLOGICAL)|M(TYLOGICAL1)|M(TYLOGICAL2)
  251. #define MSKADDR    M(TYADDR)
  252. #define MSKCHAR    M(TYCHAR)
  253. #ifdef TYQUAD
  254. #define MSKINT    M(TYINT1)|M(TYSHORT)|M(TYLONG)|M(TYQUAD)
  255. #else
  256. #define MSKINT    M(TYINT1)|M(TYSHORT)|M(TYLONG)
  257. #endif
  258. #define MSKREAL    M(TYREAL)|M(TYDREAL)    /* DREAL means Double Real */
  259. #define MSKCOMPLEX    M(TYCOMPLEX)|M(TYDCOMPLEX)
  260. #define MSKSTATIC (M(STGINIT)|M(STGBSS)|M(STGCOMMON)|M(STGEQUIV)|M(STGCONST))
  261.  
  262. /* miscellaneous macros */
  263.  
  264. /* ONEOF (x, y) -- x is the number of one of the OR'ed masks in y (i.e., x is
  265.    the log of one of the OR'ed masks in y) */
  266.  
  267. #define ONEOF(x,y) (M(x) & (y))
  268. #define ISCOMPLEX(z) ONEOF(z, MSKCOMPLEX)
  269. #define ISREAL(z) ONEOF(z, MSKREAL)
  270. #define ISNUMERIC(z) ONEOF(z, MSKINT|MSKREAL|MSKCOMPLEX)
  271. #define ISICON(z) (z->tag==TCONST && ISINT(z->constblock.vtype))
  272. #define ISLOGICAL(z) ONEOF(z, MSKLOGICAL)
  273.  
  274. /* ISCHAR assumes that   z   has some kind of structure, i.e. is not null */
  275.  
  276. #define ISCHAR(z) (z->headblock.vtype==TYCHAR)
  277. #define ISINT(z)   ONEOF(z, MSKINT)    /*   z   is a tag, i.e. a mask number */
  278. #define ISCONST(z) (z->tag==TCONST)
  279. #define ISERROR(z) (z->tag==TERROR)
  280. #define ISPLUSOP(z) (z->tag==TEXPR && z->exprblock.opcode==OPPLUS)
  281. #define ISSTAROP(z) (z->tag==TEXPR && z->exprblock.opcode==OPSTAR)
  282. #define ISONE(z) (ISICON(z) && z->constblock.Const.ci==1)
  283. #define INT(z) ONEOF(z, MSKINT|MSKCHAR)    /* has INT storage in real life */
  284. #define ICON(z) mkintcon( (ftnint)(z) )
  285.  
  286. /* NO66 -- F77 feature is being used
  287.    NOEXT -- F77 extension is being used */
  288.  
  289. #define NO66(s)    if(no66flag) err66(s)
  290. #define NOEXT(s)    if(noextflag) errext(s)
  291.  
  292. /* round a up to the nearest multiple of b:
  293.  
  294.    a = b * floor ( (a + (b - 1)) / b )*/
  295.  
  296. #define roundup(a,b)    ( b * ( (a+b-1)/b) )
  297.