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