| 1 | /*-----------------------------------------------------------------------------
 | 
|---|
| 2 | defs.h -- Various definitions
 | 
|---|
| 3 | 
 | 
|---|
| 4 | Copyright (c) 1994 JANZ Computer AG
 | 
|---|
| 5 | All Rights Reserved
 | 
|---|
| 6 | 
 | 
|---|
| 7 | Created 94/10/11 by Soenke Hansen
 | 
|---|
| 8 | Version 1.10 of 97/02/03
 | 
|---|
| 9 | 
 | 
|---|
| 10 | Basic type definitions: bytes and words.
 | 
|---|
| 11 | Conversion functions for words (16 bit unsigned).
 | 
|---|
| 12 | 
 | 
|---|
| 13 | -----------------------------------------------------------------------------*/
 | 
|---|
| 14 | 
 | 
|---|
| 15 | #ifndef defs_DEFINED
 | 
|---|
| 16 | #define defs_DEFINED
 | 
|---|
| 17 | 
 | 
|---|
| 18 | #ifdef __cplusplus
 | 
|---|
| 19 | extern "C" {
 | 
|---|
| 20 | #endif
 | 
|---|
| 21 | 
 | 
|---|
| 22 | #ifdef OS_9
 | 
|---|
| 23 | #ifdef _UCC
 | 
|---|
| 24 | #define _PARAMS(args) args
 | 
|---|
| 25 | #else
 | 
|---|
| 26 | #ifdef __STDC__
 | 
|---|
| 27 | #define _PARAMS(args) args
 | 
|---|
| 28 | #else
 | 
|---|
| 29 | #define _PARAMS(args) () 
 | 
|---|
| 30 | #endif
 | 
|---|
| 31 | #endif
 | 
|---|
| 32 | #endif
 | 
|---|
| 33 | 
 | 
|---|
| 34 | /* Function prototypes by default */
 | 
|---|
| 35 | #ifndef _PARAMS
 | 
|---|
| 36 | #define _PARAMS(args) args
 | 
|---|
| 37 | #endif
 | 
|---|
| 38 | 
 | 
|---|
| 39 | /* Use of typedef's or #define's.  Some compilers (e.g., Ultra C for OS-9)
 | 
|---|
| 40 |    don't like typedef's in prototype declarations. */
 | 
|---|
| 41 | #ifndef TYPEDEFS
 | 
|---|
| 42 | #define TYPEDEFS 1      /* default is with typedef's */
 | 
|---|
| 43 | #endif
 | 
|---|
| 44 | 
 | 
|---|
| 45 | /* Generic object type */
 | 
|---|
| 46 | #if TYPEDEFS == 1
 | 
|---|
| 47 | typedef char * OBJECT;
 | 
|---|
| 48 | #else
 | 
|---|
| 49 | #define OBJECT char *   /* known to be dangerous! */
 | 
|---|
| 50 | #endif
 | 
|---|
| 51 | #define NIL_OBJECT (OBJECT)0
 | 
|---|
| 52 | 
 | 
|---|
| 53 | /* Return values (BYTE_t) */
 | 
|---|
| 54 | #define SUCCESS            0
 | 
|---|
| 55 | #define FAILURE         0xff
 | 
|---|
| 56 | 
 | 
|---|
| 57 | /* Basic data types */
 | 
|---|
| 58 | #if TYPEDEFS == 1
 | 
|---|
| 59 | typedef unsigned char   BYTE_t;         /* 8 bit unsigned integer */
 | 
|---|
| 60 | typedef unsigned short  WORD_t;         /* 16 bit unsigned integer */
 | 
|---|
| 61 | typedef unsigned long   LWORD_t;        /* 32 bit unsigned integer */
 | 
|---|
| 62 | #else
 | 
|---|
| 63 | #define BYTE_t unsigned char
 | 
|---|
| 64 | #define WORD_t unsigned short
 | 
|---|
| 65 | #define LWORD_t unsigned long
 | 
|---|
| 66 | #endif
 | 
|---|
| 67 | 
 | 
|---|
| 68 | /* Elaborate data types */
 | 
|---|
| 69 | #ifndef OS_9
 | 
|---|
| 70 | #if TYPEDEFS == 1
 | 
|---|
| 71 | typedef void (*Funcptr)(void);          /* Having this makes life easier */
 | 
|---|
| 72 | #endif
 | 
|---|
| 73 | #endif
 | 
|---|
| 74 | 
 | 
|---|
| 75 | /* Convert between words and pairs of bytes */
 | 
|---|
| 76 | #define word_read(p, w) ((w) = ((WORD_t)(p)[0] << 8)|((WORD_t)(p)[1]))
 | 
|---|
| 77 | #define word_write(p, w) (((p)[0] = (BYTE_t)((w)>>8)), \
 | 
|---|
| 78 |                           ((p)[1] = (BYTE_t)((w)&0x00ff)))
 | 
|---|
| 79 | 
 | 
|---|
| 80 | /* Extract bytes from word */
 | 
|---|
| 81 | #define word_to_lsb(w)  ((BYTE_t)((w)&0x00ff))
 | 
|---|
| 82 | #define word_to_msb(w)  ((BYTE_t)((w)>>8))
 | 
|---|
| 83 | 
 | 
|---|
| 84 | /* Assemble bytes into word */
 | 
|---|
| 85 | #define word_from_bytes(lsb, msb) (((WORD_t)(msb) << 8)|((WORD_t)(lsb)))
 | 
|---|
| 86 | 
 | 
|---|
| 87 | /* Convert between long word and an array of 4 bytes */
 | 
|---|
| 88 | #define lword_from_bytes(b) ((LWORD_t)(b)[0] + ((LWORD_t)(b)[1] << 8) + \
 | 
|---|
| 89 |                 ((LWORD_t)(b)[2] << 16) + ((LWORD_t)(b)[3] << 24))
 | 
|---|
| 90 | #define lword_to_bytes(b, lw) do { (b)[0] = (BYTE_t)(lw); \
 | 
|---|
| 91 |         (b)[1] = (BYTE_t)(lw >> 8); (b)[2] = (BYTE_t)(lw >> 16); \
 | 
|---|
| 92 |         (b)[3] = (BYTE_t)(lw >> 24); } while (0)
 | 
|---|
| 93 | 
 | 
|---|
| 94 | 
 | 
|---|
| 95 | /* Compare 16 bit words which are assumed to have circular distance < 2^15 */
 | 
|---|
| 96 | #define word_cmp(w1, w2) ((w1) - (w2) <= 0x7fff ? ((w1) == (w2) ? 0 : 1) : (-1))
 | 
|---|
| 97 | 
 | 
|---|
| 98 | 
 | 
|---|
| 99 | #ifdef __cplusplus
 | 
|---|
| 100 | }
 | 
|---|
| 101 | #endif
 | 
|---|
| 102 | 
 | 
|---|
| 103 | #endif /* !defs_DEFINED */
 | 
|---|