1 /*
2 Copyright (C) 2018-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: wxdcomp.ctr
12 */
13
14 /** @file wxdcomp.c The wxdcomp module.
15 */
16
17
18 #include <wxd2lat/wxd2lat.h>
19
20
21
22
23
24
25
26 int
wxd2lat_object_category(int16_t ot)27 wxd2lat_object_category(int16_t ot)
28 {
29 int back = WXD_OC_CONTROL;
30
31 switch (ot) {
32 case WXD_OT_TEXT : {
33 back = WXD_OC_TEXT ;
34 } break;
35 case WXD_OT_POLYLINE : case WXD_OT_O_SPLINE : case WXD_OT_O_ARC : {
36 back = WXD_OC_OPEN ;
37 } break;
38 case WXD_OT_POLYGON : case WXD_OT_C_SPLINE : case WXD_OT_C_ARC :
39 case WXD_OT_CIRCLE : case WXD_OT_ELLIPSE : case WXD_OT_BOX : {
40 back = WXD_OC_CLOSED ;
41 } break;
42 case WXD_OT_IMAGE : {
43 back = WXD_OC_IMAGE ;
44 } break;
45 }
46
47 return back;
48 }
49
50
51
52 static
53 int
cmp_u8(uint8_t a,uint8_t b)54 cmp_u8(uint8_t a, uint8_t b)
55 {
56 return ((a > b) ? (1) : ((a < b) ? (-1) : (0)));
57 }
58
59
60
61 #if 0
62
63 static
64 int
65 cmp_i8(int8_t a, int8_t b)
66 {
67 return ((a > b) ? (1) : ((a < b) ? (-1) : (0)));
68 }
69
70 #endif
71
72
73
74 #if 0
75
76 static
77 int
78 cmp_u16(uint16_t a, uint16_t b)
79 {
80 return ((a > b) ? (1) : ((a < b) ? (-1) : (0)));
81 }
82
83 #endif
84
85
86 static
87 int
cmp_i16(int16_t a,int16_t b)88 cmp_i16(int16_t a, int16_t b)
89 {
90 return ((a > b) ? (1) : ((a < b) ? (-1) : (0)));
91 }
92
93
94
95 static
96 int
cmp_int(int a,int b)97 cmp_int(int a, int b)
98 {
99 return ((a > b) ? (1) : ((a < b) ? (-1) : (0)));
100 }
101
102
103
104 static
105 int
cmp_dbl(double a,double b)106 cmp_dbl(double a, double b)
107 {
108 return ((a > b) ? (1) : ((a < b) ? (-1) : (0)));
109 }
110
111
112 int
wxd2lat_compare_object(const void * l,const void * r,int DK4_ARG_UNUSED (cr))113 wxd2lat_compare_object(const void *l, const void *r, int DK4_ARG_UNUSED(cr))
114 {
115 const wxd_object_t *pl;
116 const wxd_object_t *pr;
117 int cal;
118 int car;
119 int back = 0;
120 DK4_UNUSED_ARG(cr)
121
122 if (NULL != l) {
123 if (NULL != r) {
124 pl = (const wxd_object_t *)l;
125 pr = (const wxd_object_t *)r;
126 back = cmp_i16(pl->lay, pr->lay);
127 if (0 == back) {
128 cal = wxd2lat_object_category(pl->ot);
129 car = wxd2lat_object_category(pr->ot);
130 back = cmp_int(cal, car);
131 if (0 == back) {
132 #if 0
133 back = cmp_u16(pl->lw, pr->lw);
134 #endif
135 back = cmp_dbl(pl->lw, pr->lw);
136 if (0 == back) {
137 back = cmp_u8(pl->ls, pr->ls);
138 if (0 == back) {
139 back = cmp_u8(pl->sl, pr->sl);
140 if (0 == back) {
141 back = cmp_u8(pl->js, pr->js);
142 if (0 == back) {
143 back = cmp_u8(pl->csfs, pr->csfs);
144 if (0 == back) {
145 back = cmp_u8(pl->ml, pr->ml);
146 if (0 == back) {
147 back = cmp_u8(pl->sc[0], pr->sc[0]);
148 if (0 == back) {
149 back = cmp_u8(pl->sc[1], pr->sc[1]);
150 if (0 == back) {
151 back = cmp_u8(pl->sc[2], pr->sc[2]);
152 if (0 == back) {
153 back = cmp_u8(pl->fc[0], pr->fc[0]);
154 if (0 == back) {
155 back = cmp_u8(pl->fc[1], pr->fc[1]);
156 if (0 == back) {
157 back = cmp_u8(pl->fc[2], pr->fc[2]);
158 if (0 == back) {
159 back = cmp_i16(pl->ot, pr->ot);
160 }
161 }
162 }
163 }
164 }
165 }
166 }
167 }
168 }
169 }
170 }
171 }
172 }
173 }
174 }
175 else {
176 back = 1;
177 }
178 }
179 else {
180 if (NULL != r) {
181 back = -1;
182 }
183 }
184
185 return back;
186 }
187
188
189
190
191 /* vim: set ai sw=4 ts=4 : */
192