Pointers - Applied function ptr patch from Steve Tell. Fixed bugs with
[fw/sdcc] / src / regression / pointer1.c
1 #define __16F873
2 #include "p16f873.h"
3
4 // Pointer tests
5
6 unsigned char success = 0;
7 unsigned char failures = 0;
8 unsigned char dummy = 0;
9
10 bit bit0 = 0;
11 unsigned int aint0 = 0;
12 unsigned int aint1 = 0;
13 unsigned char achar0 = 0;
14 unsigned char achar1 = 0;
15 unsigned char *acharP = 0;
16
17 char buff[10];
18
19 void
20 done ()
21 {
22
23   dummy++;
24
25 }
26
27 void
28 f1 (unsigned char *ucP)
29 {
30
31   if (ucP == 0)
32     {
33       failures++;
34       return;
35     }
36
37   if (*ucP)
38     failures++;
39 }
40
41 void
42 f2 (unsigned int *uiP)
43 {
44
45   if (uiP == 0)
46     {
47       failures++;
48       return;
49     }
50
51   if (*uiP)
52     failures++;
53
54 }
55
56
57 unsigned char *
58 f3 (void)
59 {
60
61   return &achar0;
62 }
63
64
65 void f4(unsigned char *ucP, unsigned char uc)
66 {
67
68   if(!ucP) {
69     failures++;
70     return;
71   }
72
73   if(*ucP != uc)
74     failures++;
75
76 }
77
78 void init_array(char start_value)
79 {
80   unsigned char c;
81
82   for(c=0; c<sizeof(buff); c++)
83     buff[c] = start_value++;
84
85 }
86
87 void check_array(char base_value)
88 {
89   unsigned char c;
90
91   for(c=0; c<sizeof(buff); c++)
92     if(buff[c] != (base_value+c))
93       failures++;
94
95 }
96
97 void index_by_pointer(unsigned char *index, unsigned char expected_value)
98 {
99
100   if(buff[*index] != expected_value)
101     failures++;
102
103 }
104
105
106 void
107 main (void)
108 {
109
110   init_array(4);
111   check_array(4);
112
113   if(buff[achar0 + 7] != 4+7)
114     failures++;
115
116   //  dummy = buff[5];
117   dummy = buff[achar0];
118
119   if(dummy != 4)
120     failures++;
121
122   if(dummy != (buff[achar0+1] -1)) 
123     failures++;
124
125   index_by_pointer(&dummy, 8);
126
127   f1 (&achar0);
128   f2 (&aint0);
129
130   acharP = f3 ();
131   if ((acharP == 0) || (*acharP))
132     failures++;
133   achar0 = 42;
134   if(*acharP != 42)
135     failures++;
136
137   achar0 = 5;
138   f4(&achar0, achar0);
139
140   success = failures;
141   done ();
142 }