| 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 */
|
|---|