Skip to content

Commit

Permalink
Merge pull request #6 from Im-Rises/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
Im-Rises authored May 24, 2023
2 parents 74aa0e5 + c69b45a commit d8b0d6f
Showing 1 changed file with 43 additions and 3 deletions.
46 changes: 43 additions & 3 deletions CubeAscii/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
#include <stdio.h>
#include <string.h>

#ifdef __unix__
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#include <signal.h>
#endif

#include <stdlib.h>
Expand All @@ -19,7 +22,7 @@
#define PROJECT_AUTHOR "Quentin MOREL (Im-Rises)"
#define PROJECT_NAME "CubeAscii"
#define PROJECT_REPOSITORY "https://github.com/Im-Rises/CubeAscii/"
#define VERSION "1.0.0"
#define VERSION "1.1.0"

#define OPTION_CUBE_COUNT "-c"
#define OPTION_CUBE_GRAY_MODE "-g"
Expand Down Expand Up @@ -91,6 +94,26 @@ void printToConsole(Screen* screen);
void printToConsoleColored(Screen* screen);
void mainLoop(Screen* screen, Cube* cubeArray, int cubeCount, void (*printCubePtr)(Screen*));

/* Exit handlers*/
int exitMainLoopFlag = 0;
#ifdef _WIN32
BOOL CtrlHandler(DWORD ctrlType) {
if (ctrlType == CTRL_C_EVENT)
{
exitMainLoopFlag = 1;
return TRUE;
}
return FALSE;
}
#else
void signalHandler(int signum) {
if (signum == SIGINT)
{
exitMainLoopFlag = 1;
}
}
#endif

/* Main */
int main(int argc, char** argv) {
/* Initialize the random number generator */
Expand Down Expand Up @@ -120,10 +143,16 @@ int main(int argc, char** argv) {
/* Main loop */
mainLoop(&screen, cubeArray, cubeCount, printCubePtr);

/* Stop message */
printf("\nExiting...\n");

/* Free memory */
free(screen.buffer);
free(screen.zBuffer);

/* Reset default foreground */
printf(ESC_RESET_FG);

return 0;
}

Expand Down Expand Up @@ -397,14 +426,25 @@ void printToConsoleColored(Screen* screen) {
}

void mainLoop(Screen* screen, Cube* cubeArray, int cubeCount, void (*printCubePtr)(Screen*)) {
/* Set signal handler */
#ifdef _WIN32
if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE))
{
fprintf(stderr, "Error setting up Ctrl+C signal handler.\n");
exit(1);
}
#else
signal(SIGINT, signalHandler);
#endif

/* Clear screen */
printf(ESC_CLEAR_SCREEN);

// start timer
clock_t startClock = clock();

/* Main loop */
while (1)
while (!exitMainLoopFlag)
{
/* Refresh buffers */
clearScreenBuffers(screen);
Expand Down

0 comments on commit d8b0d6f

Please sign in to comment.