From 9fecf42e518e665aaa4289c3e25832be4d01f158 Mon Sep 17 00:00:00 2001 From: ZedThree Date: Thu, 29 May 2014 15:52:42 +0200 Subject: [PATCH] Tidy up loop on pointer --- src/gfx.c | 241 ++++++++++++++++++++++++++---------------------------- 1 file changed, 118 insertions(+), 123 deletions(-) diff --git a/src/gfx.c b/src/gfx.c index d35357875b..7c14ab2ec6 100644 --- a/src/gfx.c +++ b/src/gfx.c @@ -1066,26 +1066,24 @@ int gfx_get_string_width(char *buffer) int base; int width; - uint8 curr_char; - base = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16); width = 0; - for (curr_char = *buffer; curr_char > 0; buffer++, curr_char = *buffer) { + for (uint8* curr_char = buffer; *curr_char > 0; curr_char++) { - if (curr_char >= 0x20) { - width += RCT2_ADDRESS(0x0141E9E8, uint8)[base + (curr_char-0x20)]; + if (*curr_char >= 0x20) { + width += RCT2_ADDRESS(0x0141E9E8, uint8)[base + (*curr_char-0x20)]; continue; } - switch(curr_char) { + switch(*curr_char) { case 1: - width = *buffer; - buffer++; + width = *curr_char; + curr_char++; break; case 2: case 3: case 4: - buffer++; + curr_char++; break; case 7: base = 0x1C0; @@ -1100,22 +1098,19 @@ int gfx_get_string_width(char *buffer) base = 0; break; case 0x17: - curr_char = *buffer; - curr_char &= 0x7FFFF; - buffer += 4; - curr_char <<= 4; - width = RCT2_ADDRESS(RCT2_ADDRESS_G1_ELEMENTS + 4, uint16)[curr_char]; - curr_char = 0; + width = RCT2_ADDRESS(RCT2_ADDRESS_G1_ELEMENTS + 4, uint16)[(*curr_char & 0x7FFFF) << 4]; + curr_char += 4; + *curr_char = 0; break; default: - if (curr_char <= 0x10) { + if (*curr_char <= 0x10) { continue; } - buffer += 2; - if (curr_char <= 0x16) { + curr_char += 2; + if (*curr_char <= 0x16) { continue; } - buffer += 2; + curr_char += 2; break; } } @@ -1129,107 +1124,107 @@ int gfx_get_string_width(char *buffer) * buffer (esi) * width (edi) */ -int gfx_clip_string(char *buffer, int width) -{ - uint16 base; +// int gfx_clip_string(char *buffer, int width) +// { +// uint16 base; - if (width < 6) { - *buffer = 0; - return 0; - } +// if (width < 6) { +// *buffer = 0; +// return 0; +// } - base = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16); - edx = rct2_address(0x141E9F6, uint32)[base]; +// base = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16); +// edx = rct2_address(0x141E9F6, uint32)[base]; - edx = &(edx + edx*2); - // lea edx, [edx+edx*2] - dx = -(edx & 0xFFFF); - dx += width; - eax = 0; - cx = 0; - max_x = 0; - ebp = buffer; +// edx = &(edx + edx*2); +// // lea edx, [edx+edx*2] +// dx = -(edx & 0xFFFF); +// dx += width; +// eax = 0; +// cx = 0; +// max_x = 0; +// ebp = buffer; - // loc_6C2485: ; CODE XREF: clip_text+42j - for (uint32 al = *buffer; al > 0; buffer++, al = *buffer) { +// // loc_6C2485: ; CODE XREF: clip_text+42j +// for (uint32 al = *buffer; al > 0; buffer++, al = *buffer) { - if (al < 0x20) { - switch(curr_char) { - case 1: - width = *buffer; - buffer++; - continue; - case 2: - case 3: - case 4: - buffer++; - continue; - case 7: - base = 0x1C0; - // jmp short loc_6C2523 - break; - case 8: - base = 0x2A0; - // jmp short loc_6C2523 - break; - case 9: - base = 0x0E0; - // jmp short loc_6C2523 - break; - case 0x0A: - base = 0; - // jmp short loc_6C2523 - break; - case 0x17: - curr_char = *buffer; - curr_char &= 0x7FFFF; - buffer += 4; - curr_char <<= 4; - width = RCT2_ADDRESS(RCT2_ADDRESS_G1_ELEMENTS + 4, uint16)[curr_char]; - curr_char = 0; - break; - default: - if (curr_char <= 0x10) { - continue; - } - buffer += 2; - if (curr_char <= 0x16) { - continue; - } - buffer += 2; - break; - } +// if (al < 0x20) { +// switch(curr_char) { +// case 1: +// width = *buffer; +// buffer++; +// continue; +// case 2: +// case 3: +// case 4: +// buffer++; +// continue; +// case 7: +// base = 0x1C0; +// // jmp short loc_6C2523 +// break; +// case 8: +// base = 0x2A0; +// // jmp short loc_6C2523 +// break; +// case 9: +// base = 0x0E0; +// // jmp short loc_6C2523 +// break; +// case 0x0A: +// base = 0; +// // jmp short loc_6C2523 +// break; +// case 0x17: +// curr_char = *buffer; +// curr_char &= 0x7FFFF; +// buffer += 4; +// curr_char <<= 4; +// width = RCT2_ADDRESS(RCT2_ADDRESS_G1_ELEMENTS + 4, uint16)[curr_char]; +// curr_char = 0; +// break; +// default: +// if (curr_char <= 0x10) { +// continue; +// } +// buffer += 2; +// if (curr_char <= 0x16) { +// continue; +// } +// buffer += 2; +// break; +// } - // loc_6C2523: ; CODE XREF: clip_text+AEj - // ; clip_text+B5j ... - // movzx edx, byte_141E9F6[ebx] - // lea edx, [edx+edx*2] - // neg dx - // add dx, di - // jmp loc_6C2485 +// // loc_6C2523: ; CODE XREF: clip_text+AEj +// // ; clip_text+B5j ... +// // movzx edx, byte_141E9F6[ebx] +// // lea edx, [edx+edx*2] +// // neg dx +// // add dx, di +// // jmp loc_6C2485 - } else { +// } else { - max_x = max_x + (RCT2_ADDRESS(0x0141E9E8, uint8)[ebx] & 0xFF); +// max_x = max_x + (RCT2_ADDRESS(0x0141E9E8, uint8)[ebx] & 0xFF); - // loc_6C249A: ; CODE XREF: clip_text+AAj - if (max_x > width) { - rct2_global(ebp + 0, uint32) = 0x2E2E2E; - max_x = width; - // pop esi - return; - } - if (max_x > dx) { - continue; - // ja short loc_6C2485 - } - ebp = buffer; - continue; - } - } -} +// // loc_6C249A: ; CODE XREF: clip_text+AAj +// if (max_x > width) { +// rct2_global(ebp + 0, uint32) = 0x2E2E2E; +// max_x = width; +// // pop esi +// return; +// } +// if (max_x > dx) { +// continue; +// // ja short loc_6C2485 +// } +// ebp = buffer; +// continue; +// } +// } +// } /** @@ -1275,24 +1270,24 @@ void gfx_draw_string_left_clipped(rct_drawpixelinfo* dpi, int format, void* args */ void gfx_draw_string_centred_clipped(rct_drawpixelinfo *dpi, int format, void *args, int colour, int x, int y, int width) { - char* buffer; - short text_width; + // char* buffer; + // short text_width; - buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char); - format_string(buffer, format, args); + // buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char); + // format_string(buffer, format, args); - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 0xE0; + // RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 0xE0; - // Clip text - RCT2_CALLPROC_X(0x006C2460, 0, 0, 0, 0, (int)buffer, width, 0); - // // Measure text width - // text_width = gfx_get_string_width(buffer); + // // Clip text + // RCT2_CALLPROC_X(0x006C2460, 0, 0, 0, 0, (int)buffer, width, 0); + // // // Measure text width + // // text_width = gfx_get_string_width(buffer); - // Draw the text centred - if (text_width <= 0xFFF) { - x -= text_width / 2; - gfx_draw_string(dpi, buffer, colour, x, y); - } + // // Draw the text centred + // if (text_width <= 0xFFF) { + // x -= text_width / 2; + // gfx_draw_string(dpi, buffer, colour, x, y); + // } }