1/*
2 * Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3 * Copyright 2015, Augustin Cavalier <waddlesplash>. All rights reserved.
4 * Distributed under the terms of the MIT License.
5 *
6 * Effect from corTeX / Optimum.
7 */
8
9#include <SupportDefs.h>
10
11#include "DrawStars.h"
12
13
14// Hand-translated from x86 assembly.
15/* draw a star (5 pixels) */
16void draw_stars(int star_width, char* dstParam, char incParam)
17{
18	unsigned char* dst;
19	unsigned char inc, al, cl;
20	dst = (unsigned char*)dstParam;
21	inc = (unsigned char)incParam;
22
23	dst[star_width] += inc;
24	if (dst[star_width] < inc) {
25		// Overflowed.
26		dst[star_width] = 255;
27	}
28
29	inc >>= 1;
30	cl = dst[star_width - 1];
31	cl += inc;
32	if (cl < inc) {
33		*dst = 255;
34		dst[star_width - 1] = 255;
35	} else {
36		al = *dst;
37		al += inc;
38		if (al >= inc)
39			*dst = al;
40		else
41			*dst = 255;
42		dst[star_width - 1] = cl;
43	}
44
45	al = dst[star_width * 2];
46	cl = dst[star_width + 1];
47	al += inc;
48	cl += inc;
49	if (al < inc) {
50		if (cl >= inc) {
51			dst[star_width * 2] = 255;
52			dst[star_width + 1] = cl;
53			return;
54		}
55	} else {
56		if (cl >= inc) {
57			dst[star_width * 2] = al;
58			dst[star_width + 1] = cl;
59			return;
60		}
61	}
62
63	dst[star_width * 2] = 255;
64	dst[star_width + 1] = 255;
65}
66