From 84d3fc15827ea41878aaab54cf377b05fd7fc73b Mon Sep 17 00:00:00 2001 From: jonschz Date: Sun, 4 May 2025 13:43:22 +0200 Subject: [PATCH] Kinda fix the flow using gotos --- LEGO1/omni/src/video/flic.cpp | 73 +++++++++++++++++------------------ 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/LEGO1/omni/src/video/flic.cpp b/LEGO1/omni/src/video/flic.cpp index ad68c9ef..75d77a06 100644 --- a/LEGO1/omni/src/video/flic.cpp +++ b/LEGO1/omni/src/video/flic.cpp @@ -374,7 +374,7 @@ void DecodeSS2(LPBITMAPINFOHEADER p_bitmapHeader, BYTE* p_pixelData, BYTE* p_dat // LINE: BETA10 0x1013e666 short row = p_flcHeader->height - yofs - 1; - goto loop; + goto row_loop; weird_code: // This is very ugly, but it does yield the correct layout. This _may_ be correct. @@ -382,8 +382,8 @@ void DecodeSS2(LPBITMAPINFOHEADER p_bitmapHeader, BYTE* p_pixelData, BYTE* p_dat // LINE: BETA10 0x1013e684 row += token; - do { - loop: + while (TRUE) { + row_loop: // TODO: Can the typecast be removed? // LINE: BETA10 0x1013e692 token = *((short*) data++); @@ -413,46 +413,45 @@ void DecodeSS2(LPBITMAPINFOHEADER p_bitmapHeader, BYTE* p_pixelData, BYTE* p_dat } short column = xofs; - while (1) { - // TODO: Try turning this while-loop into gotos - column += *(data++); - short type = *((char*) data++); - type += type; + column_loop: - if (type >= 0) { - WritePixels(p_bitmapHeader, p_pixelData, column, row, (BYTE*) data, type); - column += type; - data = (short*) ((char*) data + type); - // LINE: BETA10 0x1013e797 - if (--token != 0) { - continue; - } - row--; - if (--lines > 0) { - break; - } - return; + column += *(data++); + short type = *((char*) data++); + type += type; + + if (type >= 0) { + WritePixels(p_bitmapHeader, p_pixelData, column, row, (BYTE*) data, type); + column += type; + data = (short*) ((char*) data + type); + // LINE: BETA10 0x1013e797 + if (--token != 0) { + goto column_loop; } - else { - type = -type; - WORD* p_pixel = ((WORD*) data++); - WritePixelPairs(p_bitmapHeader, p_pixelData, column, row, *p_pixel, type >> 1); - column += type; - // LINE: BETA10 0x1013e813 - if (--token != 0) { - continue; - } - row--; - if (--lines > 0) { - break; - } - return; + row--; + if (--lines > 0) { + goto row_loop; } - // break; + return; } + else { + type = -type; + WORD* p_pixel = ((WORD*) data++); + WritePixelPairs(p_bitmapHeader, p_pixelData, column, row, *p_pixel, type >> 1); + column += type; + // LINE: BETA10 0x1013e813 + if (--token != 0) { + goto column_loop; + } + row--; + if (--lines > 0) { + goto row_loop; + } + return; + } + // break; - } while (1); + } } // FUNCTION: LEGO1 0x100bdc00