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