From a925b6137fb551a60acf92fdc9e4cf217362bb3a Mon Sep 17 00:00:00 2001 From: oz Date: Sat, 7 Nov 2020 18:41:14 +0300 Subject: [PATCH] winmain v2. FuncStats doc. --- FuncStats.xlsx | Bin 0 -> 31323 bytes SpaceCadetPinball/Sound.cpp | 4 ++ SpaceCadetPinball/Sound.h | 5 +- SpaceCadetPinball/SpaceCadetPinball.vcxproj | 2 + .../SpaceCadetPinball.vcxproj.filters | 6 ++ SpaceCadetPinball/TTextBox.cpp | 6 ++ SpaceCadetPinball/TTextBox.h | 6 +- SpaceCadetPinball/fullscrn.cpp | 5 ++ SpaceCadetPinball/fullscrn.h | 1 + SpaceCadetPinball/gdrv.cpp | 6 ++ SpaceCadetPinball/gdrv.h | 7 +++ SpaceCadetPinball/pb.cpp | 5 ++ SpaceCadetPinball/pb.h | 1 + SpaceCadetPinball/render.cpp | 8 +++ SpaceCadetPinball/render.h | 1 + SpaceCadetPinball/score.cpp | 5 ++ SpaceCadetPinball/score.h | 4 +- SpaceCadetPinball/winmain.cpp | 57 ++++++++++++++---- SpaceCadetPinball/winmain.h | 19 ++++-- 19 files changed, 126 insertions(+), 22 deletions(-) create mode 100644 FuncStats.xlsx create mode 100644 SpaceCadetPinball/gdrv.cpp create mode 100644 SpaceCadetPinball/gdrv.h diff --git a/FuncStats.xlsx b/FuncStats.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fcff112ace372aedac8064ebebe54a4845cbdbdc GIT binary patch literal 31323 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 M1s1`K2lU(j1EUnr8~^|S literal 0 HcmV?d00001 diff --git a/SpaceCadetPinball/Sound.cpp b/SpaceCadetPinball/Sound.cpp index 13dfcfe..115418e 100644 --- a/SpaceCadetPinball/Sound.cpp +++ b/SpaceCadetPinball/Sound.cpp @@ -4,3 +4,7 @@ void Sound::Enable(int a1, int a2, int a3) { } + +void Sound::nullsub_1(int a1, int a2, int a3) +{ +} diff --git a/SpaceCadetPinball/Sound.h b/SpaceCadetPinball/Sound.h index 48e5d77..a7f123f 100644 --- a/SpaceCadetPinball/Sound.h +++ b/SpaceCadetPinball/Sound.h @@ -1,6 +1,7 @@ #pragma once class Sound -{public: +{ +public: static void Enable(int a1, int a2, int a3); + static void nullsub_1(int a1, int a2, int a3); }; - diff --git a/SpaceCadetPinball/SpaceCadetPinball.vcxproj b/SpaceCadetPinball/SpaceCadetPinball.vcxproj index e6b0724..c05b169 100644 --- a/SpaceCadetPinball/SpaceCadetPinball.vcxproj +++ b/SpaceCadetPinball/SpaceCadetPinball.vcxproj @@ -155,6 +155,7 @@ + @@ -203,6 +204,7 @@ + diff --git a/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters b/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters index 26cc806..7b6d392 100644 --- a/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters +++ b/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters @@ -159,6 +159,9 @@ Header Files + + Header Files + @@ -296,6 +299,9 @@ Source Files + + Source Files + diff --git a/SpaceCadetPinball/TTextBox.cpp b/SpaceCadetPinball/TTextBox.cpp index 14b2a3d..4f9984b 100644 --- a/SpaceCadetPinball/TTextBox.cpp +++ b/SpaceCadetPinball/TTextBox.cpp @@ -1,2 +1,8 @@ #include "pch.h" #include "TTextBox.h" + + +int TTextBox::Message(int a2, float a3) +{ + return 0; +} \ No newline at end of file diff --git a/SpaceCadetPinball/TTextBox.h b/SpaceCadetPinball/TTextBox.h index 978814c..2a66046 100644 --- a/SpaceCadetPinball/TTextBox.h +++ b/SpaceCadetPinball/TTextBox.h @@ -1,11 +1,13 @@ #pragma once #include "TPinballComponent.h" + class TTextBox : - public TPinballComponent + public TPinballComponent { public: TTextBox(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, false) { } -}; + int Message(int a2, float a3) override; +}; diff --git a/SpaceCadetPinball/fullscrn.cpp b/SpaceCadetPinball/fullscrn.cpp index 8eeeeb3..d3d4498 100644 --- a/SpaceCadetPinball/fullscrn.cpp +++ b/SpaceCadetPinball/fullscrn.cpp @@ -157,3 +157,8 @@ void fullscrn::GetWindowCenter() if (MenuEnabled) yDest -= GetSystemMetrics(15); } + +void fullscrn::force_redraw() +{ + BYTE1(fullscrn_flag1) |= 0x80u; +} \ No newline at end of file diff --git a/SpaceCadetPinball/fullscrn.h b/SpaceCadetPinball/fullscrn.h index c245397..cad24c7 100644 --- a/SpaceCadetPinball/fullscrn.h +++ b/SpaceCadetPinball/fullscrn.h @@ -17,6 +17,7 @@ public: static int trick; static int set_screen_mode(int isFullscreen); + static void force_redraw(); private : static int MenuEnabled; static HMENU MenuHandle; diff --git a/SpaceCadetPinball/gdrv.cpp b/SpaceCadetPinball/gdrv.cpp new file mode 100644 index 0000000..846ea09 --- /dev/null +++ b/SpaceCadetPinball/gdrv.cpp @@ -0,0 +1,6 @@ +#include "pch.h" +#include "gdrv.h" + +void gdrv::get_focus() +{ +} diff --git a/SpaceCadetPinball/gdrv.h b/SpaceCadetPinball/gdrv.h new file mode 100644 index 0000000..70a44dc --- /dev/null +++ b/SpaceCadetPinball/gdrv.h @@ -0,0 +1,7 @@ +#pragma once +class gdrv +{ +public: + static void get_focus(); +}; + diff --git a/SpaceCadetPinball/pb.cpp b/SpaceCadetPinball/pb.cpp index 0973f0e..298b92e 100644 --- a/SpaceCadetPinball/pb.cpp +++ b/SpaceCadetPinball/pb.cpp @@ -17,3 +17,8 @@ void pb::firsttime_setup() render::update(); render::blit = 1; } + +void pb::paint() +{ + render::paint(); +} \ No newline at end of file diff --git a/SpaceCadetPinball/pb.h b/SpaceCadetPinball/pb.h index 50b599c..d1d044b 100644 --- a/SpaceCadetPinball/pb.h +++ b/SpaceCadetPinball/pb.h @@ -6,6 +6,7 @@ class pb public: static void reset_table(); static void firsttime_setup(); + static void paint(); private: static TPinballTable* MainTable; }; diff --git a/SpaceCadetPinball/render.cpp b/SpaceCadetPinball/render.cpp index 228cdc5..71beaa0 100644 --- a/SpaceCadetPinball/render.cpp +++ b/SpaceCadetPinball/render.cpp @@ -6,3 +6,11 @@ int render::blit = 0; void render::update() { } + + +void render::paint() +{ + /*render_paint_balls(); + gdrv_blat((int)&vscreen, xDest, yDest); + render_unpaint_balls();*/ +} \ No newline at end of file diff --git a/SpaceCadetPinball/render.h b/SpaceCadetPinball/render.h index 13ff8a5..8555168 100644 --- a/SpaceCadetPinball/render.h +++ b/SpaceCadetPinball/render.h @@ -4,5 +4,6 @@ class render public: static int blit; static void update(); + static void paint(); }; diff --git a/SpaceCadetPinball/score.cpp b/SpaceCadetPinball/score.cpp index 25ec533..5fbbbe3 100644 --- a/SpaceCadetPinball/score.cpp +++ b/SpaceCadetPinball/score.cpp @@ -5,6 +5,11 @@ #include "partman.h" +int score::init() +{ + return 1; +} + scoreStruct* score::create(LPCSTR fieldName, int renderBgBmp) { scoreStruct* score = (scoreStruct*)memory::allocate(sizeof(scoreStruct)); diff --git a/SpaceCadetPinball/score.h b/SpaceCadetPinball/score.h index 10ed909..0bbc71c 100644 --- a/SpaceCadetPinball/score.h +++ b/SpaceCadetPinball/score.h @@ -1,6 +1,6 @@ #pragma once -struct scoreStruct +struct scoreStruct { int Unknown1; int Unknown2; @@ -24,7 +24,7 @@ struct scoreStruct class score { public: + static int init(); static scoreStruct* create(LPCSTR fieldName, int renderBgBmp); static scoreStruct* dup(scoreStruct* score, int scoreIndex); }; - diff --git a/SpaceCadetPinball/winmain.cpp b/SpaceCadetPinball/winmain.cpp index 3eb2231..f83ecef 100644 --- a/SpaceCadetPinball/winmain.cpp +++ b/SpaceCadetPinball/winmain.cpp @@ -7,16 +7,16 @@ #include "options.h" #include "pb.h" -int iFrostUniqueMsg, return_value = 0, bQuit = 0; - -int check_expiration_date() -{ - return 0; -} +int winmain::iFrostUniqueMsg, winmain::return_value = 0, winmain::bQuit = 0; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { - memory::init(winmain_memalloc_failure); + return winmain::WinMain(hInstance, hPrevInstance, lpCmdLine, nShowCmd); +} + +int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) +{ + memory::init(memalloc_failure); ++memory::critical_allocation; auto optionsRegPath = pinball::get_rc_string(165, 0); options::path_init(optionsRegPath); @@ -97,7 +97,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine if (check_expiration_date()) return 0; - INITCOMMONCONTROLSEX picce{}; + INITCOMMONCONTROLSEX picce; picce.dwSize = 8; picce.dwICC = 5885; InitCommonControlsEx(&picce); @@ -157,7 +157,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine MSG wndMessage{}; while (timeGetTime() >= startTime && timeGetTime() - startTime < 2000) PeekMessageA(&wndMessage, pinball::hwnd_frame, 0, 0, 1u); - + while (true) { if (!ProcessWindowMessages() || bQuit) @@ -168,12 +168,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine return return_value; } -LRESULT CALLBACK message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +LRESULT CALLBACK winmain::message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return DefWindowProcA(hWnd, Msg, wParam, lParam); } -int ProcessWindowMessages() +int winmain::ProcessWindowMessages() { MSG Msg{}; // [esp+8h] [ebp-1Ch] @@ -202,7 +202,7 @@ int ProcessWindowMessages() return 1; } -void winmain_memalloc_failure() +void winmain::memalloc_failure() { /*midi_music_stop(); Sound_Close(); @@ -212,3 +212,36 @@ void winmain_memalloc_failure() MessageBoxA(nullptr, text, caption, 0x2030u); _exit(1); } + +int winmain::check_expiration_date() +{ + return 0; +} + + +HDC winmain::_BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint) +{ + HDC context = BeginPaint(hWnd, lpPaint); + if (hWnd && GetLayout(context) & 1) + SetLayout(context, 0); + return context; +} + +HDC winmain::_GetDC(HWND hWnd) +{ + HDC context = GetDC(hWnd); + if (hWnd && GetLayout(context) & 1) + SetLayout(context, 0); + return context; +} + +int winmain::a_dialog(HINSTANCE hInstance, HWND hWnd) +{ + char appName[100]; + char szOtherStuff[100]; + + lstrcpyA(appName, pinball::get_rc_string(38, 0)); + lstrcpyA(szOtherStuff, pinball::get_rc_string(102, 0)); + auto icon = LoadIconA(hInstance, "ICON_1"); + return ShellAboutA(hWnd, appName, szOtherStuff, icon); +} diff --git a/SpaceCadetPinball/winmain.h b/SpaceCadetPinball/winmain.h index 12bf82f..d0e4115 100644 --- a/SpaceCadetPinball/winmain.h +++ b/SpaceCadetPinball/winmain.h @@ -1,6 +1,17 @@ #pragma once -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); -static void winmain_memalloc_failure(); -static LRESULT CALLBACK message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); -int ProcessWindowMessages(); +class winmain +{ +public: + static int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); + static LRESULT CALLBACK message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); + static void memalloc_failure(); + static int ProcessWindowMessages(); + static int check_expiration_date(); + static HDC _GetDC(HWND hWnd); + static int a_dialog(HINSTANCE hInstance, HWND hWnd); +private: + static int iFrostUniqueMsg, return_value , bQuit; + + static HDC _BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint); +};