From 496186d1017287287b36a7cad5f73c3975476b6d Mon Sep 17 00:00:00 2001 From: a dinosaur Date: Sat, 13 Apr 2024 13:02:18 +1000 Subject: [PATCH] convert to LF line-endings --- Endoomed/src/main.cpp | 766 +++++++++++++++++++++--------------------- 1 file changed, 383 insertions(+), 383 deletions(-) diff --git a/Endoomed/src/main.cpp b/Endoomed/src/main.cpp index ae275e1..c844afb 100644 --- a/Endoomed/src/main.cpp +++ b/Endoomed/src/main.cpp @@ -1,383 +1,383 @@ -#include -#include -#include -#include -#include - -#define CHARWIDTH 8 -#define CHARHEIGHT 16 - -enum class EColour : unsigned char -{ - BLACK, - BLUE, - GREEN, - CYAN, - RED, - MEGENTA, - BROWN, - LTGREY, - DKGREY, - LTBLUE, - LTGREEN, - LTCYAN, - LTRED, - LTMEGENTA, - YELLOW, - WHITE -}; - -SDL_Colour g_aColourTable[] = -{ - { 0x00, 0x00, 0x00, 0xFF }, // BLACK - { 0x00, 0x00, 0xAA, 0xFF }, // BLUE - { 0x00, 0xAA, 0x00, 0xFF }, // GREEN - { 0x00, 0xAA, 0xAA, 0xFF }, // CYAN - { 0xAA, 0x00, 0x00, 0xFF }, // RED - { 0xAA, 0x00, 0xAA, 0xFF }, // MEGENTA - { 0xAA, 0x55, 0x00, 0xFF }, // BROWN - { 0xAA, 0xAA, 0xAA, 0xFF }, // LTGREY - { 0x55, 0x55, 0x55, 0xFF }, // DKGREY - { 0x55, 0x55, 0xFF, 0xFF }, // BLUE - { 0x55, 0xFF, 0x55, 0xFF }, // GREEN - { 0x55, 0xFF, 0xFF, 0xFF }, // CYAN - { 0xFF, 0x55, 0x55, 0xFF }, // RED - { 0xFF, 0x55, 0xFF, 0xFF }, // MEGENTA - { 0xFF, 0xFF, 0x55, 0xFF }, // YELLOW - { 0xFF, 0xFF, 0xFF, 0xFF } // WHITE -}; - -struct SChar -{ - unsigned char character; - EColour bgColour; - EColour fgColour; - bool blinking; -}; - -inline int clampi ( int a_iVal, int a_iMin, int a_iMax ) -{ - return ( a_iVal < a_iMin ) ? a_iMin : ( a_iVal > a_iMax ) ? a_iMax : a_iVal; -} - -static Uint32 TimerCallback ( Uint32 a_uiInterval, void* a_pParam ) -{ - SDL_Event event; - SDL_UserEvent userEvent; - - userEvent.type = SDL_USEREVENT; - userEvent.code = 0; - userEvent.data1 = nullptr; - userEvent.data2 = nullptr; - - event.type = SDL_USEREVENT; - event.user = userEvent; - - SDL_PushEvent ( &event ); - - return a_uiInterval; -} - -int main ( int argc, char** argv ) -{ - if ( SDL_Init ( SDL_INIT_VIDEO ) < 0 ) - { - return -1; - } - - if ( !( IMG_Init ( IMG_INIT_PNG ) & IMG_INIT_PNG ) ) - { - SDL_Quit (); - return -1; - } - - SDL_Window* pWindow = nullptr; - SDL_Renderer* pRenderer = nullptr; - if ( SDL_CreateWindowAndRenderer ( 640, 400, 0, &pWindow, &pRenderer ) < 0 ) - { - IMG_Quit (); - SDL_Quit (); - return -1; - } - - SDL_SetWindowTitle ( pWindow, "EnDOOMed" ); - - SDL_Texture* pCodepage = IMG_LoadTexture ( pRenderer, "codepage.png" ); - if ( pCodepage == nullptr ) - { - SDL_DestroyRenderer ( pRenderer ); - SDL_DestroyWindow ( pWindow ); - IMG_Quit (); - SDL_Quit (); - return -1; - } - - SChar aDisplay[2000]; - memset ( aDisplay, 0, sizeof(aDisplay) ); - - FILE* pFile = fopen ( "ENDOOM.bin", "rb" ); - if ( pFile == nullptr ) - { - SDL_DestroyTexture ( pCodepage ); - SDL_DestroyRenderer ( pRenderer ); - SDL_DestroyWindow ( pWindow ); - IMG_Quit (); - SDL_Quit (); - return -1; - } - - for ( int i = 0; i < 2000; ++i ) - { - SChar& currentCharacter = aDisplay[i]; - - unsigned char ucSpecial; - fread ( ¤tCharacter.character, sizeof(unsigned char), 1, pFile ); - fread ( &ucSpecial, sizeof(unsigned char), 1, pFile ); - - currentCharacter.bgColour = EColour(( ucSpecial & 112 ) >> 4); - currentCharacter.fgColour = EColour(ucSpecial & 15); - currentCharacter.blinking = ( ucSpecial & 128 > 0 ) ? true : false; - } - - SDL_AddTimer ( 400, TimerCallback, nullptr ); - - SChar leftBrush; - leftBrush.character = 219; - leftBrush.bgColour = EColour::BLACK; - leftBrush.fgColour = EColour::LTGREY; - leftBrush.blinking = false; - - SChar rightBrush; - rightBrush.character = ' '; - rightBrush.bgColour = EColour::BLACK; - rightBrush.fgColour = EColour::LTGREY; - rightBrush.blinking = false; - - bool bMouseLeft = false, bMouseRight = false; - int iMousePrevX = 0, iMousePrevY = 0; - int iMouseX = 0, iMouseY = 0; - bool bMouseInWindow = false; - - bool bValidRender = false; - bool bBlinkState = true; - bool bRunning = true; - SDL_Event event; - while ( bRunning ) - { - iMousePrevX = iMouseX; - iMousePrevY = iMouseY; - - SDL_PumpEvents (); - if ( SDL_WaitEvent ( &event ) ) - { - do - { - switch ( event.type ) - { - case ( SDL_QUIT ): - { - bRunning = false; - break; - } - case ( SDL_USEREVENT ): - { - bBlinkState = !bBlinkState; - bValidRender = false; - break; - } - case ( SDL_MOUSEBUTTONDOWN ): - { - if ( event.button.button == SDL_BUTTON_LEFT ) - { - bMouseLeft = true; - } - else - if ( event.button.button == SDL_BUTTON_RIGHT ) - { - bMouseRight = true; - } - break; - } - case ( SDL_MOUSEBUTTONUP ): - { - if ( event.button.button == SDL_BUTTON_LEFT ) - { - bMouseLeft = false; - } - else - if ( event.button.button == SDL_BUTTON_RIGHT ) - { - bMouseRight = false; - } - break; - } - case ( SDL_MOUSEMOTION ): - { - iMouseX = event.motion.x; - iMouseY = event.motion.y; - break; - } - case ( SDL_WINDOWEVENT ): - { - switch ( event.window.event ) - { - case ( SDL_WINDOWEVENT_LEAVE ): - { - bMouseInWindow = false; - break; - }; - case ( SDL_WINDOWEVENT_ENTER ): - { - bMouseInWindow = true; - break; - }; - }; - - break; - } - } - } - while ( SDL_PollEvent ( &event ) > 0 ); - } - - if ( bMouseInWindow && ( bMouseLeft || bMouseRight ) ) - { - int iFromX = clampi ( iMouseX / CHARWIDTH, 0, 79 ); - int iFromY = clampi ( iMouseY / CHARHEIGHT, 0, 24 ); - int iToX = clampi ( iMousePrevX / CHARWIDTH, 0, 79 ); - int iToY = clampi ( iMousePrevY / CHARHEIGHT, 0, 24 ); - - SChar* srcChar = nullptr; - if ( bMouseLeft ) - { - srcChar = &leftBrush; - } - else - if ( bMouseRight ) - { - srcChar = &rightBrush; - } - - if ( iToX == iFromX && iToY == iFromY ) - { - SChar& dstChar = aDisplay[iToX + iToY * 80]; - dstChar.blinking = srcChar->blinking; - dstChar.bgColour = srcChar->bgColour; - dstChar.fgColour = srcChar->fgColour; - dstChar.character = srcChar->character; - } - else - { - int iTemp; - bool bSteep = labs ( iToY - iFromY ) > labs ( iToX - iFromX ); - if ( bSteep ) - { - iTemp = iFromY; - iFromY = iFromX; - iFromX = iTemp; - - iTemp = iToY; - iToY = iToX; - iToX = iTemp; - } - if ( iFromX > iToX ) - { - iTemp = iToX; - iToX = iFromX; - iFromX = iTemp; - - iTemp = iToY; - iToY = iFromY; - iFromY = iTemp; - } - - int iDeltaX = iToX - iFromX; - int iDeltaY = labs ( iToY - iFromY ); - int iError = iDeltaX / 2; - int iY = iFromY; - int iYStep = ( iFromY < iToY ) ? 1 : -1; - for ( int iX = iFromX; iX <= iToX; ++iX ) - { - if ( bSteep ) - { - SChar& dstChar = aDisplay[iY + iX * 80]; - dstChar.blinking = srcChar->blinking; - dstChar.bgColour = srcChar->bgColour; - dstChar.fgColour = srcChar->fgColour; - dstChar.character = srcChar->character; - } - else - { - SChar& dstChar = aDisplay[iX + iY * 80]; - dstChar.blinking = srcChar->blinking; - dstChar.bgColour = srcChar->bgColour; - dstChar.fgColour = srcChar->fgColour; - dstChar.character = srcChar->character; - } - - iError -= iDeltaY; - if ( iError < 0 ) - { - iY += iYStep; - iError += iDeltaX; - } - } - } - - bValidRender = false; - } - - if ( !bValidRender ) - { - SDL_SetRenderDrawColor ( pRenderer, 48, 48, 48, 255 ); - SDL_RenderClear ( pRenderer ); - - SDL_Rect src, dst; - - src.w = CHARWIDTH; - src.h = CHARHEIGHT; - dst.w = CHARWIDTH; - dst.h = CHARHEIGHT; - - int iX = 0, iY = 0; - for ( int i = 0; i < 2000; ++i ) - { - SChar& currentCharacter = aDisplay[i]; - SDL_Colour& currentBgColour = g_aColourTable[(unsigned char)aDisplay[i].bgColour]; - SDL_Colour& currentFgColour = g_aColourTable[(unsigned char)aDisplay[i].fgColour]; - - src.x = ( currentCharacter.character % 32 ) * CHARWIDTH; - src.y = ( currentCharacter.character / 32 ) * CHARHEIGHT; - dst.x = iX * CHARWIDTH; - dst.y = iY * CHARHEIGHT; - - SDL_SetRenderDrawColor ( pRenderer, currentBgColour.r, currentBgColour.g, currentBgColour.b, currentBgColour.a ); - SDL_RenderFillRect ( pRenderer, &dst ); - SDL_SetRenderDrawColor ( pRenderer, 0, 0, 0, currentFgColour.a ); - - if ( bBlinkState || !currentCharacter.blinking ) - { - SDL_SetTextureColorMod ( pCodepage, currentFgColour.r, currentFgColour.g, currentFgColour.b ); - SDL_RenderCopy ( pRenderer, pCodepage, &src, &dst ); - } - - if ( ++iX >= 80 ) - { - iX = 0; - ++iY; - } - } - - SDL_RenderPresent ( pRenderer ); - bValidRender = true; - } - } - - fclose ( pFile ); - SDL_DestroyTexture ( pCodepage ); - SDL_DestroyRenderer ( pRenderer ); - SDL_DestroyWindow ( pWindow ); - IMG_Quit (); - SDL_Quit (); - return 0; -} +#include +#include +#include +#include +#include + +#define CHARWIDTH 8 +#define CHARHEIGHT 16 + +enum class EColour : unsigned char +{ + BLACK, + BLUE, + GREEN, + CYAN, + RED, + MEGENTA, + BROWN, + LTGREY, + DKGREY, + LTBLUE, + LTGREEN, + LTCYAN, + LTRED, + LTMEGENTA, + YELLOW, + WHITE +}; + +SDL_Colour g_aColourTable[] = +{ + { 0x00, 0x00, 0x00, 0xFF }, // BLACK + { 0x00, 0x00, 0xAA, 0xFF }, // BLUE + { 0x00, 0xAA, 0x00, 0xFF }, // GREEN + { 0x00, 0xAA, 0xAA, 0xFF }, // CYAN + { 0xAA, 0x00, 0x00, 0xFF }, // RED + { 0xAA, 0x00, 0xAA, 0xFF }, // MEGENTA + { 0xAA, 0x55, 0x00, 0xFF }, // BROWN + { 0xAA, 0xAA, 0xAA, 0xFF }, // LTGREY + { 0x55, 0x55, 0x55, 0xFF }, // DKGREY + { 0x55, 0x55, 0xFF, 0xFF }, // BLUE + { 0x55, 0xFF, 0x55, 0xFF }, // GREEN + { 0x55, 0xFF, 0xFF, 0xFF }, // CYAN + { 0xFF, 0x55, 0x55, 0xFF }, // RED + { 0xFF, 0x55, 0xFF, 0xFF }, // MEGENTA + { 0xFF, 0xFF, 0x55, 0xFF }, // YELLOW + { 0xFF, 0xFF, 0xFF, 0xFF } // WHITE +}; + +struct SChar +{ + unsigned char character; + EColour bgColour; + EColour fgColour; + bool blinking; +}; + +inline int clampi ( int a_iVal, int a_iMin, int a_iMax ) +{ + return ( a_iVal < a_iMin ) ? a_iMin : ( a_iVal > a_iMax ) ? a_iMax : a_iVal; +} + +static Uint32 TimerCallback ( Uint32 a_uiInterval, void* a_pParam ) +{ + SDL_Event event; + SDL_UserEvent userEvent; + + userEvent.type = SDL_USEREVENT; + userEvent.code = 0; + userEvent.data1 = nullptr; + userEvent.data2 = nullptr; + + event.type = SDL_USEREVENT; + event.user = userEvent; + + SDL_PushEvent ( &event ); + + return a_uiInterval; +} + +int main ( int argc, char** argv ) +{ + if ( SDL_Init ( SDL_INIT_VIDEO ) < 0 ) + { + return -1; + } + + if ( !( IMG_Init ( IMG_INIT_PNG ) & IMG_INIT_PNG ) ) + { + SDL_Quit (); + return -1; + } + + SDL_Window* pWindow = nullptr; + SDL_Renderer* pRenderer = nullptr; + if ( SDL_CreateWindowAndRenderer ( 640, 400, 0, &pWindow, &pRenderer ) < 0 ) + { + IMG_Quit (); + SDL_Quit (); + return -1; + } + + SDL_SetWindowTitle ( pWindow, "EnDOOMed" ); + + SDL_Texture* pCodepage = IMG_LoadTexture ( pRenderer, "codepage.png" ); + if ( pCodepage == nullptr ) + { + SDL_DestroyRenderer ( pRenderer ); + SDL_DestroyWindow ( pWindow ); + IMG_Quit (); + SDL_Quit (); + return -1; + } + + SChar aDisplay[2000]; + memset ( aDisplay, 0, sizeof(aDisplay) ); + + FILE* pFile = fopen ( "ENDOOM.bin", "rb" ); + if ( pFile == nullptr ) + { + SDL_DestroyTexture ( pCodepage ); + SDL_DestroyRenderer ( pRenderer ); + SDL_DestroyWindow ( pWindow ); + IMG_Quit (); + SDL_Quit (); + return -1; + } + + for ( int i = 0; i < 2000; ++i ) + { + SChar& currentCharacter = aDisplay[i]; + + unsigned char ucSpecial; + fread ( ¤tCharacter.character, sizeof(unsigned char), 1, pFile ); + fread ( &ucSpecial, sizeof(unsigned char), 1, pFile ); + + currentCharacter.bgColour = EColour(( ucSpecial & 112 ) >> 4); + currentCharacter.fgColour = EColour(ucSpecial & 15); + currentCharacter.blinking = ( ucSpecial & 128 > 0 ) ? true : false; + } + + SDL_AddTimer ( 400, TimerCallback, nullptr ); + + SChar leftBrush; + leftBrush.character = 219; + leftBrush.bgColour = EColour::BLACK; + leftBrush.fgColour = EColour::LTGREY; + leftBrush.blinking = false; + + SChar rightBrush; + rightBrush.character = ' '; + rightBrush.bgColour = EColour::BLACK; + rightBrush.fgColour = EColour::LTGREY; + rightBrush.blinking = false; + + bool bMouseLeft = false, bMouseRight = false; + int iMousePrevX = 0, iMousePrevY = 0; + int iMouseX = 0, iMouseY = 0; + bool bMouseInWindow = false; + + bool bValidRender = false; + bool bBlinkState = true; + bool bRunning = true; + SDL_Event event; + while ( bRunning ) + { + iMousePrevX = iMouseX; + iMousePrevY = iMouseY; + + SDL_PumpEvents (); + if ( SDL_WaitEvent ( &event ) ) + { + do + { + switch ( event.type ) + { + case ( SDL_QUIT ): + { + bRunning = false; + break; + } + case ( SDL_USEREVENT ): + { + bBlinkState = !bBlinkState; + bValidRender = false; + break; + } + case ( SDL_MOUSEBUTTONDOWN ): + { + if ( event.button.button == SDL_BUTTON_LEFT ) + { + bMouseLeft = true; + } + else + if ( event.button.button == SDL_BUTTON_RIGHT ) + { + bMouseRight = true; + } + break; + } + case ( SDL_MOUSEBUTTONUP ): + { + if ( event.button.button == SDL_BUTTON_LEFT ) + { + bMouseLeft = false; + } + else + if ( event.button.button == SDL_BUTTON_RIGHT ) + { + bMouseRight = false; + } + break; + } + case ( SDL_MOUSEMOTION ): + { + iMouseX = event.motion.x; + iMouseY = event.motion.y; + break; + } + case ( SDL_WINDOWEVENT ): + { + switch ( event.window.event ) + { + case ( SDL_WINDOWEVENT_LEAVE ): + { + bMouseInWindow = false; + break; + }; + case ( SDL_WINDOWEVENT_ENTER ): + { + bMouseInWindow = true; + break; + }; + }; + + break; + } + } + } + while ( SDL_PollEvent ( &event ) > 0 ); + } + + if ( bMouseInWindow && ( bMouseLeft || bMouseRight ) ) + { + int iFromX = clampi ( iMouseX / CHARWIDTH, 0, 79 ); + int iFromY = clampi ( iMouseY / CHARHEIGHT, 0, 24 ); + int iToX = clampi ( iMousePrevX / CHARWIDTH, 0, 79 ); + int iToY = clampi ( iMousePrevY / CHARHEIGHT, 0, 24 ); + + SChar* srcChar = nullptr; + if ( bMouseLeft ) + { + srcChar = &leftBrush; + } + else + if ( bMouseRight ) + { + srcChar = &rightBrush; + } + + if ( iToX == iFromX && iToY == iFromY ) + { + SChar& dstChar = aDisplay[iToX + iToY * 80]; + dstChar.blinking = srcChar->blinking; + dstChar.bgColour = srcChar->bgColour; + dstChar.fgColour = srcChar->fgColour; + dstChar.character = srcChar->character; + } + else + { + int iTemp; + bool bSteep = labs ( iToY - iFromY ) > labs ( iToX - iFromX ); + if ( bSteep ) + { + iTemp = iFromY; + iFromY = iFromX; + iFromX = iTemp; + + iTemp = iToY; + iToY = iToX; + iToX = iTemp; + } + if ( iFromX > iToX ) + { + iTemp = iToX; + iToX = iFromX; + iFromX = iTemp; + + iTemp = iToY; + iToY = iFromY; + iFromY = iTemp; + } + + int iDeltaX = iToX - iFromX; + int iDeltaY = labs ( iToY - iFromY ); + int iError = iDeltaX / 2; + int iY = iFromY; + int iYStep = ( iFromY < iToY ) ? 1 : -1; + for ( int iX = iFromX; iX <= iToX; ++iX ) + { + if ( bSteep ) + { + SChar& dstChar = aDisplay[iY + iX * 80]; + dstChar.blinking = srcChar->blinking; + dstChar.bgColour = srcChar->bgColour; + dstChar.fgColour = srcChar->fgColour; + dstChar.character = srcChar->character; + } + else + { + SChar& dstChar = aDisplay[iX + iY * 80]; + dstChar.blinking = srcChar->blinking; + dstChar.bgColour = srcChar->bgColour; + dstChar.fgColour = srcChar->fgColour; + dstChar.character = srcChar->character; + } + + iError -= iDeltaY; + if ( iError < 0 ) + { + iY += iYStep; + iError += iDeltaX; + } + } + } + + bValidRender = false; + } + + if ( !bValidRender ) + { + SDL_SetRenderDrawColor ( pRenderer, 48, 48, 48, 255 ); + SDL_RenderClear ( pRenderer ); + + SDL_Rect src, dst; + + src.w = CHARWIDTH; + src.h = CHARHEIGHT; + dst.w = CHARWIDTH; + dst.h = CHARHEIGHT; + + int iX = 0, iY = 0; + for ( int i = 0; i < 2000; ++i ) + { + SChar& currentCharacter = aDisplay[i]; + SDL_Colour& currentBgColour = g_aColourTable[(unsigned char)aDisplay[i].bgColour]; + SDL_Colour& currentFgColour = g_aColourTable[(unsigned char)aDisplay[i].fgColour]; + + src.x = ( currentCharacter.character % 32 ) * CHARWIDTH; + src.y = ( currentCharacter.character / 32 ) * CHARHEIGHT; + dst.x = iX * CHARWIDTH; + dst.y = iY * CHARHEIGHT; + + SDL_SetRenderDrawColor ( pRenderer, currentBgColour.r, currentBgColour.g, currentBgColour.b, currentBgColour.a ); + SDL_RenderFillRect ( pRenderer, &dst ); + SDL_SetRenderDrawColor ( pRenderer, 0, 0, 0, currentFgColour.a ); + + if ( bBlinkState || !currentCharacter.blinking ) + { + SDL_SetTextureColorMod ( pCodepage, currentFgColour.r, currentFgColour.g, currentFgColour.b ); + SDL_RenderCopy ( pRenderer, pCodepage, &src, &dst ); + } + + if ( ++iX >= 80 ) + { + iX = 0; + ++iY; + } + } + + SDL_RenderPresent ( pRenderer ); + bValidRender = true; + } + } + + fclose ( pFile ); + SDL_DestroyTexture ( pCodepage ); + SDL_DestroyRenderer ( pRenderer ); + SDL_DestroyWindow ( pWindow ); + IMG_Quit (); + SDL_Quit (); + return 0; +}