From eed7c27708d10e86427fe4902aaabcd74c8b2b46 Mon Sep 17 00:00:00 2001 From: ozkl Date: Fri, 10 Mar 2023 19:29:47 +0300 Subject: [PATCH] main() from outside --- doomgeneric/d_main.c | 40 +++++++++++++++++++++------------------ doomgeneric/dgmain.c | 18 ++++++++++++++++++ doomgeneric/doomgeneric.c | 17 ++++++++++++++++- doomgeneric/doomgeneric.h | 4 ++++ doomgeneric/i_main.c | 7 ++----- 5 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 doomgeneric/dgmain.c diff --git a/doomgeneric/d_main.c b/doomgeneric/d_main.c index c7cf977..9012e5f 100644 --- a/doomgeneric/d_main.c +++ b/doomgeneric/d_main.c @@ -402,6 +402,22 @@ boolean D_GrabMouseCallback(void) return (gamestate == GS_LEVEL) && !demoplayback && !advancedemo; } +void doomgeneric_Tick() +{ + // frame syncronous IO operations + I_StartFrame (); + + TryRunTics (); // will run at least one tic + + S_UpdateSounds (players[consoleplayer].mo);// move positional sounds + + // Update display, next frame, with current state. + if (screenvisible) + { + D_Display (); + } +} + // // D_DoomLoop // @@ -439,21 +455,7 @@ void D_DoomLoop (void) wipegamestate = gamestate; } - while (1) - { - // frame syncronous IO operations - I_StartFrame (); - - TryRunTics (); // will run at least one tic - - S_UpdateSounds (players[consoleplayer].mo);// move positional sounds - - // Update display, next frame, with current state. - if (screenvisible) - { - D_Display (); - } - } + doomgeneric_Tick(); } @@ -1812,14 +1814,16 @@ void D_DoomMain (void) { singledemo = true; // quit after one demo G_DeferedPlayDemo (demolumpname); - D_DoomLoop (); // never returns + D_DoomLoop (); + return; } p = M_CheckParmWithArgs("-timedemo", 1); if (p) { G_TimeDemo (demolumpname); - D_DoomLoop (); // never returns + D_DoomLoop (); + return; } if (startloadgame >= 0) @@ -1836,6 +1840,6 @@ void D_DoomMain (void) D_StartTitle (); // start up intro loop } - D_DoomLoop (); // never returns + D_DoomLoop (); } diff --git a/doomgeneric/dgmain.c b/doomgeneric/dgmain.c new file mode 100644 index 0000000..8f4283c --- /dev/null +++ b/doomgeneric/dgmain.c @@ -0,0 +1,18 @@ +#include + + +#include "doomgeneric.h" + + +int main(int argc, char **argv) +{ + doomgeneric_Create(argc, argv); + + for (int i = 0; ; i++) + { + doomgeneric_Tick(); + } + + + return 0; +} \ No newline at end of file diff --git a/doomgeneric/doomgeneric.c b/doomgeneric/doomgeneric.c index 25675ab..782a7e7 100644 --- a/doomgeneric/doomgeneric.c +++ b/doomgeneric/doomgeneric.c @@ -1,12 +1,27 @@ +#include + +#include "m_argv.h" + #include "doomgeneric.h" uint32_t* DG_ScreenBuffer = 0; +void M_FindResponseFile(void); +void D_DoomMain (void); -void dg_Create() + +void doomgeneric_Create(int argc, char **argv) { + // save arguments + myargc = argc; + myargv = argv; + + M_FindResponseFile(); + DG_ScreenBuffer = malloc(DOOMGENERIC_RESX * DOOMGENERIC_RESY * 4); DG_Init(); + + D_DoomMain (); } diff --git a/doomgeneric/doomgeneric.h b/doomgeneric/doomgeneric.h index c2dc4b5..091621f 100644 --- a/doomgeneric/doomgeneric.h +++ b/doomgeneric/doomgeneric.h @@ -10,7 +10,11 @@ extern uint32_t* DG_ScreenBuffer; +void doomgeneric_Create(int argc, char **argv); +void doomgeneric_Tick(); + +//Implement below functions for your platform void DG_Init(); void DG_DrawFrame(); void DG_SleepMs(uint32_t ms); diff --git a/doomgeneric/i_main.c b/doomgeneric/i_main.c index b192227..80a8117 100644 --- a/doomgeneric/i_main.c +++ b/doomgeneric/i_main.c @@ -34,9 +34,7 @@ void D_DoomMain (void); void M_FindResponseFile(void); -void dg_Create(); - - +/* int main(int argc, char **argv) { // save arguments @@ -48,11 +46,10 @@ int main(int argc, char **argv) // start doom printf("Starting D_DoomMain\r\n"); - - dg_Create(); D_DoomMain (); return 0; } +*/ \ No newline at end of file