From a340963e0c40f3ea85fea911c79fbaaa5af93e27 Mon Sep 17 00:00:00 2001 From: suve <veg@svgames.pl> Date: Thu, 9 Jun 2022 15:46:20 +0200 Subject: [PATCH 1/2] Check if 24-bit colour codes contain 3 arguments --- aha.c | 64 ++++++++++++++++++++++++++--------------------------------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/aha.c b/aha.c index 46e43c0..bf22373 100644 --- a/aha.c +++ b/aha.c @@ -833,25 +833,21 @@ int main(int argc,char* args[]) if (momelem->value == 38 && momelem->next && momelem->next->value == 2 && - momelem->next->next)// 38;2;<n> -> 24 Bit + momelem->next->next && + momelem->next->next->next && + momelem->next->next->next->next)// 38;2;<r>;<g>;<b> -> 24 Bit { - momelem = momelem->next->next; - pelem r,g,b; - r = momelem; - momelem = momelem->next; - g = momelem; - if ( momelem ) - momelem = momelem->next; - b = momelem; - if ( r && g && b ) - { - state.highlighted = 0; - state.fc_colormode = MODE_24BIT; - *dest = - (r->value & 255) * 65536 + - (g->value & 255) * 256 + - (b->value & 255); - } + pelem r = momelem->next->next; + pelem g = r->next; + pelem b = g->next; + momelem = b; + + state.highlighted = 0; + state.fc_colormode = MODE_24BIT; + *dest = + (r->value & 255) * 65536 + + (g->value & 255) * 256 + + (b->value & 255); } else { @@ -901,25 +897,21 @@ int main(int argc,char* args[]) if (momelem->value == 48 && momelem->next && momelem->next->value == 2 && - momelem->next->next)// 48;2;<n> -> 24 Bit + momelem->next->next && + momelem->next->next->next && + momelem->next->next->next->next)// 48;2;<r>;<g>;<b> -> 24 Bit { - momelem = momelem->next->next; - pelem r,g,b; - r = momelem; - momelem = momelem->next; - g = momelem; - if ( momelem ) - momelem = momelem->next; - b = momelem; - if ( r && g && b ) - { - state.bc_colormode = MODE_24BIT; - state.highlighted = 0; - *dest = - (r->value & 255) * 65536 + - (g->value & 255) * 256 + - (b->value & 255); - } + pelem r = momelem->next->next; + pelem g = r->next; + pelem b = g->next; + momelem = b; + + state.bc_colormode = MODE_24BIT; + state.highlighted = 0; + *dest = + (r->value & 255) * 65536 + + (g->value & 255) * 256 + + (b->value & 255); } else { From 1b8b994b058920cdc2fe144dca3243bacf1d49b2 Mon Sep 17 00:00:00 2001 From: suve <veg@svgames.pl> Date: Thu, 9 Jun 2022 15:55:29 +0200 Subject: [PATCH 2/2] Add a helper function to avoid ->next checks --- aha.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/aha.c b/aha.c index bf22373..2bfebb7 100644 --- a/aha.c +++ b/aha.c @@ -138,6 +138,15 @@ pelem parseInsert(char* s) return firstelem; } +int parseDepthAtLeast(pelem elem, unsigned int wanted) { + while (elem != NULL) { + if (wanted == 0) return 1; + elem = elem->next; + --wanted; + } + return 0; +} + void deleteParse(pelem elem) { while (elem!=NULL) @@ -831,11 +840,8 @@ int main(int argc,char* args[]) } else if (momelem->value == 38 && - momelem->next && - momelem->next->value == 2 && - momelem->next->next && - momelem->next->next->next && - momelem->next->next->next->next)// 38;2;<r>;<g>;<b> -> 24 Bit + parseDepthAtLeast(momelem, 4) && + momelem->next->value == 2)// 38;2;<r>;<g>;<b> -> 24 Bit { pelem r = momelem->next->next; pelem g = r->next; @@ -895,11 +901,8 @@ int main(int argc,char* args[]) } else if (momelem->value == 48 && - momelem->next && - momelem->next->value == 2 && - momelem->next->next && - momelem->next->next->next && - momelem->next->next->next->next)// 48;2;<r>;<g>;<b> -> 24 Bit + parseDepthAtLeast(momelem, 4) && + momelem->next->value == 2)// 48;2;<r>;<g>;<b> -> 24 Bit { pelem r = momelem->next->next; pelem g = r->next;