Out of sheer curiosity, why do you use typedef in this situation (HDLIGHT -> HDLIGHT)?
It's not HDLIGHT->HDLIGHT, it's struct HDLIGHT->HDLIGHT
What I meant with the (HDLIGHT -> HDLIGHT) was just there to show that why "typedef" from HDLIGHT to HDLIGHT. I'd understand if it was a completely different like typedef HDLIGHT to AwesomeVariable so I thought I'd ask was there some sort of magical thing going on and it was pretty much as I thought it was. A personal preference.
in C, you structs are declared like
struct Point {
float x, y;
};
and you can't create one like
Point p1 = {1, 2};
in C, it has to be declared like
struct Point p1 = {1, 2};
i.e., the NAME of the type is "struct Point", so it was standard practice in C to stick typedef in front so you dont need to type "struct" every time.
(this is unnecessary in c++, but habits dont break easily if you learned on C)