From 6eb058bba3933e315f739467d6ae8659ab7ad429 Mon Sep 17 00:00:00 2001 From: mtabachenko Date: Sun, 4 Jan 2009 11:43:00 +0000 Subject: [PATCH] - add extended version string; winport: - add to projects "release" solutions (for developers and beta versions 'Interim') - change about dialog box :) --- desmume/AUTHORS | 2 +- desmume/src/types.h | 38 +- desmume/src/windows/AboutBox.cpp | 49 +- desmume/src/windows/DeSmuME_2005.vcproj | 224 +++- desmume/src/windows/DeSmuME_2008.vcproj | 375 +++--- desmume/src/windows/DeSmuME_Intel.icproj | 1403 +++++++++------------- desmume/src/windows/DeSmuME_Intel.sln | 51 +- desmume/src/windows/DeSmuME_Intel.vcproj | 239 ++-- desmume/src/windows/aviout.cpp | 2 + desmume/src/windows/console.h | 11 + desmume/src/windows/ogl.cpp | 5 +- desmume/src/windows/resource.h | 7 +- desmume/src/windows/resources.rc | 10 +- 13 files changed, 1152 insertions(+), 1264 deletions(-) diff --git a/desmume/AUTHORS b/desmume/AUTHORS index 8411b7a99..271609f04 100644 --- a/desmume/AUTHORS +++ b/desmume/AUTHORS @@ -14,7 +14,7 @@ Ben Jaques (masscat) Jeff Bland Andres Delikat Riccardo Magliocchetti -Max Tabachenko (CrazyMax/mtabachenko) +Max Tabachenko (CrazyMax) zeromus Luigi__ adelikat diff --git a/desmume/src/types.h b/desmume/src/types.h index 4e6597221..836b0cd31 100644 --- a/desmume/src/types.h +++ b/desmume/src/types.h @@ -21,18 +21,44 @@ #define TYPES_HPP #define DESMUME_NAME "DeSmuME" + #ifdef _WIN64 -#define DESMUME_VERSION_STRING "0.9-interim x64" +#define DESMUME_PLATFORM_STRING " x64" #else -#define DESMUME_VERSION_STRING "0.9-interim" +#ifdef _WIN32 +#define DESMUME_PLATFORM_STRING " x86" +#else +#define DESMUME_PLATFORM_STRING "" #endif -#define DESMUME_VERSION_NUMERIC 90000 +#endif + +#ifdef SSE2 +#define DESMUME_CPUEXT_STRING " SSE2" +#else +#define DESMUME_CPUEXT_STRING "" +#endif + +#ifdef DEBUG +#define DESMUME_SUBVERSION_STRING " debug" +#else +#ifdef RELEASE +#define DESMUME_SUBVERSION_STRING "" +#else +#define DESMUME_SUBVERSION_STRING " interim" +#endif +#endif + #ifdef __INTEL_COMPILER -#define DESMUME_NAME_AND_VERSION DESMUME_NAME " " DESMUME_VERSION_STRING " Intel " VERSION +#define DESMUME_COMPILER " (Intel) " #else -#define DESMUME_NAME_AND_VERSION DESMUME_NAME " " DESMUME_VERSION_STRING " " VERSION +// TODO: make for others compilers +#define DESMUME_COMPILER "" #endif +#define DESMUME_VERSION_NUMERIC 90000 +#define DESMUME_VERSION_STRING " " "0.9" DESMUME_PLATFORM_STRING DESMUME_CPUEXT_STRING DESMUME_SUBVERSION_STRING DESMUME_COMPILER +#define DESMUME_NAME_AND_VERSION " " DESMUME_NAME DESMUME_VERSION_STRING + #ifdef _WIN32 #define strcasecmp(x,y) _stricmp(x,y) #else @@ -70,7 +96,7 @@ #endif #ifndef FORCEINLINE -#if defined(_MSC_VER) +#if defined(_MSC_VER) || defined(__INTEL_COMPILER) #define FORCEINLINE __forceinline #else #define FORCEINLINE INLINE diff --git a/desmume/src/windows/AboutBox.cpp b/desmume/src/windows/AboutBox.cpp index b3569f16b..fa730953c 100644 --- a/desmume/src/windows/AboutBox.cpp +++ b/desmume/src/windows/AboutBox.cpp @@ -24,14 +24,11 @@ #include "AboutBox.h" #include "resource.h" -#define TEAM 32 -const char *team[TEAM] = { "Original author", - "---------------", - "yopyop", - "", - "Current team", - "------------", - "Guillaume Duhamel", +#define ABOUT_TIMER_ID 110222 +#define PER_PAGE_TEAM 23 +#define TEAM 26 +#define SIZE_SCROLL_BUFFER PER_PAGE_TEAM + TEAM +const char *team[TEAM] = { "Guillaume Duhamel", "Normmatt", "Bernat Muñoz (shash)", "thoduv", @@ -41,7 +38,7 @@ const char *team[TEAM] = { "Original author", "Jeff Bland", "Andres Delikat", "Riccardo Magliocchetti", - "Max Tabachenko (CrazyMax/mtabachenko)", + "Max Tabachenko (CrazyMax)", "zeromus", "Luigi__", "adelikat", @@ -59,6 +56,9 @@ const char *team[TEAM] = { "Original author", "Theo Berkau"}; +u8 scroll_start; +u8 scroll_buffer[SIZE_SCROLL_BUFFER][255]; + BOOL CALLBACK AboutBox_Proc (HWND dialog, UINT message,WPARAM wparam,LPARAM lparam) { switch(message) @@ -67,13 +67,22 @@ BOOL CALLBACK AboutBox_Proc (HWND dialog, UINT message,WPARAM wparam,LPARAM lpar { char buf[2048]; memset(buf, 0, sizeof(buf)); + wsprintf(buf, "version %s", DESMUME_VERSION_STRING); + SetDlgItemText(dialog, IDC_TXT_VERSION, buf); + + memset(buf, 0, sizeof(buf)); + wsprintf(buf, "compiled: %s %s", __DATE__,__TIME__); + SetDlgItemText(dialog, IDC_TXT_COMPILED, buf); + + for (int i = 0; i < SIZE_SCROLL_BUFFER; i++) + strcpy((char *)scroll_buffer[i], "\n"); for (int i = 0; i < TEAM; i++) { - strcat(buf,team[i]); - strcat(buf,"\n"); + strcpy((char *)scroll_buffer[i + PER_PAGE_TEAM], team[i]); + strcat((char *)scroll_buffer[i + PER_PAGE_TEAM], "\n"); } - - SetDlgItemText(dialog, IDC_AUTHORS_LIST, buf); + SetTimer(dialog, ABOUT_TIMER_ID, 400, (TIMERPROC) NULL); + scroll_start = 0; break; } @@ -81,11 +90,25 @@ BOOL CALLBACK AboutBox_Proc (HWND dialog, UINT message,WPARAM wparam,LPARAM lpar { if((HIWORD(wparam) == BN_CLICKED)&&(((int)LOWORD(wparam)) == IDC_FERMER)) { + KillTimer(dialog, ABOUT_TIMER_ID); EndDialog(dialog,0); return 1; } break; } + + case WM_TIMER: + { + char buf[4096]; + memset(buf, 0, sizeof(buf)); + for (int i = 0; i < PER_PAGE_TEAM; i++) + strcat(buf, (char *)scroll_buffer[i + scroll_start]); + scroll_start++; + if (scroll_start >= SIZE_SCROLL_BUFFER) + scroll_start = 0; + SetDlgItemText(dialog, IDC_AUTHORS_LIST, buf); + break; + } } return 0; } diff --git a/desmume/src/windows/DeSmuME_2005.vcproj b/desmume/src/windows/DeSmuME_2005.vcproj index 68de6ae94..2d3511c41 100644 --- a/desmume/src/windows/DeSmuME_2005.vcproj +++ b/desmume/src/windows/DeSmuME_2005.vcproj @@ -1,7 +1,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -753,7 +661,7 @@ /> + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + DelayImpLib=""/> + Name="LibrarianTool"/> - - - - - - - - - - - - - + Name="ResCmplrTool"/> + + + + + + + + + + - - - + Profile="0" + DelayImpLib=""/> - - - - - - - - - - - - - - - - - + Name="LibrarianTool"/> - - - - - - - - - - - - - - - - - + + + + + + + + + + + Name="LinkerTool" + OutputFile="$(OutDir)\$(ProjectName)_interim.exe" + AdditionalLibraryDirectories=".\zlib123;.\zziplib" + AdditionalDependencies="vfw32.lib winmm.lib comctl32.lib opengl32.lib glu32.lib ws2_32.lib user32.lib gdi32.lib directx\dxguid.lib shell32.lib comdlg32.lib directx\dxerr8.lib directx\dsound.lib directx\dinput8.lib directx\ddraw.lib zlib-2008-x32.lib zziplib-2008-x32.lib shlwapi.lib" + GenerateDebugInformation="1" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + Profile="1" + DelayImpLib=""/> + - - - - + Name="MidlCmplrTool"/> - - - - - - + + + + + - - + Name="GeneralTool" + OutputDirectory="$(SolutionDir)\__bins" + IntermediateDirectory="$(SolutionDir)\.Intel\$(ConfigurationName)\$(PlatformName)" + ConfigurationType="1" + WholeProgramOptimization="1" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"/> + CompileAs="0" + Parallelization="1"/> + Name="LinkerTool" + OutputFile="$(OutDir)\$(ProjectName).exe" + AdditionalLibraryDirectories=".\zlib123;.\zziplib" + AdditionalDependencies="vfw32.lib winmm.lib comctl32.lib opengl32.lib glu32.lib ws2_32.lib user32.lib gdi32.lib directx\dxguid.lib shell32.lib comdlg32.lib directx\dxerr8.lib directx\dsound.lib directx\dinput8.lib directx\ddraw.lib zlib-2008-x32.lib zziplib-2008-x32.lib shlwapi.lib" + GenerateDebugInformation="1" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + Profile="1" + DelayImpLib=""/> + - - - - + Name="MidlCmplrTool"/> + Name="PreBuildEventTool"/> + Name="PreLinkEventTool"/> + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desmume/src/windows/DeSmuME_Intel.sln b/desmume/src/windows/DeSmuME_Intel.sln index bfe6f3b57..415020ed2 100644 --- a/desmume/src/windows/DeSmuME_Intel.sln +++ b/desmume/src/windows/DeSmuME_Intel.sln @@ -1,40 +1,35 @@  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 -Project("{EAF909A5-FA59-4C3D-9431-0FCC20D5BCF9}") = "DeSmuME_Intel", "DeSmuME_Intel.icproj", "{01332293-C619-4B8F-AF74-CA839EE24731}" +Project("{EAF909A5-FA59-4C3D-9431-0FCC20D5BCF9}") = "DeSmuME_Intel", "DeSmuME_Intel.icproj", "{3DA70B4E-4FE0-428C-9084-F6CE33810F6B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release (SSE2)|Win32 = Release (SSE2)|Win32 - Release (SSE2)|x64 = Release (SSE2)|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 + Interim SSE2|Win32 = Interim SSE2|Win32 + Interim|Win32 = Interim|Win32 + Release (public)|Win32 = Release (public)|Win32 + Release SSE2 (public)|Win32 = Release SSE2 (public)|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {01332293-C619-4B8F-AF74-CA839EE24731}.Debug|Win32.ActiveCfg = Debug|Win32 - {01332293-C619-4B8F-AF74-CA839EE24731}.Debug|Win32.Build.0 = Debug|Win32 - {01332293-C619-4B8F-AF74-CA839EE24731}.Debug|x64.ActiveCfg = Debug|x64 - {01332293-C619-4B8F-AF74-CA839EE24731}.Debug|x64.Build.0 = Debug|x64 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release (SSE2)|Win32.ActiveCfg = Release (SSE2)|Win32 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release (SSE2)|Win32.Build.0 = Release (SSE2)|Win32 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release (SSE2)|x64.ActiveCfg = Release (SSE2)|x64 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release (SSE2)|x64.Build.0 = Release (SSE2)|x64 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release|Win32.ActiveCfg = Release|Win32 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release|Win32.Build.0 = Release|Win32 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release|x64.ActiveCfg = Release|x64 - {01332293-C619-4B8F-AF74-CA839EE24731}.Release|x64.Build.0 = Release|x64 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|x64.Build.0 = Release|x64 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|x64.ActiveCfg = Release|x64 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|Win32.Build.0 = Release|Win32 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|Win32.ActiveCfg = Release|Win32 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release (SSE2)|x64.Build.0 = Release (SSE2)|x64 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release (SSE2)|x64.ActiveCfg = Release (SSE2)|x64 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release (SSE2)|Win32.Build.0 = Release (SSE2)|Win32 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release (SSE2)|Win32.ActiveCfg = Release (SSE2)|Win32 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|x64.Build.0 = Debug|x64 - {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|x64.ActiveCfg = Debug|x64 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Debug|Win32.ActiveCfg = Debug|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Debug|Win32.Build.0 = Debug|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Interim SSE2|Win32.ActiveCfg = Interim SSE2|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Interim SSE2|Win32.Build.0 = Interim SSE2|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Interim|Win32.ActiveCfg = Interim|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Interim|Win32.Build.0 = Interim|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Release (public)|Win32.ActiveCfg = Release (public)|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Release (public)|Win32.Build.0 = Release (public)|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Release SSE2 (public)|Win32.ActiveCfg = Release SSE2 (public)|Win32 + {3DA70B4E-4FE0-428C-9084-F6CE33810F6B}.Release SSE2 (public)|Win32.Build.0 = Release SSE2 (public)|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release SSE2 (public)|Win32.Build.0 = Release SSE2 (public)|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release SSE2 (public)|Win32.ActiveCfg = Release SSE2 (public)|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release (public)|Win32.Build.0 = Release (public)|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release (public)|Win32.ActiveCfg = Release (public)|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Interim|Win32.Build.0 = Interim|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Interim|Win32.ActiveCfg = Interim|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Interim SSE2|Win32.Build.0 = Interim SSE2|Win32 + {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Interim SSE2|Win32.ActiveCfg = Interim SSE2|Win32 {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|Win32.Build.0 = Debug|Win32 {9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|Win32.ActiveCfg = Debug|Win32 EndGlobalSection diff --git a/desmume/src/windows/DeSmuME_Intel.vcproj b/desmume/src/windows/DeSmuME_Intel.vcproj index 060478ef6..b86d47101 100644 --- a/desmume/src/windows/DeSmuME_Intel.vcproj +++ b/desmume/src/windows/DeSmuME_Intel.vcproj @@ -11,9 +11,6 @@ - @@ -55,7 +52,7 @@ EnableFiberSafeOptimizations="false" WholeProgramOptimization="false" AdditionalIncludeDirectories=".;..;.\zlib123;.\zziplib" - PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;VERSION=\"DEBUG\";WIN32;BETA_VERSION;SPU_INTERPOLATE;NOMINMAX" + PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;BETA_VERSION;SPU_INTERPOLATE;NOMINMAX" ExceptionHandling="1" BufferSecurityCheck="false" EnableEnhancedInstructionSet="0" @@ -106,95 +103,9 @@ /> - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - + + + + + + + + + #include +#include "debug.h" + void EMU_PrintError(const char* msg) { LOG(msg); } diff --git a/desmume/src/windows/console.h b/desmume/src/windows/console.h index b64a2102a..45d8c8e58 100644 --- a/desmume/src/windows/console.h +++ b/desmume/src/windows/console.h @@ -22,6 +22,9 @@ */ #ifndef _CONSOLE_H_ #define _CONSOLE_H_ + +#ifdef BETA_VERSION + #include "../common.h" #include #include "debug.h" @@ -29,4 +32,12 @@ void OpenConsole(); void CloseConsole(); +#else + +#define OpenConsole() +#define CloseConsole() +#define pringlog(...) + +#endif + #endif \ No newline at end of file diff --git a/desmume/src/windows/ogl.cpp b/desmume/src/windows/ogl.cpp index 88cd5cc1a..cc1c09251 100644 --- a/desmume/src/windows/ogl.cpp +++ b/desmume/src/windows/ogl.cpp @@ -1,5 +1,6 @@ #define WIN32_LEAN_AND_MEAN #include "../common.h" +#include "../debug.h" #include #include #include "console.h" @@ -66,9 +67,9 @@ bool windows_opengl_init() res=CheckHardwareSupport(oglDC); if (res>=0&&res<=2) - LOG("OpenGL mode: %s\n",opengl_modes[res]); + INFO("OpenGL mode: %s\n",opengl_modes[res]); else - LOG("OpenGL mode: uknown\n"); + INFO("OpenGL mode: uknown\n"); oglAlreadyInit = true; diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index c82cad7b9..ac6e22be0 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -1,5 +1,5 @@ //{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. +// Microsoft Visual C++ generated include file. // Used by resources.rc // #define IDM_OPEN 101 @@ -216,7 +216,10 @@ #define IDC_DISPSTATB9 1028 #define IDC_3DCORE 1028 #define IDC_IME9 1029 +#define IDC_TXT_COMPILED 1029 #define IDC_GXSTAT9 1030 +#define IDC_TXT_VERSION 1030 +#define IDC_SCROLLBAR1 1031 #define IDC_IE7 1032 #define IDC_IF7 1033 #define IDC_IME7 1034 @@ -373,7 +376,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 113 #define _APS_NEXT_COMMAND_VALUE 40041 -#define _APS_NEXT_CONTROL_VALUE 1029 +#define _APS_NEXT_CONTROL_VALUE 1032 #define _APS_NEXT_SYMED_VALUE 112 #endif #endif diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index d27470b9d..84025ab0b 100644 --- a/desmume/src/windows/resources.rc +++ b/desmume/src/windows/resources.rc @@ -17,7 +17,7 @@ #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) #ifdef _WIN32 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1252) +#pragma code_page(1251) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// @@ -1340,8 +1340,14 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTI CAPTION "About DeSmuME..." FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN + CTEXT "",IDC_AUTHORS_LIST,7,75,198,188,0,WS_EX_CLIENTEDGE DEFPUSHBUTTON "Close",IDC_FERMER,86,277,50,14 - CTEXT "",IDC_AUTHORS_LIST,7,7,198,264,0,WS_EX_CLIENTEDGE + CTEXT "DeSmuME",IDC_STATIC,7,7,198,10 + CTEXT "version",IDC_TXT_VERSION,7,18,198,8 + RTEXT "compiled",IDC_TXT_COMPILED,7,265,198,8 + CTEXT "Original author",IDC_STATIC,7,36,198,10 + CTEXT "yopyop",IDC_STATIC,9,45,196,10 + CTEXT "current team",IDC_STATIC,8,63,198,10 END IDD_INPUT DIALOGEX 0, 0, 325, 148