diff --git a/data/Tupfile.lua b/data/Tupfile.lua index c5e6578ac4..cc785c2700 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -51,7 +51,6 @@ img_files = { {"File Managers/EOLITE.INI", "common/File Managers/eolite.ini"}, {"File Managers/ICONS.INI", "common/File Managers/icons.ini"}, {"File Managers/KFM.INI", "common/File Managers/kfm.ini"}, - {"GAMES/CHECKERS", build_type .. "/games/checkers"}, {"GAMES/MEGAMAZE", build_type .. "/games/megamaze"}, {"LIB/PIXLIB.OBJ", "common/lib/pixlib.obj"}, {"LIB/ICONV.OBJ", "common/lib/iconv.obj"}, @@ -456,6 +455,7 @@ if tup.getconfig('NO_GCC') ~= 'full' then tup.append_table(img_files, { {"3D/CUBELINE", PROGS .. "/demos/cubeline/trunk/cubeline"}, {"3D/GEARS", PROGS .. "/demos/gears/trunk/gears"}, + {"GAMES/CHECKERS", PROGS .. "/games/checkers/trunk/checkers"}, {"GAMES/REVERSI", PROGS .. "/games/reversi/trunk/reversi"}, {"SHELL", PROGS .. "/system/shell/shell"}, }) diff --git a/data/eng/games/checkers b/data/eng/games/checkers deleted file mode 100644 index ddf9409e5e..0000000000 Binary files a/data/eng/games/checkers and /dev/null differ diff --git a/data/et/games/checkers b/data/et/games/checkers deleted file mode 100644 index ddf9409e5e..0000000000 Binary files a/data/et/games/checkers and /dev/null differ diff --git a/data/it/games/checkers b/data/it/games/checkers deleted file mode 100755 index ddf9409e5e..0000000000 Binary files a/data/it/games/checkers and /dev/null differ diff --git a/data/rus/games/checkers b/data/rus/games/checkers deleted file mode 100644 index f9933af9a4..0000000000 Binary files a/data/rus/games/checkers and /dev/null differ diff --git a/data/sp/games/checkers b/data/sp/games/checkers deleted file mode 100644 index ddf9409e5e..0000000000 Binary files a/data/sp/games/checkers and /dev/null differ diff --git a/programs/develop/libraries/menuetlibc/include/assert.h b/programs/develop/libraries/menuetlibc/include/assert.h index f855632f97..165575f2e4 100644 --- a/programs/develop/libraries/menuetlibc/include/assert.h +++ b/programs/develop/libraries/menuetlibc/include/assert.h @@ -4,7 +4,11 @@ #undef assert #undef unimpl +#ifdef NDEBUG +#define assert(test) /*nothing*/ +#else #define assert(test) ((void)((test)||(__dj_assert(#test,__FILE__,__LINE__),0))) +#endif #define unimpl() __dj_unimp("Called unimplemented function in file \"" __FILE__ "\"\n") #ifndef __dj_include_assert_h_ diff --git a/programs/develop/libraries/menuetlibc/include/time.h b/programs/develop/libraries/menuetlibc/include/time.h index a4372468e6..0e9e02824c 100644 --- a/programs/develop/libraries/menuetlibc/include/time.h +++ b/programs/develop/libraries/menuetlibc/include/time.h @@ -10,10 +10,7 @@ extern "C" { #ifndef __dj_ENFORCE_ANSI_FREESTANDING -/* 65536(tics/hour) / 3600(sec/hour) * 5(scale) = 91.02 - The 5 is to make it a whole number (18.2*5=91) so that - floating point ops aren't required to use it. */ -#define CLOCKS_PER_SEC 91 +#define CLOCKS_PER_SEC 100 #include diff --git a/programs/develop/libraries/menuetlibc/src/libc/Tupfile.lua b/programs/develop/libraries/menuetlibc/src/libc/Tupfile.lua index 2bb0a0ed67..3803964b82 100644 --- a/programs/develop/libraries/menuetlibc/src/libc/Tupfile.lua +++ b/programs/develop/libraries/menuetlibc/src/libc/Tupfile.lua @@ -68,7 +68,7 @@ FOLDERS = { "termios", } -CFLAGS="-Os -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -fno-ident -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpreferred-stack-boundary=2" +CFLAGS="-Os -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -fno-ident -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpreferred-stack-boundary=2 -march=pentium-mmx" OBJS={} for i,v in ipairs(FOLDERS) do tup.append_table(OBJS, diff --git a/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/printf.c b/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/printf.c index 1356a46b2f..38b0abf0fa 100644 --- a/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/printf.c +++ b/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/printf.c @@ -1,5 +1,6 @@ /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ #include +#include #include int diff --git a/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/sprintf.c b/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/sprintf.c index 9fd48b9d46..b3833c90e5 100644 --- a/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/sprintf.c +++ b/programs/develop/libraries/menuetlibc/src/libc/ansi/stdio/sprintf.c @@ -1,5 +1,6 @@ /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ #include +#include #include #include diff --git a/programs/develop/libraries/menuetlibc/src/libc/crt0/crt1.c b/programs/develop/libraries/menuetlibc/src/libc/crt0/crt1.c index c5a2d12635..f7839536b5 100644 --- a/programs/develop/libraries/menuetlibc/src/libc/crt0/crt1.c +++ b/programs/develop/libraries/menuetlibc/src/libc/crt0/crt1.c @@ -36,7 +36,6 @@ extern char __menuet__app_param_area[]; void __crt1_startup(void) { init_brk(); - if(__menuet__app_param_area[0]!='\0') __crt0_setup_arguments(); dosemu_inithandles(); init_dir_stack(); diff --git a/programs/develop/libraries/menuetlibc/src/libc/pc_hw/timer/clock.c b/programs/develop/libraries/menuetlibc/src/libc/pc_hw/timer/clock.c index c8f39cfda6..6ebde15686 100644 --- a/programs/develop/libraries/menuetlibc/src/libc/pc_hw/timer/clock.c +++ b/programs/develop/libraries/menuetlibc/src/libc/pc_hw/timer/clock.c @@ -6,5 +6,7 @@ clock_t clock(void) { - return 0; + unsigned result; + __asm__ __volatile__("int $0x40" : "=a"(result) : "a"(26), "b"(9)); + return result; } diff --git a/programs/develop/libraries/menuetlibc/src/libcpp/Tupfile.lua b/programs/develop/libraries/menuetlibc/src/libcpp/Tupfile.lua index b7220a101f..d3f3e8b362 100644 --- a/programs/develop/libraries/menuetlibc/src/libcpp/Tupfile.lua +++ b/programs/develop/libraries/menuetlibc/src/libcpp/Tupfile.lua @@ -1,5 +1,5 @@ if tup.getconfig('NO_GCC') ~= "" then return end -CFLAGS = "-Os -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -fno-ident -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpreferred-stack-boundary=2" +CFLAGS = "-Os -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -fno-ident -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpreferred-stack-boundary=2 -march=pentium-mmx" OBJS = tup.foreach_rule({"*.cpp", extra_inputs = {"../../config.h"}}, 'kos32-gcc -c -I../../include -D__DEV_CONFIG_H=\\"../../config.h\\" ' .. CFLAGS .. " -o %o %f", "%B.o") diff --git a/programs/develop/libraries/menuetlibc/src/libm/Tupfile.lua b/programs/develop/libraries/menuetlibc/src/libm/Tupfile.lua index feeceeefe4..3c3a26936d 100644 --- a/programs/develop/libraries/menuetlibc/src/libm/Tupfile.lua +++ b/programs/develop/libraries/menuetlibc/src/libm/Tupfile.lua @@ -1,5 +1,5 @@ if tup.getconfig('NO_GCC') ~= "" then return end -CFLAGS="-D_USE_LIBM_MATH_H -Os -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -fno-ident -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpreferred-stack-boundary=2" +CFLAGS="-D_USE_LIBM_MATH_H -Os -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -fno-ident -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpreferred-stack-boundary=2 -march=pentium-mmx" OBJS = tup.foreach_rule({"*.c", extra_inputs = {"../../config.h"}}, 'kos32-gcc -c -I../../include -D__DEV_CONFIG_H=\\"../../config.h\\" ' .. CFLAGS .. ' -o %o %f', "%B.o") diff --git a/programs/develop/libraries/menuetlibc/src/libm/k_standa.c b/programs/develop/libraries/menuetlibc/src/libm/k_standa.c index 46b51624de..4b2f5ed766 100644 --- a/programs/develop/libraries/menuetlibc/src/libm/k_standa.c +++ b/programs/develop/libraries/menuetlibc/src/libm/k_standa.c @@ -28,7 +28,7 @@ static char rcsid[] = "$Id: k_standard.c,v 1.4 1994/08/10 20:31:44 jtc Exp $"; #undef fflush #endif /* !defined(_USE_WRITE) */ -inline int fputs(const char* str, FILE* f) { return -1; } +#define fputs /*nothing*/ #ifdef __STDC__ static const double zero = 0.0; /* used as const */ diff --git a/programs/games/checkers/trunk/board.h b/programs/games/checkers/trunk/board.h index 59f3edfb28..cb64f25fce 100644 --- a/programs/games/checkers/trunk/board.h +++ b/programs/games/checkers/trunk/board.h @@ -1,14 +1,12 @@ #ifndef _HEADER_BOARD_H #define _HEADER_BOARD_H -#ifndef __MENUET__ #include #include #include #include #include #include -#endif #include "position.h" #include "history.h" #include "gr-draw.h" @@ -527,7 +525,7 @@ int TChBoard::GetTextLineY() const return (y + height - delta_size.y) / 2; } -#ifdef BUILD_RUS +#ifdef LANG_RUS #define aCheckersGame " 誨." #define aRedMoves " 室." #define aBlueMoves " 室." diff --git a/programs/games/checkers/trunk/buttons.h b/programs/games/checkers/trunk/buttons.h index ac0dbba432..a52790dc4a 100644 --- a/programs/games/checkers/trunk/buttons.h +++ b/programs/games/checkers/trunk/buttons.h @@ -1,11 +1,9 @@ #ifndef _HEADER_BUTTONS_H #define _HEADER_BUTTONS_H -#ifndef __MENUET__ #include #include #include -#endif #include "gr-draw.h" struct TXButton diff --git a/programs/games/checkers/trunk/checkers.cpp b/programs/games/checkers/trunk/checkers.cpp index e6c7e3ff79..210b396587 100644 --- a/programs/games/checkers/trunk/checkers.cpp +++ b/programs/games/checkers/trunk/checkers.cpp @@ -1,254 +1,32 @@ - -#ifndef AUTOBUILD -#include "lang.h" -#endif -//#define BUILD_RUS -#ifndef __MENUET__ +//#define LANG_RUS +#define NDEBUG #include #include #include #include #include -#else -#include -#include -using namespace Menuet; -#define strlen StrLen -#define strcpy StrCopy -#define memcpy MemCopy -#include -const unsigned dectab[] = { 1000000000, 100000000, 10000000, 1000000, 100000, - 10000, 1000, 100, 10, 0 }; -int sprintf( char *Str, char* Format, ... ) -{ - int i, fmtlinesize, j, k, flag; - unsigned head, tail; - char c; - va_list arglist; - // - va_start(arglist, Format); - // - fmtlinesize = strlen( Format ); - // - if( fmtlinesize == 0 ) return 0; - - // - for( i = 0, j = 0; i < fmtlinesize; i++ ) - { - // - c = Format[i]; - // - if( c != '%' ) - { - Str[j++] = c; - continue; - } - // - i++; - // - if( i >= fmtlinesize ) break; - - // - flag = 0; - // - c = Format[i]; - if (c == 'l') c = Format[++i]; - // - switch( c ) - { - // - case '%': - Str[j++] = c; - break; - // - case 's': - char* str; - str = va_arg(arglist, char*); - for( k = 0; ( c = str[k] ) != 0; k++ ) - { - Str[j++] = c; - } - break; - // - case 'c': - Str[j++] = va_arg(arglist, int) & 0xFF; - break; - // - case 'u': - case 'd': - head = va_arg(arglist, unsigned); - for( k = 0; dectab[k] != 0; k++ ) - { - tail = head % dectab[k]; - head /= dectab[k]; - c = head + '0'; - if( c == '0' ) - { - if( flag ) Str[j++] = c; - } - else - { - flag++; - Str[j++] = c; - } - // - head = tail; - } - // - c = head + '0'; - Str[j++] = c; - break; - default: - break; - } - } - // - Str[j] = 0; - return j; -} -int isdigit(int c) +// sprintf is too heavy +int itoa(char* dst, int number) { - return (c>='0' && c<='9'); -} -int atoi(const char* string) -{ - int res=0; - int sign=0; - const char* ptr; - for (ptr=string; *ptr && *ptr<=' ';ptr++); - if (*ptr=='-') {sign=1;++ptr;} - while (*ptr >= '0' && *ptr <= '9') - { - res = res*10 + *ptr++ - '0'; + int result = 0; + if (number < 0) { + result++; + *dst++ = '-'; + number = -number; } - if (sign) res = -res; - return res; -} -int islower(int c) -{ - return (c>='a' && c<='z'); -} -int abs(int n) -{ - return (n<0)?-n:n; -} -int memcmp(const void* buf1, const void* buf2, unsigned count) -{ - const char* ptr1 = (const char*)buf1; - const char* ptr2 = (const char*)buf2; - unsigned i=0; - while (i' -#define XK_minus '-' -#define XK_equal '=' -#define XK_underscore '_' -#define XK_plus '+' -#define XK_Delete 0xB6 -#define XK_F8 0x39 -#define XK_l 'l' -#define XK_L 'L' -#define XK_F2 0x33 -#define XK_s 's' -#define XK_S 'S' -#define XK_slash '/' -#define XK_question '?' -#define XK_n 'n' -#define XK_N 'N' -#define XK_t 't' -#define XK_T 'T' -#define XK_r 'r' -#define XK_R 'R' -#define XK_b 'b' -#define XK_B 'B' -#define XK_f 'f' -#define XK_F 'F' -#define assert(a) /* nothing */ -#include "qsort.c" -#endif #include "gr-draw.h" #include "board.h" #include "player.h" @@ -272,7 +50,7 @@ public: void Add(const PlayWrite &pl); PlayWrite &operator[](int i) {return play[i];} int GetNPlay() const {return nplay;} -#ifndef __MENUET__ +#ifndef NO_FILES int OpenFile(const char *name, int kind); int MsgOpenFile(const char *name, int kind); int SaveFile(const char *name, int num, int kind); @@ -285,7 +63,7 @@ protected: PlayWrite *play; int nplay, mplay; protected: -#ifndef __MENUET__ +#ifndef NO_FILES static const char *const search[]; static int AnalizeKind(FILE *f, const int w[], const char *smb = 0); static int ReadFileTo(FILE *f, char c); @@ -294,8 +72,7 @@ protected: #endif }; -#ifndef __MENUET__ -#if LANG_RUS //Pending Russian Translations +#ifdef LANG_RUS //Pending Russian Translations #define CHECKERS_CANT_OPEN_STR "\n誨: 䠩 \"%s\".\n" #define CHECKERS_FILE_EMPTY_STR "\n誨: \"%s\" .\n" #define CHECKERS_INVALID_FILE_STR "\n誨: \"%s\" 訡.\n" @@ -325,8 +102,10 @@ protected: #define EXIT_STR "exit" #define CHECKERS_INVALID_STR "Checkers: Invalid key %s\n" +#ifndef NO_FILES const char *const TPlayArray::search[] = {"checkers-", "play:", "text", "bin_1.0\n", "history_", "1.0", "1.1"}; +#endif #else /*For all other languages except RUS*/ #define CHECKERS_CANT_OPEN_STR "\nCheckers: Can't open the file \"%s\".\n" @@ -357,10 +136,12 @@ const char *const TPlayArray::search[] = #define ROTATE_BOARD_STR "rotate board" #define EXIT_STR "exit" #define CHECKERS_INVALID_STR "Checkers: Invalid key %s\n" + +#ifndef NO_FILES const char *const TPlayArray::search[] = {"checkers-", "play:", "text", "bin_1.0\n", "history_", "1.0", "1.1"}; - #endif + #endif void TPlayArray::Clear() { @@ -392,7 +173,7 @@ void TPlayArray::Add(const PlayWrite &pl) nplay++; } -#ifndef __MENUET__ +#ifndef NO_FILES int TPlayArray::AnalizeKind(FILE *f, const int w[], const char *smb) { int i, L, was1 = 1; @@ -880,22 +661,22 @@ protected: void TMainDraw::InitButton() { - char newgame_literal[] = NEW_GAME_STR; - char list_literal[] = LIST_STR; - char delete_literal[] = DELETE_STR; - char clear_literal[] = CLEAR_STR; - char save_literal[] = SAVE_STR; - char rotateboard_literal[] = ROTATE_BOARD_STR; - char exit_literal[] = EXIT_STR; + static char newgame_literal[] = NEW_GAME_STR; + static char list_literal[] = LIST_STR; + static char delete_literal[] = DELETE_STR; + static char clear_literal[] = CLEAR_STR; + static char save_literal[] = SAVE_STR; + static char rotateboard_literal[] = ROTATE_BOARD_STR; + static char exit_literal[] = EXIT_STR; - char one_literal[] = "1"; - char dash_literal[] = "-"; - char plus_literal[] = "+"; - char leftshift_literal[] = "<<"; - char rightshift_literal[] = ">>"; - char lessthan_literal[] = "<"; - char greaterthan_literal[] = ">"; - char xor_literal[] = "^"; + static char one_literal[] = "1"; + static char dash_literal[] = "-"; + static char plus_literal[] = "+"; + static char leftshift_literal[] = "<<"; + static char rightshift_literal[] = ">>"; + static char lessthan_literal[] = "<"; + static char greaterthan_literal[] = ">"; + static char xor_literal[] = "^"; button.Add(1, 80, 22, newgame_literal); button.Add(6, 60, 22, list_literal); @@ -909,7 +690,7 @@ void TMainDraw::InitButton() play_list->SetDefW(); button.Add(play_list); button.Add(24, 50, 22, clear_literal); -#ifndef __MENUET__ +#ifndef NO_FILES button.Add(25, 50, 22, save_literal); #endif button.Add(2, 120, 22, player_str[0]); @@ -970,7 +751,7 @@ void TMainDraw::SetButtonKind(const TChBoard &board) if (bt1) bt1->drw = is_drw; bt1 = button.GetButton(7); if (bt1) bt1->drw = !is_drw; -#ifndef __MENUET__ +#ifndef NO_FILES bt1 = button.GetButton(25); if (bt1) bt1->drw = !is_drw; #endif @@ -982,20 +763,18 @@ void TMainDraw::SetButtonKind(const TChBoard &board) if (is_drw) { play_num[0][0] = 0; play_num[1][0] = 0; - if (cur_play >= 0) sprintf(play_num[0], "%d", cur_play + 1); - sprintf(play_num[1], "%d", play.GetNPlay()); + if (cur_play >= 0) itoa(play_num[0], cur_play + 1); + itoa(play_num[1], play.GetNPlay()); thick = (cur_play <= 0) ? 0 : 3; -#define dynamic_cast static_cast - txb = dynamic_cast(play_list->a.GetButton(21)); + txb = static_cast(play_list->a.GetButton(21)); if (txb) txb->thick = thick; - txb = dynamic_cast(play_list->a.GetButton(26)); + txb = static_cast(play_list->a.GetButton(26)); if (txb) txb->thick = thick; thick = (cur_play >= play.GetNPlay() - 1) ? 0 : 3; - txb = dynamic_cast(play_list->a.GetButton(22)); + txb = static_cast(play_list->a.GetButton(22)); if (txb) txb->thick = thick; - txb = dynamic_cast(play_list->a.GetButton(27)); + txb = static_cast(play_list->a.GetButton(27)); if (txb) txb->thick = thick; -#undef dynamic_cast } } @@ -1073,7 +852,7 @@ void TMainDraw::PressLS(int n, TChBoard &board, TGraphDraw *drw) } } else if (n == 24) {play.Clear(); cur_play = 0; need_redraw = 1;} -#ifndef __MENUET__ +#ifndef NO_FILES else if (n == 25) { if (play.GetNPlay() > 0) play.MsgSaveFile(def_savefile, -1, def_savekind); @@ -1313,7 +1092,7 @@ int TMainData::EventFunction(const TGraphDraw::event &ev) else if (ev.key.k == XK_Delete) data.main_draw.PressLS(7, data.board, ev.button.drw); else if (ev.key.k == XK_F8) data.main_draw.PressLS(24, data.board, ev.button.drw); else if (ev.key.k == XK_l || ev.key.k == XK_L) data.main_draw.PressLS(6, data.board, ev.button.drw); -#ifndef __MENUET__ +#ifndef NO_FILES else if (ev.key.k == XK_F2) data.main_draw.PressLS(25, data.board, ev.button.drw); #endif else if (ev.key.k == XK_s || ev.key.k == XK_S) data.main_draw.PressLS(28, data.board, ev.button.drw); @@ -1342,11 +1121,12 @@ int TMainData::EventFunction(const TGraphDraw::event &ev) return ret; } -#ifndef __MENUET__ int main(int argc, char **argv) { randomize(); +#ifndef NO_FILES THistory::InitHFile(argv[0]); +#endif TMainData data(-1); if (argv && argc >= 2) { @@ -1376,7 +1156,9 @@ int main(int argc, char **argv) } else if (kx == 0 || kx == 1) { +#ifndef NO_FILES data.main_draw.play.MsgOpenFile(argv[i], -1); +#endif } } } @@ -1391,65 +1173,3 @@ int main(int argc, char **argv) 450 + 100 * ssf, 528); return 0; } -#else - -TMainData* mdata; -TMainGraphDraw* graph; - -bool MenuetOnStart(TStartData &me_start, TThreadData) -{ - mdata = new TMainData(-1); - graph = new TMainGraphDraw; - randomize(); - mdata->InitDef(); - static TTimerDraw timer_draw(&mdata->board, graph); - mdata->player.draw = TTimerDraw::draw; mdata->player.data = &timer_draw; - graph->data = mdata; - me_start.WinData.Title = CHECKERS_STR; - me_start.Width = 450 + 100*ssf; - me_start.Height = 528; - return true; -} -bool MenuetOnClose(TThreadData) -{ - delete mdata; - delete graph; - return true; -} -int MenuetOnIdle(TThreadData) -{return -1;} -void MenuetOnSize(int window_rect[], TThreadData) -{mdata->board.Resize(window_rect[2]-window_rect[0], window_rect[3]-window_rect[1]);} -void MenuetOnKeyPress(TThreadData) -{ - TGraphDraw::event ev; - ev.type = TGraphDraw::event::key_down; - ev.any.drw = graph; - ev.key.k = GetKey(); - mdata->EventFunction(ev); -} -void MenuetOnDraw(void) -{ - TGraphDraw::event ev; - ev.type = TGraphDraw::event::draw; - ev.any.drw = graph; - mdata->EventFunction(ev); -} -void MenuetOnMouse(TThreadData) -{ - short x,y; - GetMousePosition(x,y); - int m = GetMouseButton() & 1; - static int mprev = 0; - if (m == mprev) - return; - mprev = m; - TGraphDraw::event ev; - ev.type = m ? TGraphDraw::event::button_down : TGraphDraw::event::button_up; - ev.any.drw = graph; - ev.button.n = 1; - ev.button.x = x; - ev.button.y = y; - mdata->EventFunction(ev); -} -#endif diff --git a/programs/games/checkers/trunk/compile.txt b/programs/games/checkers/trunk/compile.txt index 43175c8c18..85c35812ba 100644 --- a/programs/games/checkers/trunk/compile.txt +++ b/programs/games/checkers/trunk/compile.txt @@ -1,18 +1,13 @@ 1. . - Borland C++ ( - ), FASM 1.64. -cpp2asm.bat ++- TASM-, - FASM-. - , , f_checkers.asm equ - . - - , fasm f_checkers.asm checkers. + , menuetlibc. 2. Linux. make. Linux- . . DOS (cp866). - checkers.cpp -("#define BUILD_RUS"), *.cpp *.h dos2unix. + , + checkers.cpp ("#define LANG_RUS"), + *.cpp *.h dos2unix. 3. DOS/Windows. Borland C++ for DOS/Windows . diff --git a/programs/games/checkers/trunk/compile_eng.bat b/programs/games/checkers/trunk/compile_eng.bat deleted file mode 100644 index 97b98629dc..0000000000 --- a/programs/games/checkers/trunk/compile_eng.bat +++ /dev/null @@ -1,7 +0,0 @@ -del *.o - -echo #define LANG_ENG 1 > lang.h - -g++ -c checkers.cpp -g++ -L/usr/X11R6/lib -lX11 -o checkers checkers.o -pause \ No newline at end of file diff --git a/programs/games/checkers/trunk/compile_ru.bat b/programs/games/checkers/trunk/compile_ru.bat deleted file mode 100644 index 9aea44410b..0000000000 --- a/programs/games/checkers/trunk/compile_ru.bat +++ /dev/null @@ -1,7 +0,0 @@ -del *.o - -echo #define LANG_RUS 1 > lang.h - -g++ -c checkers.cpp -g++ -L/usr/X11R6/lib -lX11 -o checkers checkers.o -pause diff --git a/programs/games/checkers/trunk/cpp2asm.bat b/programs/games/checkers/trunk/cpp2asm.bat deleted file mode 100644 index 279fe4a332..0000000000 --- a/programs/games/checkers/trunk/cpp2asm.bat +++ /dev/null @@ -1,3 +0,0 @@ -bcc32 -S -v- -R- -6 -a4 -O2 -Og -Oi -Ov -OS -k- -x- -D__MENUET__ -Iinclude checkers.cpp -echo include "me_make.inc" > f_checkers.asm -t2fasm < checkers.asm >> f_checkers.asm \ No newline at end of file diff --git a/programs/games/checkers/trunk/dos-draw.h b/programs/games/checkers/trunk/dos-draw.h index b1d530f51b..c863d9a39c 100644 --- a/programs/games/checkers/trunk/dos-draw.h +++ b/programs/games/checkers/trunk/dos-draw.h @@ -10,8 +10,9 @@ #include #include -class TDosGraphDraw : public TGraphDraw +class TDosGraphDraw : public TBaseGraphDraw { + typedef TBaseGraphDraw TGraphDraw; public: TDosGraphDraw(const char *s = 0); ~TDosGraphDraw() {} diff --git a/programs/games/checkers/trunk/gnu-draw.h b/programs/games/checkers/trunk/gnu-draw.h index 5ef95207a9..dbac7d154b 100644 --- a/programs/games/checkers/trunk/gnu-draw.h +++ b/programs/games/checkers/trunk/gnu-draw.h @@ -8,8 +8,9 @@ #ifndef _GNU_GRAPHIC_DRAW_H #define _GNU_GRAPHIC_DRAW_H -class TGnuGraphDraw : public TGraphDraw +class TGnuGraphDraw : public TBaseGraphDraw { + typedef TBaseGraphDraw TGraphDraw; public: TGnuGraphDraw(const char *s = 0); ~TGnuGraphDraw(); diff --git a/programs/games/checkers/trunk/gr-draw.h b/programs/games/checkers/trunk/gr-draw.h index 4d86003f94..e0b3024de4 100644 --- a/programs/games/checkers/trunk/gr-draw.h +++ b/programs/games/checkers/trunk/gr-draw.h @@ -1,19 +1,15 @@ #ifndef _GRAPHIC_DRAW_H #define _GRAPHIC_DRAW_H -#ifndef __MENUET__ #include #include #ifdef _Windows # include #endif -#else -#define LONG_MIN (-2147483647L-1) /* minimum signed long value */ -#define INT_MIN LONG_MIN -#endif -class TGraphDraw +template +class TBaseGraphDraw { public: union event @@ -24,7 +20,7 @@ public: struct evany { evtype type; - TGraphDraw *drw; + TRealGraphDraw *drw; } any; struct evbutton : public evany @@ -43,41 +39,41 @@ public: enum {ret_setcapture = 0x10}; public: - TGraphDraw(const char *s = 0) : title(0), about_info(0), + TBaseGraphDraw(const char *s = 0) : title(0), about_info(0), evfunc(0), id(0), data(0) {CopyTitle(s);} - ~TGraphDraw() {FreeTitle();} + ~TBaseGraphDraw() {FreeTitle();} - virtual unsigned long GetBlackColor() {return 0;} - virtual unsigned long GetWhiteColor() {return 0xFFFFFFL;} - virtual unsigned long CreateColor(unsigned short red, + unsigned long GetBlackColor() {return 0;} + unsigned long GetWhiteColor() {return 0xFFFFFFL;} + unsigned long CreateColor(unsigned short red, unsigned short green, unsigned short blue); - virtual void FreeColor(unsigned long c) {} - virtual unsigned long GetBgColor() {return GetWhiteColor();} - virtual void SetBgColor(unsigned long c) {} + void FreeColor(unsigned long c) {} + unsigned long GetBgColor() {return GetWhiteColor();} + void SetBgColor(unsigned long c) {} - virtual void SetTitle(const char *s) {CopyTitle(s);} + void SetTitle(const char *s) {CopyTitle(s);} const char *GetTitle() const {return title;} - virtual int GetStatus() {return 0;} //1 - can draw, 0 - can't draw, <0 - error - virtual int Init() {return 0;} - virtual void UnInit() {} - virtual int Run(int evmask = 0, int w = INT_MIN, int h = INT_MIN) {return -100;} + int GetStatus() {return 0;} //1 - can draw, 0 - can't draw, <0 - error + int Init() {return 0;} + void UnInit() {} + int Run(int evmask = 0, int w = INT_MIN, int h = INT_MIN) {return -100;} - virtual void GetSize(int &w, int &h) {w = 200; h = 200;} - virtual int OpenDraw() {return 0;} - virtual int IsDraw() {return 0;} - virtual void CloseDraw() {} + void GetSize(int &w, int &h) {w = 200; h = 200;} + int OpenDraw() {return 0;} + int IsDraw() {return 0;} + void CloseDraw() {} - virtual int SetColor(unsigned long c) {return 0;} - virtual int DrawLine(int x0, int y0, int x1, int y1) {return 0;} - virtual int DrawText(int x0, int y0, char *text) {return 0;} - virtual int DrawClear() {return 0;} - virtual int GetTextH(const char *s) {return 16;} - virtual int GetTextW(const char *s) {return 8 * strlen(s);} - virtual void Quit(int q = 1) {} - virtual void ResReinit(int w = INT_MIN, int h = INT_MIN) {} - virtual int GetAboutInfo() {return about_info;} - virtual void SetAboutInfo(int inf) {about_info = inf;} + int SetColor(unsigned long c) {return 0;} + int DrawLine(int x0, int y0, int x1, int y1) {return 0;} + int DrawText(int x0, int y0, char *text) {return 0;} + int DrawClear() {return 0;} + int GetTextH(const char *s) {return 16;} + int GetTextW(const char *s) {return 8 * strlen(s);} + void Quit(int q = 1) {} + void ResReinit(int w = INT_MIN, int h = INT_MIN) {} + int GetAboutInfo() {return about_info;} + void SetAboutInfo(int inf) {about_info = inf;} protected: void FreeTitle() {if (title) {delete[] title; title = 0;}} void CopyTitle(const char *s); @@ -89,25 +85,27 @@ public: void *data; }; -unsigned long TGraphDraw::CreateColor(unsigned short red, +template +unsigned long TBaseGraphDraw::CreateColor(unsigned short red, unsigned short green, unsigned short blue) { return (unsigned long)(red >> 8) + ((unsigned long)(green >> 8) << 8) + ((unsigned long)(blue >> 8) << 16); } -void TGraphDraw::CopyTitle(const char *s) +template +void TBaseGraphDraw::CopyTitle(const char *s) { FreeTitle(); if (s) {title = new char[strlen(s) + 1]; strcpy(title, s);} } -#if defined __GNUC__ +#if defined _KOLIBRI +# include "kolibri-draw.h" + typedef TKlbrGraphDraw TMainGraphDraw; +#elif defined __GNUC__ # include "gnu-draw.h" typedef TGnuGraphDraw TMainGraphDraw; -#elif defined __MENUET__ -# include "mt-draw.h" - typedef TKlbrGraphDraw TMainGraphDraw; #elif defined _Windows # include "win-draw.h" typedef TWinGraphDraw TMainGraphDraw; @@ -115,7 +113,8 @@ void TGraphDraw::CopyTitle(const char *s) # include "dos-draw.h" typedef TDosGraphDraw TMainGraphDraw; #else - typedef TGraphDraw TMainGraphDraw; +#error "Unknown platform" #endif +typedef TMainGraphDraw TGraphDraw; #endif //_GRAPHIC_DRAW_H diff --git a/programs/games/checkers/trunk/history.h b/programs/games/checkers/trunk/history.h index 5ba1f7199d..6aa6f17f59 100644 --- a/programs/games/checkers/trunk/history.h +++ b/programs/games/checkers/trunk/history.h @@ -1,19 +1,13 @@ #ifndef _HEADER_HISTORY_H #define _HEADER_HISTORY_H -#ifndef __MENUET__ -#include -#include -#include -#include -#endif #include "position.h" #include "hash.h" #include "sysproc.h" class THistory { -#ifndef __MENUET__ +#ifndef NO_FILES public: static char FileName[1024]; #endif @@ -27,7 +21,7 @@ public: int Move(const Position &pos, const unsigned char mv[], int nmove) const; int Play(const PlayWrite &play) const; -#ifndef __MENUET__ +#ifndef NO_FILES static int InitHFile(char *dname = 0); static int HRead(FILE *f, PlayWrite *&play); protected: @@ -119,12 +113,12 @@ protected: }; }; -#ifndef __MENUET__ +#ifndef NO_FILES char THistory::FileName[1024] = "history.che"; #endif int THistory::NHid = 0; -#ifndef __MENUET__ +#ifndef NO_FILES int THistory::Print(const char *str) const { char *line = new char[30 + strlen(str)]; @@ -150,9 +144,9 @@ int THistory::Print(const char *str) const int THistory::Start(const Position &pos) const { +#ifndef NO_FILES char str[20 + NUM_CELL] = "Start "; if (!pos.Write(str + strlen(str), 1)) return 0; -#ifndef __MENUET__ if (!Print(str)) return 0; #endif return 1; @@ -160,14 +154,14 @@ int THistory::Start(const Position &pos) const int THistory::Move(const Position &pos, const unsigned char mv[], int nmove) const { +#ifndef NO_FILES char *str = new char[15 + pos.GetLenMvEx(mv, 11)]; if (!str) return 0; sprintf(str, "%d.%s ", (nmove + 1) / 2, (nmove % 2 == 0) ? ".." : ""); pos.WriteMvEx(mv, str + strlen(str), 11); -#ifndef __MENUET__ if (!Print(str)) {delete[] str; return 0;} -#endif delete[] str; +#endif return 1; } @@ -188,7 +182,7 @@ int THistory::Play(const PlayWrite &play) const return 1; } -#ifndef __MENUET__ +#ifndef NO_FILES int THistory::InitHFile(char *dname) { if (dname && dname[0]) @@ -262,7 +256,7 @@ int THistory::THash::operator()(const TStr &str) const return r; } -#ifndef __MENUET__ +#ifndef NO_FILES int THistory::HRead(FILE *f, PlayWrite *&play) { const int MAX_INP_WORD = 100; diff --git a/programs/games/checkers/trunk/include/me_func.inc b/programs/games/checkers/trunk/include/me_func.inc deleted file mode 100644 index f0fab935ce..0000000000 --- a/programs/games/checkers/trunk/include/me_func.inc +++ /dev/null @@ -1,1135 +0,0 @@ -;const int -MENUET_BORDER_SIZE = 4; -;const int -MENUET_HEADER_SIZE = 20; - -;const int -MENUET_THREAD_DATA_USER = 0; // Thread data begin from the user dword -;const int -MENUET_THREAD_DATA_ST_BEGIN = 1; // Stack beginning follows after the user dword -;const int -MENUET_THREAD_DATA_NEXT = 2; -;const int -MENUET_THREAD_DATA_PID = 3; -;const int -MENUET_THREAD_DATA_FLAG = 4; -;const int -MENUET_THREAD_DATA_X = 5; -;const int -MENUET_THREAD_DATA_Y = 6; -;const int -MENUET_THREAD_DATA_C_WINDOW = 7; -;const int -MENUET_THREAD_DATA_C_HEADER = 8; -;const int -MENUET_THREAD_DATA_C_BORDER = 9; -;const int -MENUET_THREAD_DATA_C_TITLE = 10; -;const int -MENUET_THREAD_DATA_TITLE = 11; -;const int -MENUET_THREAD_DATA_PICTURE = 12; -;const int -MENUET_THREAD_DATA_SZ_PICT = 13; -;const int -MENUET_THREAD_DATA_LAST_SX = 14; -;const int -MENUET_THREAD_DATA_LAST_SY = 15; -;const int -MENUET_THREAD_DATA_LEN = 16; - -;const int -MENUET_MUTEX_MAX_TIME_WAIT = 20; - -;const int -MENUET_FILE_BLOCK_SIZE = 512; - -;const int -MENUET_FILE_MEMORY_OS_NEED = 4096; - -;/*** - -macro segment name -{ - segment name - if name eq _init_ | name eq _INIT_ -Menuet_SegmentInit: - else if name eq _exit_ | name eq _EXIT_ -Menuet_SegmentExit: - end if -} - -macro endseg name -{ - if name eq _init_ | name eq _INIT_ -Menuet_SegmentInitEnd: - else if name eq _exit_ | name eq _EXIT_ -Menuet_SegmentExitEnd: - end if - endseg name -} - -macro Menuet_Put_MovEaxVal_Ret address,val -{ - mov byte [address],0xB8 - mov dword [address+4],0xC089C300 - mov dword [address+1],val -} - -define @Menuet@Main$qv -nextdef MenuetEntryPoint - and esp,not 3 - sub esp,1024 - mov eax,9 - mov ebx,esp - mov ecx,-1 - int 0x40 - mov ebx,[esp+26] - mov edx,[esp+30] - lea eax,[ebx-0x20] - add esp,1024 - cmp esp,eax - cmova esp,eax - and esp,not 3 - xor eax,eax - cld - mov edi,@Menuet@_ThreadTable - mov ecx,256 - rep stos dword [edi] - mov esi,@Menuet@GetPid$qv - mov edi,@Menuet@_ThreadSavedBegProc - movs dword [edi],[esi] - movs dword [edi],[esi] - mov esi,@Menuet@GetThreadData$qv - movs dword [edi],[esi] - movs dword [edi],[esi] - Menuet_Put_MovEaxVal_Ret @Menuet@GetPid$qv,edx -if defined MenuetHeapInit - mov ecx,esp - push ebx - push ecx - push U_END - call MenuetHeapInit ; Initialize a dynamic heap and create new memory in its begin. - pop ecx ; Parameters: begin of a new heap, end of data to create in - mov [esp+4],eax ; the begin of a heap. Return address of the created data. - mov dword [esp],0 -else - xor eax,eax - push eax - push eax -end if - call @Menuet@ThreadMain$qpvt1 -nextdef Menuet_ThreadFinish - add esp,8 -if defined MenuetHeapFreeAndThreadFinish - test eax,eax - jz Menuet_ThreadFinish_end - push dword @Menuet@_ExitProcessNow - push eax - call MenuetHeapFreeAndThreadFinish ; Free the given memory and finish the thread, -end if ; should exit process if second argument points to not zero. -Menuet_ThreadFinish_end: - or eax,-1 - int 0x40 -enddef - -define @Menuet@ThreadMain$qpvt1 - xchg ebx,[esp+4] - xchg ebp,[esp+8] - push esi - push edi - sub esp,MENUET_THREAD_DATA_LEN*4 - mov [esp],ebx - mov [esp+4],ebp - mov eax,40 - mov ebx,0x27 - int 0x40 - mov ebx,esp - cmp byte [@Menuet@_ThreadSavedBegProc],0x90 - jz Menuet_main_else_first_check - Menuet_Put_MovEaxVal_Ret @Menuet@GetThreadData$qv,esp -if defined Menuet_SegmentInit & defined Menuet_SegmentInitEnd - push Menuet_SegmentInitEnd - push Menuet_SegmentInit - jmp Menuet_main_after_first_check -end if -Menuet_main_else_first_check: - xor eax,eax - push eax - push eax -Menuet_main_after_first_check: - push ebx - call @@Menuet@_CallStart$qppvpvt2 - add esp,12 - test al,al - jnz Menuet_main_test_close_first - jmp Menuet_main_end -Menuet_main_close_first: - btr dword [esp+MENUET_THREAD_DATA_FLAG*4],31 - push esp - call @@MenuetOnClose$qppv - pop ecx - test al,al - jnz Menuet_main_end -Menuet_main_test_close_first: - cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 - jl Menuet_main_close_first -; push esp -; push dword 1 -; call @Menuet@Redraw$qippv -; add esp,8 -Menuet_main_paint_msg: - or dword [esp+MENUET_THREAD_DATA_FLAG*4],3 - sub esp,1024 - mov eax,9 - mov ebx,esp - mov ecx,-1 - int 0x40 - mov eax,[esp+34] - mov ebx,[esp+38] - mov ecx,[esp+42] - mov edx,[esp+46] - add esp,1024 - cmp ecx,[esp+MENUET_THREAD_DATA_LAST_SX*4] - jnz Menuet_main_size - cmp edx,[esp+MENUET_THREAD_DATA_LAST_SY*4] - jz Menuet_main_paint -Menuet_main_size: - mov [esp+MENUET_THREAD_DATA_LAST_SX*4],ecx - mov [esp+MENUET_THREAD_DATA_LAST_SY*4],edx - push edx - push ecx - push ebx - push eax - lea ecx,[esp+16] - mov edx,esp - push ecx - push edx - call @@MenuetOnSize$qpippv - add esp,24 - test dword [esp+MENUET_THREAD_DATA_FLAG*4],3 - jz Menuet_main_cycle -Menuet_main_paint: - cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 - jl Menuet_main_close - push esp - push dword 0 - call @Menuet@Redraw$qippv - add esp,8 -Menuet_main_cycle: - mov eax,11 -Menuet_main_message: - cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 - jl Menuet_main_close - int 0x40 - test eax,eax - jnz Menuet_main_on_message - cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 - jne Menuet_main_paint - push esp - call @@MenuetOnIdle$qppv - pop ecx - test eax,eax - jz Menuet_main_cycle - jl Menuet_main_wait_message - mov ebx,eax - mov eax,23 - jmp Menuet_main_message -Menuet_main_wait_message: - mov eax,10 - jmp Menuet_main_message -Menuet_main_key_press: - push esp - call @@MenuetOnKeyPress$qppv - pop ecx - jmp Menuet_main_cycle -Menuet_main_mouse: - push esp - call @@MenuetOnMouse$qppv - pop ecx - jmp Menuet_main_cycle -Menuet_main_on_message: - dec eax - jz Menuet_main_paint_msg - dec eax - jz Menuet_main_key_press - cmp eax,4 - jz Menuet_main_mouse - dec eax - jnz Menuet_main_cycle -Menuet_main_button: - mov eax,17 - int 0x40 - test al,al - jnz Menuet_main_cycle -Menuet_main_close: - btr dword [esp+MENUET_THREAD_DATA_FLAG*4],31 - push esp - call @@MenuetOnClose$qppv - pop ecx - test al,al - jz Menuet_main_button -Menuet_main_end: - mov ebx,esp - lock dec dword [@Menuet@_ThreadNumber] -if defined Menuet_SegmentExit & defined Menuet_SegmentExitEnd - jnz Menuet_main_else_last_check - push Menuet_SegmentExitEnd - push Menuet_SegmentExit - jmp Menuet_main_after_last_check -end if -Menuet_main_else_last_check: - xor eax,eax - push eax - push eax -Menuet_main_after_last_check: - push ebx - call @@Menuet@_RemoveThreadData$qppvpvt2 - add esp,12 - lock inc dword [@Menuet@_ThreadScanCount+4] - mov ebx,1 - jmp Menuet_main_end_wait -Menuet_main_end_wait_loop: - mov eax,5 - int 0x40 - shl ebx,1 - cmp ebx,MENUET_MUTEX_MAX_TIME_WAIT - jna Menuet_main_end_wait - mov ebx,MENUET_MUTEX_MAX_TIME_WAIT -Menuet_main_end_wait: - cmp dword [@Menuet@_ExitProcessNow],0 - jnz @Menuet@ExitProcess$qv - cmp dword [@Menuet@_ThreadScanCount],0 - jnz Menuet_main_end_wait_loop - lock dec dword [@Menuet@_ThreadScanCount+4] - mov ebp,[esp+4] - mov ebx,[esp] - add esp,MENUET_THREAD_DATA_LEN*4 - mov eax,ebp - pop edi - pop esi - xchg ebp,[esp+8] - xchg ebx,[esp+4] - ret -enddef - -macro call func -{ - if func eq __chkstk - sub esp,eax - else - call func - end if -} - -define @Menuet@Redraw$qippv - push ebp - mov ebp,[esp+12] - mov edx,[ebp+MENUET_THREAD_DATA_FLAG*4] - cmp dword [esp+8],0 - jl Menuet_redraw_only_inv - jz Menuet_redraw_no_frame - or dl,2 -Menuet_redraw_no_frame: - bt edx,30 - jnc Menuet_redraw_begin - or dl,1 - mov [ebp+MENUET_THREAD_DATA_FLAG*4],edx - jmp Menuet_redraw_end -Menuet_redraw_only_inv: - test dl,3 - jnz Menuet_redraw_no_frame -Menuet_redraw_end: - pop ebp - ret -Menuet_redraw_begin: - push ebx - push esi - push edi - and dword [ebp+MENUET_THREAD_DATA_FLAG*4],0xFFFFFFFC - mov eax,12 - mov ebx,1 - int 0x40 - test dl,2 - jz Menuet_redraw_picture - push 48 - pop eax - push 4 - pop ebx - int 0x40 - mov ebx,[ebp+MENUET_THREAD_DATA_X*4] - add ebx,2*5-1 - mov ecx,[ebp+MENUET_THREAD_DATA_Y*4] - add cx,ax - add ecx,5-1 - mov edx,[ebp+MENUET_THREAD_DATA_C_WINDOW*4] -; mov esi,[ebp+MENUET_THREAD_DATA_C_HEADER*4] -; mov edi,[ebp+MENUET_THREAD_DATA_C_BORDER*4] - mov edi,[ebp+MENUET_THREAD_DATA_TITLE*4] - xor eax,eax - int 0x40 -; mov edx,[ebp+MENUET_THREAD_DATA_TITLE*4] -; test edx,edx -; jz Menuet_redraw_picture -; mov edi,edx -; mov ecx,0xFFFFFFFF -; xor al,al -; cld -; repnz scas byte [edi] -; not ecx -; mov esi,ecx -; dec esi -; jz Menuet_redraw_picture -; mov eax,4 -; mov ebx,0x00070007 -; mov ecx,[ebp+MENUET_THREAD_DATA_C_TITLE*4] -; int 0x40 -Menuet_redraw_picture: -; mov esi,[ebp+MENUET_THREAD_DATA_PICTURE*4] -; test esi,esi -; jz Menuet_redraw_end_draw -; mov ecx,[ebp+MENUET_THREAD_DATA_SZ_PICT*4] -; jecxz Menuet_redraw_end_draw -; mov al,byte [ebp+MENUET_THREAD_DATA_C_WINDOW*4+3] -; and al,15 -; mov edx,MENUET_BORDER_SIZE*65536+MENUET_HEADER_SIZE -; cmp al,3 -; jnz Menuet_redraw_no_skin -; mov eax,48 -; mov ebx,4 -; int 0x40 -; mov dx,ax -;Menuet_redraw_no_skin: -; mov eax,7 -; mov ebx,esi -; int 0x40 - call @@MenuetOnDraw$qv -Menuet_redraw_end_draw: - mov eax,12 - mov ebx,2 - int 0x40 - pop edi - pop esi - pop ebx - pop ebp - ret -enddef - -define @Menuet@MoveWindow$qxpxi - push ebx - push esi - mov eax,[esp+12] - mov ebx,[eax] - mov ecx,[eax+4] - mov edx,[eax+8] - mov esi,[eax+12] - mov eax,67 - int 0x40 - pop esi - pop ebx - ret -enddef - -define @Menuet@Abort$qv - push dword [@Menuet@DebugPrefix] - call @Menuet@DebugPutString$qpxc - mov dword [esp],Menuet_abort_string - call @Menuet@DebugPutString$qpxc - pop ecx -nextdef @Menuet@ExitProcess$qv - lock bts dword [@Menuet@_ExitProcessNow],0 - jc Menuet_exit_process_wait - sub esp,1024 - mov eax,9 - mov ebx,esp - mov ecx,-1 - int 0x40 - mov esi,eax - mov edi,[esp+30] -Menuet_exit_process_loop: - mov eax,9 - mov ebx,esp - mov ecx,esi - int 0x40 - mov eax,[esp+30] - cmp eax,edi - jz Menuet_exit_process_continue - mov ebx,eax - or bl,15 - inc ebx - jz Menuet_exit_process_continue - mov ebx,eax - call Menuet_HashInt - movzx eax,al - mov eax,dword [@Menuet@_ThreadTable+eax*4] - jmp Menuet_exit_process_test -Menuet_exit_process_next: - mov eax,dword [eax+MENUET_THREAD_DATA_NEXT*4] -Menuet_exit_process_test: - test eax,eax - jz Menuet_exit_process_continue - cmp ebx,[eax+MENUET_THREAD_DATA_PID*4] - jnz Menuet_exit_process_next - mov eax,18 - mov ebx,2 - mov ecx,esi - int 0x40 -Menuet_exit_process_continue: - dec esi - jnl Menuet_exit_process_loop - add esp,1024 - mov dword [@Menuet@_ExitProcessNow],-1 -if defined EMULATOR - int3 - call 0x76543210 -end if -Menuet_exit_process_end: - mov dword [@Menuet@_ThreadMutex],0 - or eax,-1 - int 0x40 -Menuet_exit_process_wait: - mov eax,5 - mov ebx,1 -Menuet_exit_process_wait_loop: - cmp dword [@Menuet@_ExitProcessNow],0 - jl Menuet_exit_process_end - int 0x40 - shl ebx,1 - cmp ebx,MENUET_MUTEX_MAX_TIME_WAIT - jna Menuet_exit_process_wait_loop - mov ebx,MENUET_MUTEX_MAX_TIME_WAIT - jmp Menuet_exit_process_wait_loop -enddef - -define @Menuet@ExitThread$qppv,@Menuet@ThreadMain$qpvt1 - mov esp,[esp+4] - jmp Menuet_main_end -enddef - -define @Menuet@ReturnMessageLoop$qppv,@Menuet@ThreadMain$qpvt1 - mov esp,[esp+4] - bt dword [esp+MENUET_THREAD_DATA_FLAG*4],30 - jc Menuet_main_end - jmp Menuet_main_cycle -enddef - -define @Menuet@Delay$qui - push ebx - mov eax,5 - mov ebx,[esp+8] - int 0x40 - pop ebx - ret -enddef - -define @Menuet@Clock$qv - push ebx - mov eax,26 - mov ebx,9 - int 0x40 - pop ebx - ret -enddef - -define @Menuet@GetPackedTime$qv - mov eax,3 - int 0x40 - ret -enddef - -define @Menuet@GetTime$qpi - mov eax,3 - int 0x40 - mov edx,[esp+4] - movzx ecx,al - shr ecx,4 - and al,0x0F - imul ecx,10 - add cl,al - mov dword [edx+8],ecx - mov cl,ah - shr ecx,4 - and ah,0x0F - imul ecx,10 - add cl,ah - mov dword [edx+4],ecx - bswap eax - mov cl,ah - shr ecx,4 - and ah,0x0F - imul ecx,10 - add cl,ah - mov dword [edx],ecx - ret -enddef - -define @Menuet@GetPackedDate$qv - mov eax,29 - int 0x40 - ret -enddef - -define @Menuet@GetDate$qpi - mov eax,29 - int 0x40 - mov edx,[esp+4] - movzx ecx,al - shr ecx,4 - and al,0x0F - imul ecx,10 - add cl,al - mov dword [edx+4],ecx - mov cl,ah - shr ecx,4 - and ah,0x0F - imul ecx,10 - add cl,ah - mov dword [edx],ecx - bswap eax - mov cl,ah - shr ecx,4 - and ah,0x0F - imul ecx,10 - add cl,ah - mov dword [edx+8],ecx - ret -enddef - -define @Menuet@ReadCommonColors$qpui - push ebx - mov eax,48 - mov ebx,3 - mov ecx,[esp+8] - mov edx,40 - int 0x40 - pop ebx - ret -enddef - -define @Menuet@GetProcessInfo$qpuipct1t1piui - push ebx - push esi - push edi - sub esp,1024 - mov eax,9 - mov ebx,esp - mov ecx,[1024+12+24+esp] - int 0x40 - xor edi,edi - or edi,[1024+12+4+esp] - jz Menuet_get_proc_info_no_usecpu - mov ecx,[esp] - mov [edi],ecx - xor edi,edi -Menuet_get_proc_info_no_usecpu: - or edi,[1024+12+8+esp] - jz Menuet_get_proc_info_no_name - lea esi,[esp+10] - cld - movs dword [edi],[esi] - movs dword [edi],[esi] - movs dword [edi],[esi] - mov byte [edi],0 - xor edi,edi -Menuet_get_proc_info_no_name: - or edi,[1024+12+12+esp] - jz Menuet_get_proc_info_no_mem - mov ecx,[esp+26] - mov [edi],ecx - xor edi,edi -Menuet_get_proc_info_no_mem: - or edi,[1024+12+16+esp] - jz Menuet_get_proc_info_no_pid - mov ecx,[esp+30] - mov [edi],ecx - xor edi,edi -Menuet_get_proc_info_no_pid: - or edi,[1024+12+20+esp] - jz Menuet_get_proc_info_no_rect - lea esi,[esp+34] - cld - movs dword [edi],[esi] - movs dword [edi],[esi] - movs dword [edi],[esi] - movs dword [edi],[esi] - xor edi,edi -Menuet_get_proc_info_no_rect: - add esp,1024 - pop edi - pop esi - pop ebx - ret -enddef - -define @Menuet@GetPid$qv - push ebx - sub esp,1024 - mov eax,9 - mov ebx,esp - mov ecx,-1 - int 0x40 - mov eax,[esp+30] - add esp,1024 - pop ebx - ret -enddef - -define @Menuet@GetPid$qppv - mov ecx,[esp+4] - mov eax,[ecx+MENUET_THREAD_DATA_PID*4] - ret -enddef - -define @Menuet@_HashByte$qui -nextdef @Menuet@_HashWord$qui -nextdef @Menuet@_HashDword$qui - mov eax,[esp+4] -nextdef Menuet_HashInt - mul dword [Menuet_hash_int_val0] - xor eax,edx - bswap eax - mul dword [Menuet_hash_int_val1] - shrd eax,edx,14 - bswap eax - lea eax,[eax+4*eax] - ror eax,9 - ret -Menuet_hash_int_val0: - dd 0xA82F94C5 -Menuet_hash_int_val1: - dd 0x9193780B -enddef - -define @Menuet@GetThreadData$qv - call @Menuet@GetPid$qv - push eax - call @Menuet@GetThreadData$qui - pop ecx - ret -enddef - -define @Menuet@GetThreadData$qui - mov eax,[esp+4] - call Menuet_HashInt - movzx eax,al - cmp dword [@Menuet@_ThreadScanCount+4],0 - jnz Menuet_get_thread_data_wait -Menuet_get_thread_data_nowait: - lock inc dword [@Menuet@_ThreadScanCount] - mov eax,dword [@Menuet@_ThreadTable+eax*4] - mov ecx,[esp+4] - jmp Menuet_get_thread_data_test -Menuet_get_thread_data_loop: - mov eax,dword [eax+MENUET_THREAD_DATA_NEXT*4] -Menuet_get_thread_data_test: - test eax,eax - jz Menuet_get_thread_data_end - cmp ecx,[eax+MENUET_THREAD_DATA_PID*4] - jnz Menuet_get_thread_data_loop -Menuet_get_thread_data_end: - lock dec dword [@Menuet@_ThreadScanCount] - ret -Menuet_get_thread_data_wait: - push eax - push ebx - mov eax,5 - mov ebx,1 -Menuet_get_thread_data_wait_loop: - int 0x40 - cmp dword [@Menuet@_ThreadScanCount+4],0 - jz Menuet_get_thread_data_wait_end - shl ebx,1 - cmp ebx,MENUET_MUTEX_MAX_TIME_WAIT - jna Menuet_get_thread_data_wait_loop - mov ebx,MENUET_MUTEX_MAX_TIME_WAIT - jmp Menuet_get_thread_data_wait_loop -Menuet_get_thread_data_wait_end: - pop ebx - pop eax - jmp Menuet_get_thread_data_nowait -enddef - -define @Menuet@_GetSkinHeader$qv - push ebx - mov eax,48 - mov ebx,4 - int 0x40 - pop ebx - ret -enddef - -define @Menuet@GetScreenSize$qrust1 - mov eax,14 - int 0x40 - mov ecx,[esp+8] - mov word [ecx],ax - mov ecx,[esp+4] - shr eax,16 - mov word [ecx],ax - ret -enddef - -define Menuet_MutexLockNoWait - pop eax - xor al,al - ret -enddef - -define Menuet_MutexLockWait - push ebx - mov eax,5 - xor ebx,ebx -Menuet_lock_wait_cycle: - int 0x40 - shl byte [ecx],1 - jz Menuet_lock_wait_cycle - pop ebx - mov al,1 - ret -enddef - -define Menuet_MutexLockWaitTime - cmp dword [esp+12],0 - jng Menuet_MutexLockWait - push ebx - push edx - mov edx,[esp+20] - mov eax,26 - mov ebx,9 - int 0x40 - add edx,eax -Menuet_lock_wait_time_cycle: - mov eax,5 - xor ebx,ebx - int 0x40 - shl byte [ecx],1 - jnz Menuet_lock_wait_time_ret_true - mov eax,26 - mov ebx,9 - int 0x40 - cmp eax,edx - js Menuet_lock_wait_time_cycle - pop edx - pop ebx - pop eax - xor al,al - ret -Menuet_lock_wait_time_ret_true: - pop edx - pop ebx - mov al,1 - ret -enddef - -define Menuet_MutexLock - shl byte [ecx],1 - jnz Menuet_lock_first - call eax -Menuet_lock_first: - mov al,1 - ret -enddef - -define @Menuet@TryLock$qp13Menuet@TMutex - mov eax,Menuet_MutexLockNoWait - mov ecx,[esp+4] - jmp Menuet_MutexLock -enddef - -define @Menuet@Lock$qp13Menuet@TMutex - mov eax,Menuet_MutexLockWait - mov ecx,[esp+4] - jmp Menuet_MutexLock -enddef - -define @Menuet@LockTime$qp13Menuet@TMutexi - mov eax,Menuet_MutexLockWaitTime - mov ecx,[esp+4] - jmp Menuet_MutexLock -enddef - -define @Menuet@UnLock$qp13Menuet@TMutex - mov ecx,[esp+4] - shr byte [ecx],1 - jz Menuet_unlock_pause - ret -Menuet_unlock_pause: - mov byte [ecx],0x40 - push ebx - mov eax,5 - xor ebx,ebx - int 0x40 - pop ebx - ret -enddef - -define Menuet_MutexLockRec - shl byte [ecx],1 - jng Menuet_lock_first - cmp dword [ecx+4],edx - jz Menuet_lock_rec_self - call eax -Menuet_lock_rec_first: - mov al,1 - mov dword [ecx+4],edx - ret -Menuet_lock_rec_self: - mov al,1 - add dword [ecx],0x100 - jc Menuet_lock_rec_overflow - ret -Menuet_lock_rec_overflow: - push dword [@Menuet@DebugPrefix] - call @Menuet@DebugPutString$qpxc - mov dword [esp],Menuet_try_lock_rec_overflow_string - call @Menuet@DebugPutString$qpxc - pop ecx - jmp @Menuet@Abort$qv -enddef - -define @Menuet@TryLock$qp16Menuet@TRecMutexui - mov eax,Menuet_MutexLockNoWait - mov ecx,[esp+4] - mov edx,[esp+8] - jmp Menuet_MutexLockRec -enddef - -define @Menuet@Lock$qp16Menuet@TRecMutexui - mov eax,Menuet_MutexLockWait - mov ecx,[esp+4] - mov edx,[esp+8] - jmp Menuet_MutexLockRec -enddef - -define @Menuet@LockTime$qp16Menuet@TRecMutexiui - mov eax,Menuet_MutexLockWaitTime - mov ecx,[esp+4] - mov edx,[esp+12] - jmp Menuet_MutexLockRec -enddef - -define @Menuet@UnLock$qp16Menuet@TRecMutexui - mov ecx,[esp+4] - mov edx,[esp+8] - cmp dword [ecx+4],edx - jnz Menuet_unlock_rec_notlocked - sub dword [ecx],0x100 - jnc Menuet_unlock_rec_end - add dword [ecx],0x100 - shl byte [ecx],1 - shr byte [ecx],2 - jng Menuet_unlock_rec_pause -Menuet_unlock_rec_end: - ret -Menuet_unlock_rec_pause: - mov byte [ecx],0x20 - push ebx - mov eax,5 - xor ebx,ebx - int 0x40 - pop ebx - ret -Menuet_unlock_rec_notlocked: - push dword [@Menuet@DebugPrefix] - call @Menuet@DebugPutString$qpxc - mov dword [esp],Menuet_unlock_rec_notlocked_string - call @Menuet@DebugPutString$qpxc - pop ecx - jmp @Menuet@Abort$qv -enddef - -define @Menuet@DebugPutChar$qc - mov cl,byte [esp+4] - cmp cl,13 - jz Menuet_debug_put_char_ret - push ebx - cmp cl,10 - jz Menuet_debug_put_char_enter -Menuet_debug_put_char_after_cmp: - mov eax,63 - mov ebx,1 - int 0x40 - pop ebx -Menuet_debug_put_char_ret: - ret -Menuet_debug_put_char_enter: - mov cl,13 - mov eax,63 - mov ebx,1 - int 0x40 - mov cl,10 - jmp Menuet_debug_put_char_after_cmp -enddef - -define @Menuet@DebugPutString$qpxc - push esi - push dword 0 - mov esi,dword [esp+12] - jmp Menuet_debug_put_string_test -Menuet_debug_put_string_loop: - mov dword [esp],eax - call @Menuet@DebugPutChar$qc - inc esi -Menuet_debug_put_string_test: - xor eax,eax - or al,[esi] - test al,al - jnz Menuet_debug_put_string_loop - pop ecx - pop esi - ret -enddef - -define @Menuet@GetKey$qv - mov eax,2 - int 0x40 - test al,al - jnz Menuet_get_key_eof - movzx eax,ah - ret -Menuet_get_key_eof: - mov eax,-1 - ret -enddef - -define @Menuet@GetMouseButton$qv - push ebx - mov eax,37 - mov ebx,2 - int 0x40 - pop ebx - ret -enddef - -define @Menuet@GetMousePosition$qrst1o - push ebx - mov eax,37 - xor ebx,ebx - cmp byte [esp+16],0 - jnz Menuet_get_mouse_pos_absolute - inc ebx -Menuet_get_mouse_pos_absolute: - int 0x40 - mov ecx,[esp+12] - mov word [ecx],ax - mov ecx,[esp+8] - shr eax,16 - mov word [ecx],ax - pop ebx - ret -enddef - -define @Menuet@WasThreadCreated$qv - cmp byte [@Menuet@_ThreadSavedBegProc],0x90 - setz al - ret -enddef - -define @Menuet@CreateThread$qpvuit1 - push ebx - mov edx,[esp+16] - mov ebx,[esp+12] - test edx,edx - jnz Menuet_create_thread_after_new -if defined MenuetHeapAlloc - cmp ebx,4096 - jnb Menuet_create_thread_alloc - mov ebx,STACKSIZE -Menuet_create_thread_alloc: - push ebx - call MenuetHeapAlloc ; Create new dynamic memory of the given size - pop ecx - test eax,eax - jnz Menuet_create_thread_mem_created -end if - or eax,-1 - jmp Menuet_create_thread_end -Menuet_create_thread_mem_created: - lea edx,[eax+ebx] -Menuet_create_thread_after_new: - neg ebx - jz Menuet_create_thread_test_first - add ebx,edx -Menuet_create_thread_test_first: - cmp byte [@Menuet@_ThreadSavedBegProc],0x90 - jnz Menuet_create_thread_init -Menuet_create_thread_fill_stack: - lock inc dword [@Menuet@_ThreadNumber] - and edx,not 3 - sub edx,12 - mov ecx,[esp+8] - mov dword [edx+8],ebx - mov dword [edx+4],ecx - mov dword [edx],Menuet_ThreadFinish - mov eax,51 - mov ebx,1 - mov ecx,@Menuet@ThreadMain$qpvt1 - int 0x40 - mov ebx,eax - or bl,15 - inc ebx - jnz Menuet_create_thread_end - lock dec dword [@Menuet@_ThreadNumber] -if defined MenuetHeapFree - or ebx,[edx+8] - jz Menuet_create_thread_end - push ebx - call MenuetHeapFree ; Delete the given dynamic memory - pop ecx -end if -Menuet_create_thread_end: - pop ebx - ret -Menuet_create_thread_init: - push esi - push edi - cld - mov esi,@Menuet@_ThreadSavedBegProc - mov edi,@Menuet@GetPid$qv - movs dword [edi],[esi] - movs dword [edi],[esi] - mov edi,@Menuet@GetThreadData$qv - movs dword [edi],[esi] - movs dword [edi],[esi] - mov eax,0x90909090 - mov edi,@Menuet@_ThreadSavedBegProc - stos dword [edi] - stos dword [edi] - stos dword [edi] - stos dword [edi] - pop edi - pop esi - jmp Menuet_create_thread_fill_stack -enddef - -define @Menuet@_FileAccess$qpv - push ebx - mov eax,58 - mov ebx,[esp+8] - int 0x40 - mov ecx,[esp+8] - mov [ecx],ebx - pop ebx - cmp eax,5 - jz Menuet_file_access_ret_zero - ret -Menuet_file_access_ret_zero: - xor eax,eax - ret -enddef - -__pure_error_: - jmp $ - -define Menuet_abort_string - db 'Abnormal program termination.',10,0 -newdef Menuet_try_lock_rec_overflow_string - db 'Recursive mutex lock count overflow.',10,0 -newdef Menuet_unlock_rec_notlocked_string - db 'Recursive mutex unlock error.',10,0 -enddef - -include "me_lib.inc" - -;/**/ - diff --git a/programs/games/checkers/trunk/include/me_heap.h b/programs/games/checkers/trunk/include/me_heap.h deleted file mode 100644 index 5954d8edfc..0000000000 --- a/programs/games/checkers/trunk/include/me_heap.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef __MENUET_HEAP_H_INCLUDED_ -#define __MENUET_HEAP_H_INCLUDED_ - -#include -#include - -// Menuet memory heap interface. - -namespace Menuet // All menuet functions, types and data are nested in the (Menuet) namespace. -{ - void *Alloc(unsigned int size); - void *ReAlloc(void *mem, unsigned int size); - void Free(void *mem); -} - -#ifdef __MENUET__ - -namespace Menuet -{ - -// Global variables - - MemoryHeap::TFreeSpace _MenuetFreeSpace; - MemoryHeap::TMemBlock _MenuetMemBlock; - TMutex _MemHeapMutex = MENUET_MUTEX_INIT; - -// Functions - - void *_HeapInit(void *begin, void *use_end, void *end) - { - MemoryHeap::InitFreeSpace(_MenuetFreeSpace); - _MenuetMemBlock = MemoryHeap::CreateBlock(begin, end, _MenuetFreeSpace); - unsigned int use_beg = (unsigned int)MemoryHeap::BlockBegin(_MenuetMemBlock) + - MemoryHeap::BlockAddSize - MemoryHeap::BlockEndSize; - unsigned int use_size = (unsigned int)use_end; - if (use_size <= use_beg) return 0; - else use_size -= use_beg; - return MemoryHeap::Alloc(_MenuetFreeSpace, use_size); - } - - bool _SetUseMemory(unsigned int use_mem); - - int _RecalculateUseMemory(unsigned int use_mem); - - void *Alloc(unsigned int size) - { - if (!size) return 0; - Lock(&_MemHeapMutex); - void *res = MemoryHeap::Alloc(_MenuetFreeSpace, size); - if (!res) - { - unsigned use_mem = (unsigned int)MemoryHeap::BlockEndFor(_MenuetMemBlock, size); - if (_SetUseMemory(_RecalculateUseMemory(use_mem))) - { - res = MemoryHeap::Alloc(_MenuetFreeSpace, size); - } - } - UnLock(&_MemHeapMutex); - return res; - } - - void *ReAlloc(void *mem, unsigned int size) - { - Lock(&_MemHeapMutex); - void *res = MemoryHeap::ReAlloc(_MenuetFreeSpace, mem, size); - if (!res && size) - { - unsigned use_mem = (unsigned int)MemoryHeap::BlockEndFor(_MenuetMemBlock, size); - if (_SetUseMemory(_RecalculateUseMemory(use_mem))) - { - res = MemoryHeap::ReAlloc(_MenuetFreeSpace, mem, size); - } - } - UnLock(&_MemHeapMutex); - return res; - } - - void Free(void *mem) - { - Lock(&_MemHeapMutex); - MemoryHeap::Free(_MenuetFreeSpace, mem); - UnLock(&_MemHeapMutex); - } - - void _FreeAndThreadFinish(void *mem, int *exit_proc_now); -} - -#endif // def __MENUET__ - -#endif // ndef __MENUET_HEAP_H_INCLUDED_ diff --git a/programs/games/checkers/trunk/include/me_heap.inc b/programs/games/checkers/trunk/include/me_heap.inc deleted file mode 100644 index 6a32667508..0000000000 --- a/programs/games/checkers/trunk/include/me_heap.inc +++ /dev/null @@ -1,284 +0,0 @@ -;/*** - -MenuetHeapInit = @@Menuet@_HeapInit$qpvt1t1 - -MenuetHeapAlloc = @@Menuet@Alloc$qui - -MenuetHeapReAlloc = @@Menuet@ReAlloc$qpvui - -MenuetHeapFree = @@Menuet@Free$qpv - -MenuetHeapFreeAndThreadFinish = @Menuet@_FreeAndThreadFinish$qpvpi - -define @Menuet@_SetUseMemory$qui - push ebx - mov eax,64 - mov ebx,1 - mov ecx,[esp+8] - int 0x40 - pop ebx - test eax,eax - jnz Menuet_set_use_memory_nomem - push ecx - push dword [@Menuet@_MenuetMemBlock] - call @@MemoryHeap@ResizeBlock$q20MemoryHeap@TMemBlockpv - add esp,8 - mov al,1 - ret -Menuet_set_use_memory_nomem: - xor al,al - ret -enddef - -define @Menuet@_RecalculateUseMemory$qui - mov eax,dword [esp+4] - mov ecx,(U_END + 3) and not 3 - cmp eax,ecx - jna Menuet_recalculate_use_memory_min - push ebx - sub eax,ecx - mov ebx,6 - mul ebx - dec ebx - div ebx - add eax,((U_END + 3) and not 3) + 3 - and eax,not 3 - pop ebx - ret -Menuet_recalculate_use_memory_min: - mov eax,ecx - ret -enddef - -define @Menuet@_FreeAndThreadFinish$qpvpi - mov ebx,1 - mov ecx,[esp+8] - jmp Menuet_heap_free_tf_wait -Menuet_heap_free_tf_wait_loop: - mov eax,5 - int 0x40 - shl ebx,1 - cmp ebx,MENUET_MUTEX_MAX_TIME_WAIT - jna Menuet_heap_free_tf_wait - mov ebx,MENUET_MUTEX_MAX_TIME_WAIT -Menuet_heap_free_tf_wait: - cmp dword [ecx],0 - jnz @Menuet@ExitProcess$qv - lock bts dword [@Menuet@_MemHeapMutex],0 - jc Menuet_heap_free_tf_wait_loop - push dword [esp+4] - push @Menuet@_MenuetFreeSpace - call @@MemoryHeap@Free$qr21MemoryHeap@TFreeSpacepv - add esp,8 - mov byte [@Menuet@_MemHeapMutex],0x40 - or eax,-1 - int 0x40 -enddef - -macro call func -{ - if func eq @MemoryHeap@_FirstNotZeroBit$qui - bsf eax,[esp] - else if func eq @MemoryHeap@_CopyMemItemArray$quiuiui - xchg edi,[esp] - xchg esi,[esp+4] - mov ecx,[esp+8] - cld - sub ecx,esi - shr ecx,2 - rep movs dword [edi],[esi] - xchg edi,[esp] - xchg esi,[esp+4] - else - call func - end if -} - -@$bnwa$qui = @@Menuet@Alloc$qui -@$bnew$qui = @@Menuet@Alloc$qui - -@$bdla$qpv = @@Menuet@Free$qpv -@$bdele$qpv = @@Menuet@Free$qpv - -define @_vector_new_ldtc_$qpvuiuiuit1uit1 -.var_2C = -0Ch -.var_28 = -8 -.var_24 = -4 -.arg_0 = 8 -.arg_4 = 0Ch -.arg_8 = 10h -.arg_C = 14h -.arg_10 = 18h - push ebp - mov ebp, esp - add esp, -0Ch - push ebx - push esi - push edi - mov edi, [ebp+.arg_10] - mov esi, [ebp+.arg_C] - cmp dword [ebp+.arg_0], 0 - jnz .loc_10070 - mov edx, [ebp+.arg_4] - imul edx, [ebp+.arg_8] - test esi, 10h - jz @f - add edx, 4 -@@: - push edx - call @$bnwa$qui - pop ecx - mov [ebp+.arg_0], eax - test eax, eax - jz .ret - mov dword [ebp+.var_2C], 1 - jmp @f -.loc_10070: - and dword [ebp+.var_2C], 0 -@@: - test esi, 10h - jz @f - mov edx, [ebp+.arg_0] - mov ecx, [ebp+.arg_8] - mov [edx], ecx - add dword [ebp+.arg_0], 4 -@@: - mov eax, [ebp+.arg_0] - test edi, edi - jz .ret - mov ecx, [ebp+.arg_8] - mov [ebp+.var_28], ecx - mov ebx, eax - jmp .loc_100EF -.loc_100B0: - mov eax, esi - and eax, 7 - dec eax - jz .loc_100CB - dec eax - jz .loc_100D1 - dec eax - jz .loc_100D6 - dec eax - dec eax - jz .loc_100DC - jmp $ -.loc_100CB: - push ebx - call edi - pop ecx - jmp .loc_100EC -.loc_100D1: -.loc_100DC: - push ebx - call edi - jmp .loc_100EC -.loc_100D6: - mov eax, ebx - call edi -.loc_100EC: - add ebx, [ebp+.arg_4] -.loc_100EF: - dec dword [ebp+.var_28] - jns .loc_100B0 - mov eax, [ebp+.arg_0] -.ret: - pop edi - pop esi - pop ebx - mov esp, ebp - pop ebp - ret -enddef - -define @_vector_delete_ldtc_$qpvuiuiuit1 -.arg_0 = 8 -.arg_4 = 0Ch -.arg_8 = 10h -.arg_C = 14h -.arg_10 = 18h - push ebp - mov ebp, esp - push ebx - push esi - push edi - mov edi, [ebp+.arg_C] - mov esi, edi - and esi, 10h - and edi, 8 - cmp dword [ebp+.arg_0], 0 - jz .ret - test esi, esi - jz @f - mov ecx, [ebp+.arg_0] - mov eax, [ecx-4] - mov [ebp+.arg_8], eax -@@: - mov ebx, [ebp+.arg_8] - dec ebx - imul ebx, [ebp+.arg_4] - add ebx, [ebp+.arg_0] - jmp .loc_100D3 -.loc_1008B: - mov eax, [ebp+.arg_C] - and eax, 7 - dec eax - jz .loc_1009E - dec eax - jz .loc_100A9 - dec eax - jz .loc_100B1 - dec eax - dec eax - jz .loc_100BD - jmp $ -.loc_1009E: - push 2 - push ebx - call dword [ebp+.arg_10] - add esp, 8 - jmp .loc_100D0 -.loc_100A9: - push 2 - push ebx - call dword [ebp+.arg_10] - jmp .loc_100D0 -.loc_100B1: - mov edx, 2 - mov eax, ebx - call dword [ebp+.arg_10] - jmp .loc_100D0 -.loc_100BD: - push 2 - push ebx - call dword [ebp+.arg_10] -.loc_100D0: - sub ebx, [ebp+.arg_4] -.loc_100D3: - dec dword [ebp+.arg_8] - jns .loc_1008B - test esi, esi - jz @f - sub dword [ebp+.arg_0], 4 -@@: - test edi, edi - jz @f - push dword [ebp+.arg_0] - call @$bdla$qpv - pop ecx - jmp .ret -@@: - mov eax, [ebp+.arg_0] - jmp .reteax -.ret: - xor eax, eax -.reteax: - pop edi - pop esi - pop ebx - mov esp, ebp - pop ebp - ret -enddef - -;/**/ diff --git a/programs/games/checkers/trunk/include/me_lib.h b/programs/games/checkers/trunk/include/me_lib.h deleted file mode 100644 index 48cebb6c7b..0000000000 --- a/programs/games/checkers/trunk/include/me_lib.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef __MENUET_LIB_H_INCLUDED_ -#define __MENUET_LIB_H_INCLUDED_ - -// Menuet interface. - -namespace Menuet // All menuet functions, types and data are nested in the (Menuet) namespace. -{ - unsigned int StrLen(const char *str); - char *StrCopy(char *dest, const char *src); - void *MemCopy(void *dest, const void *src, unsigned int n); - void *MemSet(void *s, char c, unsigned int n); - - double Floor(double x); -} - -#endif // __MENUET_LIB_H_INCLUDED_ diff --git a/programs/games/checkers/trunk/include/me_lib.inc b/programs/games/checkers/trunk/include/me_lib.inc deleted file mode 100644 index 7be9ab3fac..0000000000 --- a/programs/games/checkers/trunk/include/me_lib.inc +++ /dev/null @@ -1,118 +0,0 @@ -define @Menuet@StrLen$qpxc - push edi - cld - mov edi,[esp+8] - mov ecx,-1 - xor al,al - repnz scas byte [edi] - not ecx - lea eax,[ecx-1] - pop edi - ret -enddef - -define @Menuet@StrCopy$qpcpxc - push esi - push edi - cld - mov edi,[esp+16] - mov ecx,-1 - mov esi,edi - xor al,al - repnz scas byte [edi] - not ecx - mov edi,[esp+12] - mov edx,ecx - mov eax,edi - shr ecx,2 - rep movs dword [edi],[esi] - mov ecx,edx - and ecx,3 - rep movs byte [edi],[esi] - pop edi - pop esi - ret -enddef - -define @Menuet@MemCopy$qpvpxvui - push esi - push edi - cld - mov edi,[esp+12] - mov eax,edi - mov ecx,[esp+20] - mov esi,[esp+16] - mov edx,ecx - shr ecx,2 - rep movs dword [edi],[esi] - mov ecx,edx - and ecx,3 - rep movs byte [edi],[esi] - pop edi - pop esi - ret -enddef - -define @Menuet@MemSet$qpvcui - push edi - cld - mov edi,[esp+8] - mov al,[esp+12] - mov ah,al - mov dx,ax - shl eax,16 - mov ax,dx - mov ecx,[esp+16] - mov edx,ecx - shr ecx,2 - rep stos dword [edi] - mov ecx,edx - and ecx,3 - rep stos byte [edi] - pop edi - mov eax,[esp+4] - ret -enddef - -define __ftol - sub esp,12 - wait - fstcw word [esp+8] - wait - mov al,[esp+9] - or byte [esp+9],0x0c - fldcw word [esp+8] - fistp qword [esp] - mov [esp+9],al - fldcw word [esp+8] - mov eax,[esp] - mov edx,[esp+4] - add esp,12 - ret -enddef - -define @Menuet@Floor$qd - fld qword [esp+4] - mov ax,[esp+10] - shl ax,1 - cmp ax,0x8680 - ja Menuet_floor_end - mov ch,4 - sub esp,2 - wait - fstcw word [esp] - mov ax,0xf3ff - wait - mov dx,[esp] - and ax,dx - or ah,ch - mov [esp],ax - fldcw word [esp] - frndint - mov [esp],dx - fldcw word [esp] - add esp,2 -Menuet_floor_end: - ret -enddef - diff --git a/programs/games/checkers/trunk/include/me_start.inc b/programs/games/checkers/trunk/include/me_start.inc deleted file mode 100644 index 36e1bcf24b..0000000000 --- a/programs/games/checkers/trunk/include/me_start.inc +++ /dev/null @@ -1,90 +0,0 @@ -use32 -org 0x0 - db 'MENUET01' - dd 0x1 - dd MenuetEntryPoint - dd I_END - dd U_END+STACKSIZE+HEAPSIZE - dd U_END+STACKSIZE - dd 0x0,0x0 - -ptr equ -offset equ -short equ -tbyte equ tword - -PTR equ -OFFSET equ -SHORT equ -TBYTE equ TWORD - -macro movsb a,b -{ - if a eq & b eq - movsb - else - movsx a,b - end if -} - -macro movsw a,b -{ - if a eq & b eq - movsw - else - movsx a,b - end if -} - -macro segment name {} - -macro endseg name {} - -macro usedef [link] -{ - common - if ~link eq - virtual at 0 - forward - dd link - common - end virtual - end if -} - -macro define x,[link] -{ - common - if x eq - else if used x - x: - usedef link -} - -macro enddef [link] -{ - common - usedef link - end if -} - -macro newdef x,[link] -{ - common - end if - if x eq - else if used x - x: - usedef link -} - -macro nextdef x,[link] -{ - common - usedef x - end if - if x eq - else if used x - x: - usedef link -} diff --git a/programs/games/checkers/trunk/include/memheap.h b/programs/games/checkers/trunk/include/memheap.h deleted file mode 100644 index bf8aa101fc..0000000000 --- a/programs/games/checkers/trunk/include/memheap.h +++ /dev/null @@ -1,626 +0,0 @@ -#ifndef __MEMORY_HEAP_RBTREE_H_INCLUDED_ -#define __MEMORY_HEAP_RBTREE_H_INCLUDED_ - -namespace MemoryHeap -{ - typedef unsigned int TMemItem; - - enum {NumTreeSmall = 8 * sizeof(TMemItem)}; - -// Memory heap interface. - - struct TFreeSpace - { - TMemItem Small[NumTreeSmall], Min, SmallMask; - }; - - struct TMemBlock - { - TMemItem *Begin; - }; - - bool BlockValid(const TMemBlock &block); // Is the given memory block valid? - void *BlockBegin(const TMemBlock &block); // Return the beginning address of the block. - void *BlockEnd(const TMemBlock &block); // Return the ending address of the block. - TFreeSpace &BlockFreeSpace(const TMemBlock &block); // Return the free space of the block. - - void InitFreeSpace(TFreeSpace &fs); // Initialize the free space. - TMemBlock NullBlock(); // Return null invalid block. - TMemBlock CreateBlock(void *begin, void *end, TFreeSpace &fs); - // Create a memory block with the given begin and end and add free space of it to (fs), - //_ give (BlockAddSize) bytes of the block for it's data. - //_ (Program can alloc (end - begin - BlockAddSize) bytes after it, - //_ that must be not less than (MemMinSize) ). - TMemBlock CreateBlock(void *begin, void *end); - // Create a memory block with the given begin and end and new free space for it, - //_ give (BlockAddSizeFS) bytes of the block for it's data. - //_ (Program can alloc (end - begin - BlockAddSizeFS) bytes after it, - //_ that must be not less than (MemMinSize) ). - void ResizeBlock(TMemBlock block, void *new_end); // Resize the memory block to the given new end. - void RemoveBlock(TMemBlock block); // Remove the given memory block. - - void *BlockEndFor(TMemBlock block, unsigned int size); - // Return the new end of the block needed for (ResizeBlock) to alloc the given size of memory. - unsigned int BlockSize(TMemBlock block); // Return the size of the given block. - unsigned int MemSize(void *mem); // Return the size of the allocced memory. - - void *Alloc(TFreeSpace &fs, unsigned int size); - // Alloc a memory in the given free space, give (MemAddSize) bytes for it's data. - void *ReAlloc(TFreeSpace &fs, unsigned int size, void *mem); - // ReAlloc the given memory, it must lie in the block with the given free space. - void Free(TFreeSpace &fs, void *mem); - // Free the given memory, it must lie in the block with the given free space. - -// Macro definitions. - -#define MEMORY_HEAP_ALIGN_DOWN(s) (MemoryHeap::TMemItem(s) & ~(MemoryHeap::MemAlign - 1)) -#define MEMORY_HEAP_ALIGN_UP(s) ((MemoryHeap::TMemItem(s) + (MemoryHeap::MemAlign - 1)) & ~(MemoryHeap::MemAlign - 1)) -#define MEMORY_HEAP_ITEM(s,k) ( ((MemoryHeap::TMemItem*)(s))[(k)] ) -#define MEMORY_HEAP_NEXT(s) (MEMORY_HEAP_ITEM((s),-1)) -#define MEMORY_HEAP_PREV(s) (MEMORY_HEAP_ITEM((s),-2)) -#define MEMORY_HEAP_FREE(s) (MEMORY_HEAP_ITEM((s),-1) & 1) - -// Constants. - - enum {MemAlign = sizeof(TMemItem)}; - enum {MemAddSize = MEMORY_HEAP_ALIGN_UP(2 * sizeof(TMemItem))}; - enum {BlockEndSize = MemAddSize}; - enum {BlockAddSize = MEMORY_HEAP_ALIGN_UP(4 * sizeof(TMemItem)) + BlockEndSize}; - enum {BlockAddSizeFS = BlockAddSize + BlockEndSize + MEMORY_HEAP_ALIGN_UP(sizeof(TFreeSpace))}; - enum {MemMinSize = MEMORY_HEAP_ALIGN_UP(2 * sizeof(TMemItem))}; - -// Inline functions. - - inline bool BlockValid(const TMemBlock &block) {return block.Begin != 0;} - - inline void *BlockBegin(const TMemBlock &block) {return (void*)block.Begin;} - - inline void *BlockEnd(const TMemBlock &block) {return block.Begin ? (void*)block.Begin[1] : 0;} - - inline TFreeSpace &BlockFreeSpace(const TMemBlock &block) {return *(TFreeSpace*)block.Begin[0];} - - inline TMemBlock NullBlock() {TMemBlock block; block.Begin = 0; return block;} - - inline void *BlockEndFor(TMemBlock block, unsigned int size) - { - TMemItem last = (TMemItem)block.Begin[1]; - TMemItem prevlast = MEMORY_HEAP_PREV(last); - return (void*)( (MEMORY_HEAP_FREE(prevlast) ? prevlast : last) + MemAddSize + - ((size <= MemMinSize) ? MemMinSize : MEMORY_HEAP_ALIGN_UP(size)) ); - } - - inline unsigned int BlockSize(TMemBlock block) - { - if (!block.Begin) return 0; - return (unsigned int)(block.Begin[1] - (TMemItem)block.Begin); - } - - inline unsigned int MemSize(void *mem) - { - if (!mem) return 0; - TMemItem c = (TMemItem)mem; - return MEMORY_HEAP_NEXT(c) - c - MemAddSize; - } - -// Free space item functions. - - TMemItem _FirstNotZeroBit(TMemItem i) - { - TMemItem r = 0; - while ((i >>= 1) != 0) r++; - return r; - } - - void _RBTreeRotate(TMemItem parent, TMemItem item, int side) - { - TMemItem temp = MEMORY_HEAP_ITEM(parent,0); - MEMORY_HEAP_ITEM(item,0) = temp; - if (temp) - { - if (MEMORY_HEAP_ITEM(temp,2) == parent) - { - MEMORY_HEAP_ITEM(temp,2) = item; - } - else MEMORY_HEAP_ITEM(temp,3) = item; - } - temp = MEMORY_HEAP_ITEM(item,side^1); - if (temp) MEMORY_HEAP_ITEM(temp,0) = parent; - MEMORY_HEAP_ITEM(parent,side) = temp; - MEMORY_HEAP_ITEM(parent,0) = item; - MEMORY_HEAP_ITEM(item,side^1) = parent; - temp = MEMORY_HEAP_ITEM(parent,1); - MEMORY_HEAP_ITEM(parent,1) = MEMORY_HEAP_ITEM(item,1); - MEMORY_HEAP_ITEM(item,1) = temp; - } - - void InitFreeSpace(TFreeSpace &fs) - { - TMemItem i; - for (i = 0; i <= NumTreeSmall; i++) fs.Small[i] = 0; - fs.Min = 0; fs.SmallMask = 0; - } - - void _FreeAdd(TFreeSpace &fs, TMemItem item) - { - TMemItem size = MEMORY_HEAP_NEXT(item) - item; - if (size < MemAddSize + MemMinSize + MemAlign * NumTreeSmall) - { - TMemItem s = (size - (MemAddSize + MemMinSize)) / MemAlign; - TMemItem &addto = fs.Small[s]; - MEMORY_HEAP_ITEM(item,1) = (TMemItem)(&addto); - MEMORY_HEAP_ITEM(item,0) = (TMemItem)addto; - if (addto) MEMORY_HEAP_ITEM(addto,1) = item; - addto = item; - fs.SmallMask |= TMemItem(1) << s; - return; - } - TMemItem addto = fs.Min, parent, temp; - MEMORY_HEAP_ITEM(item,2) = 0; - MEMORY_HEAP_ITEM(item,3) = 0; - if (!addto) - { - MEMORY_HEAP_ITEM(item,0) = 0; - MEMORY_HEAP_ITEM(item,1) = 1; - fs.Min = item; - return; - } - MEMORY_HEAP_ITEM(item,1) = 0; - TMemItem side = 2; - if (MEMORY_HEAP_NEXT(addto) - addto >= size) fs.Min = item; - else - { - for (;;) - { - parent = MEMORY_HEAP_ITEM(addto,0); - if (!parent) break; - if (MEMORY_HEAP_NEXT(parent) - parent < size) addto = parent; - else break; - } - for (;;) - { - if (MEMORY_HEAP_NEXT(addto) - addto < size) - { - temp = MEMORY_HEAP_ITEM(addto,3); - if (!temp) {side = 3; break;} - addto = temp; - } - else - { - temp = MEMORY_HEAP_ITEM(addto,2); - if (!temp) break; - addto = temp; - } - } - } - MEMORY_HEAP_ITEM(item,0) = addto; - MEMORY_HEAP_ITEM(addto,side) = item; - for (;;) - { - if (MEMORY_HEAP_ITEM(addto,1) != 0) return; - parent = MEMORY_HEAP_ITEM(addto,0); - temp = MEMORY_HEAP_ITEM(parent,2); - if (temp == addto) - { - temp = MEMORY_HEAP_ITEM(parent,3); - side = 2; - } - else side = 3; - if (!temp || MEMORY_HEAP_ITEM(temp,1) != 0) break; - MEMORY_HEAP_ITEM(addto,1) = 1; - MEMORY_HEAP_ITEM(temp,1) = 1; - item = parent; - addto = MEMORY_HEAP_ITEM(item,0); - if (!addto) return; - MEMORY_HEAP_ITEM(item,1) = 0; - } - if (MEMORY_HEAP_ITEM(addto,side) != item) - { - temp = MEMORY_HEAP_ITEM(item,side); - if (temp) MEMORY_HEAP_ITEM(temp,0) = addto; - MEMORY_HEAP_ITEM(addto,side^1) = temp; - MEMORY_HEAP_ITEM(addto,0) = item; - MEMORY_HEAP_ITEM(item,side) = addto; - MEMORY_HEAP_ITEM(item,0) = parent; - MEMORY_HEAP_ITEM(parent,side) = item; - } - else item = addto; - _RBTreeRotate(parent, item, side); - } - - void _FreeDel(TFreeSpace &fs, TMemItem item) - { - TMemItem size = MEMORY_HEAP_NEXT(item) - item; - if (size < MemAddSize + MemMinSize + MemAlign * NumTreeSmall) - { - TMemItem prev = MEMORY_HEAP_ITEM(item,1); - TMemItem next = MEMORY_HEAP_ITEM(item,0); - MEMORY_HEAP_ITEM(prev,0) = next; - if (next) MEMORY_HEAP_ITEM(next,1) = prev; - else - { - TMemItem s = (size - (MemAddSize + MemMinSize)) / MemAlign; - if (!fs.Small[s]) fs.SmallMask &= ~(TMemItem(1) << s); - } - return; - } - TMemItem parent, temp, second, add; - TMemItem side = 2; - temp = MEMORY_HEAP_ITEM(item,3); - if (temp) - { - for (;;) - { - second = temp; - temp = MEMORY_HEAP_ITEM(temp,2); - if (!temp) break; - } - if (fs.Min == item) fs.Min = second; - add = MEMORY_HEAP_ITEM(second,3); - parent = MEMORY_HEAP_ITEM(second,0); - if (parent == item) {parent = second; side = 3;} - else - { - temp = MEMORY_HEAP_ITEM(item,3); - MEMORY_HEAP_ITEM(second,3) = temp; - MEMORY_HEAP_ITEM(temp,0) = second; - } - temp = MEMORY_HEAP_ITEM(item,2); - MEMORY_HEAP_ITEM(second,2) = temp; - if (temp) MEMORY_HEAP_ITEM(temp,0) = second; - temp = MEMORY_HEAP_ITEM(item,0); - MEMORY_HEAP_ITEM(second,0) = temp; - if (temp) - { - if (MEMORY_HEAP_ITEM(temp,2) == item) - { - MEMORY_HEAP_ITEM(temp,2) = second; - } - else MEMORY_HEAP_ITEM(temp,3) = second; - } - MEMORY_HEAP_ITEM(parent,side) = add; - if (add) MEMORY_HEAP_ITEM(add,0) = parent; - bool color = MEMORY_HEAP_ITEM(second,1); - MEMORY_HEAP_ITEM(second,1) = MEMORY_HEAP_ITEM(item,1); - if (!color) return; - } - else - { - if (fs.Min == item) fs.Min = MEMORY_HEAP_ITEM(item,0); - add = MEMORY_HEAP_ITEM(item,2); - parent = MEMORY_HEAP_ITEM(item,0); - if (add) MEMORY_HEAP_ITEM(add,0) = parent; - if (parent) - { - if (MEMORY_HEAP_ITEM(parent,2) == item) - { - MEMORY_HEAP_ITEM(parent,2) = add; - } - else - { - MEMORY_HEAP_ITEM(parent,3) = add; - side = 3; - } - } - else - { - if (add) MEMORY_HEAP_ITEM(add,1) = 1; - return; - } - if (!MEMORY_HEAP_ITEM(item,1)) return; - } - if (add && !MEMORY_HEAP_ITEM(add,1)) - { - MEMORY_HEAP_ITEM(add,1) = 1; - return; - } - for (;;) - { - second = MEMORY_HEAP_ITEM(parent,side^1); - if (!MEMORY_HEAP_ITEM(second,1)) - { - _RBTreeRotate(parent, second, side^1); - second = MEMORY_HEAP_ITEM(parent,side^1); - } - temp = MEMORY_HEAP_ITEM(second,side^1); - if (temp && !MEMORY_HEAP_ITEM(temp,1)) - { - MEMORY_HEAP_ITEM(temp,1) = 1; - break; - } - temp = MEMORY_HEAP_ITEM(second,side); - if (temp && !MEMORY_HEAP_ITEM(temp,1)) - { - _RBTreeRotate(second, temp, side); - MEMORY_HEAP_ITEM(second,1) = 1; - second = temp; - break; - } - MEMORY_HEAP_ITEM(second,1) = 0; - if (!MEMORY_HEAP_ITEM(parent,1)) - { - MEMORY_HEAP_ITEM(parent,1) = 1; - return; - } - second = parent; - parent = MEMORY_HEAP_ITEM(second,0); - if (!parent) return; - if (MEMORY_HEAP_ITEM(parent,2) == second) side = 2; - else side = 3; - } - _RBTreeRotate(parent, second, side^1); - } - - TMemItem _FreeFindAfter(TMemItem item, TMemItem size) - { - if (!item) return 0; - TMemItem paritem, s; - if (MEMORY_HEAP_NEXT(item) - item >= size) return item; - for (;;) - { - paritem = MEMORY_HEAP_ITEM(item,0); - if (!paritem) break; - s = MEMORY_HEAP_NEXT(paritem) - paritem; - if (s == size) return paritem; - if (s < size) item = paritem; - else break; - } - MEMORY_HEAP_ITEM(item,3); - for (;;) - { - if (!item) return paritem; - s = MEMORY_HEAP_NEXT(item) - item; - if (s == size) return item; - if (s < size) item = MEMORY_HEAP_ITEM(item,3); - else - { - paritem = item; - item = MEMORY_HEAP_ITEM(item,2); - } - } - } - - TMemItem _FreeFind(TFreeSpace &fs, TMemItem size) - { - TMemItem item, nextitem, s; - if (size < MemAddSize + MemMinSize + MemAlign * NumTreeSmall) - { - TMemItem m, t; - s = (size - (MemAddSize + MemMinSize)) / MemAlign; - item = fs.Small[s]; - if (item) return item; - if (size < MemAlign * NumTreeSmall) - { - t = size / MemAlign; - m = fs.SmallMask >> t; - if (m) return fs.Small[t + _FirstNotZeroBit(m)]; - else if (fs.Min) return fs.Min; - } - else - { - item = _FreeFindAfter(fs.Min, size + 1 + MemAddSize + MemMinSize); - if (item) return item; - } - m = fs.SmallMask >> s; - if (m) return fs.Small[s + _FirstNotZeroBit(m)]; - else return fs.Min; - } - item = _FreeFindAfter(fs.Min, ++size); - if (!item) return 0; - s = MEMORY_HEAP_NEXT(item) - item; - if (s == size) return item; - size += MemAddSize + MemMinSize; - if (s >= size) return item; - nextitem = _FreeFindAfter(item, size); - return nextitem ? nextitem : item; - } - -// Block functions. - - inline void _CreateBlockEnd(TMemBlock &block, TFreeSpace &fs, TMemItem c, TMemItem e) - { - block.Begin[0] = (TMemItem)(&fs); - if (e - c < TMemItem(MemAddSize + MemMinSize)) - { - MEMORY_HEAP_NEXT(c) = 0; - block.Begin[1] = c; - } - else - { - MEMORY_HEAP_NEXT(c) = e + 1; - _FreeAdd(fs, c); - MEMORY_HEAP_PREV(e) = c; - MEMORY_HEAP_NEXT(e) = 0; - block.Begin[1] = e; - } - } - - TMemBlock CreateBlock(void *begin, void *end, TFreeSpace &fs) - { - TMemBlock block = {0}; - TMemItem b = MEMORY_HEAP_ALIGN_UP(begin); - TMemItem e = MEMORY_HEAP_ALIGN_DOWN(end); - if (e <= b || e - b < TMemItem(BlockAddSize - MemAddSize)) return block; - block.Begin = (TMemItem*)b; - b += MEMORY_HEAP_ALIGN_UP(4 * sizeof(TMemItem)); - MEMORY_HEAP_PREV(b) = 0; - _CreateBlockEnd(block, fs, b, e); - return block; - } - - TMemBlock CreateBlock(void *begin, void *end) - { - TMemBlock block = {0}; - TMemItem b = MEMORY_HEAP_ALIGN_UP(begin); - TMemItem e = MEMORY_HEAP_ALIGN_DOWN(end); - if (e <= b || e - b < TMemItem(BlockAddSizeFS - MemAddSize)) return block; - block.Begin = (TMemItem*)b; - b += MEMORY_HEAP_ALIGN_UP(4 * sizeof(TMemItem)); - TMemItem c = b + MemAddSize + MEMORY_HEAP_ALIGN_UP(sizeof(TFreeSpace)); - MEMORY_HEAP_PREV(b) = 0; - MEMORY_HEAP_NEXT(b) = c; - MEMORY_HEAP_PREV(c) = b; - InitFreeSpace(*(TFreeSpace*)b); - _CreateBlockEnd(block, *(TFreeSpace*)b, c, e); - return block; - } - - void ResizeBlock(TMemBlock block, void *new_end) - { - if (!BlockValid(block)) return; - TMemItem e = MEMORY_HEAP_ALIGN_DOWN(new_end); - TMemItem c = block.Begin[1]; - TFreeSpace &fs = *(TFreeSpace*)block.Begin[0]; - do - { - if (c == e) return; - else if (c > e) - { - while ((c = MEMORY_HEAP_PREV(c)) > e) - { - if (MEMORY_HEAP_FREE(c)) _FreeDel(fs, c); - } - if (!c) {block.Begin = 0; return;} - if (MEMORY_HEAP_FREE(c)) - { - _FreeDel(fs, c); - if (e - c < TMemItem(MemAddSize + MemMinSize)) e = c; - else - { - MEMORY_HEAP_NEXT(c) = e + 1; - _FreeAdd(*(TFreeSpace*)block.Begin[0], c); - break; - } - } - else if (e - c >= TMemItem(MemAddSize + MemMinSize)) - { - MEMORY_HEAP_NEXT(c) = e; break; - } - MEMORY_HEAP_NEXT(c) = 0; - block.Begin[1] = c; - if (c == e) return; - } - TMemItem pc = MEMORY_HEAP_PREV(c); - if (pc && MEMORY_HEAP_FREE(pc)) _FreeDel(fs, c = pc); - else if (e - c < TMemItem(MemAddSize + MemMinSize)) return; - MEMORY_HEAP_NEXT(c) = e + 1; - _FreeAdd(fs, c); - } while(false); - MEMORY_HEAP_PREV(e) = c; - MEMORY_HEAP_NEXT(e) = 0; - block.Begin[1] = e; - } - - void RemoveBlock(TMemBlock block) - { - if (!BlockValid(block)) return; - TMemItem e = block.Begin[1]; - TFreeSpace &fs = *(TFreeSpace*)block.Begin[0]; - while ((e = MEMORY_HEAP_PREV(e)) != 0) - { - if (MEMORY_HEAP_FREE(e)) _FreeDel(fs, e); - } - block.Begin = 0; - } - -// Free space functions. - - void _CopyMemItemArray(TMemItem dest, TMemItem src, TMemItem end) - { - TMemItem k = (end - src) / sizeof(TMemItem); - TMemItem *d = (TMemItem*)dest; - TMemItem *s = (TMemItem*)src; - while (k--) *(d++) = *(s++); - } - - void *Alloc(TFreeSpace &fs, unsigned int size) - { - if (!size) return 0; - TMemItem s = MEMORY_HEAP_ALIGN_UP(size) + MemAddSize; - if (s < MemAddSize + MemMinSize) s = MemAddSize + MemMinSize; - TMemItem c = _FreeFind(fs, s); - if (!c) return 0; - _FreeDel(fs, c); - TMemItem nc = --MEMORY_HEAP_NEXT(c); - TMemItem mc = c + s; - if (nc - (MemAddSize + MemMinSize) >= mc) - { - MEMORY_HEAP_NEXT(c) = mc; - MEMORY_HEAP_PREV(mc) = c; - MEMORY_HEAP_NEXT(mc) = nc + 1; - MEMORY_HEAP_PREV(nc) = mc; - _FreeAdd(fs, mc); - } - return (void*)c; - } - - void *ReAlloc(TFreeSpace &fs, void *mem, unsigned int size) - { - if (!mem) return Alloc(fs, size); - if (!size) {Free(fs, mem); return 0;} - TMemItem s = MEMORY_HEAP_ALIGN_UP(size) + MemAddSize; - TMemItem c = (TMemItem)mem; - TMemItem mc = MEMORY_HEAP_NEXT(c); - TMemItem nc = MEMORY_HEAP_NEXT(mc); - if (--nc & 1) nc = mc; - if (s < MemAddSize + MemMinSize) s = MemAddSize + MemMinSize; - if (nc - c < s) - { - mem = Alloc(fs, size); - if (mem) - { - _CopyMemItemArray((TMemItem)mem, c, mc - MemAddSize); - Free(fs, (void*)c); - return mem; - } - else - { - TMemItem pc = MEMORY_HEAP_PREV(c); - if (pc && MEMORY_HEAP_FREE(pc) && nc - pc >= s) - { - _FreeDel(fs, pc); - _CopyMemItemArray(pc, c, mc - MemAddSize); - c = pc; - } - else return 0; - } - } - if (mc < nc) _FreeDel(fs, mc); - mc = c + s; - if (nc - (MemAddSize + MemMinSize) >= mc) - { - MEMORY_HEAP_NEXT(c) = mc; - MEMORY_HEAP_PREV(mc) = c; - MEMORY_HEAP_NEXT(mc) = nc + 1; - MEMORY_HEAP_PREV(nc) = mc; - _FreeAdd(fs, mc); - } - else - { - MEMORY_HEAP_NEXT(c) = nc; - MEMORY_HEAP_PREV(nc) = c; - } - return (void*)c; - } - - int free_a = 0; - - void Free(TFreeSpace &fs, void *mem) - { - TMemItem c = (TMemItem)mem; - if (!c) return; - TMemItem pc = MEMORY_HEAP_PREV(c); - TMemItem mc = MEMORY_HEAP_NEXT(c); - TMemItem nc = MEMORY_HEAP_NEXT(mc); - if (--nc & 1) nc = mc; - else _FreeDel(fs, mc); - if (free_a == 1) return; - if (pc && MEMORY_HEAP_FREE(pc)) _FreeDel(fs, c = pc); - MEMORY_HEAP_NEXT(c) = nc + 1; - MEMORY_HEAP_PREV(nc) = c; - if (free_a == 2) return; - _FreeAdd(fs, c); - } -} - -#endif // ndef __MEMORY_HEAP_RBTREE_H_INCLUDED_ - diff --git a/programs/games/checkers/trunk/include/menuet.h b/programs/games/checkers/trunk/include/menuet.h deleted file mode 100644 index 74e0bff50f..0000000000 --- a/programs/games/checkers/trunk/include/menuet.h +++ /dev/null @@ -1,536 +0,0 @@ -#ifndef __MENUET_H_INCLUDED_ -#define __MENUET_H_INCLUDED_ - -#include - -// Menuet interface. - -namespace Menuet // All menuet functions, types and data are nested in the (Menuet) namespace. -{ - const char *DebugPrefix = "User program: "; - - struct TWindowData // Data for drawing a window. - { - unsigned short WindowType, HeaderType; - unsigned long WindowColor, HeaderColor, BorderColor, TitleColor; - const char *Title; - }; - - struct TStartData // This structure is used only for MenuetOnStart function. - { - unsigned short Left, Width, Top, Height; // Initial window rectangle. - TWindowData WinData; - }; - - typedef void **TThreadData; // Thread data are the fast identifier of thread, contains user dword in - //_ the zero element and stack beginning (or zero if it is unknown) in the first element. - //_ The stack will be deleted from dynamic memory at the finish of the thread if stack beginning is not zero. - - struct TMutex; // Simple mutex can be locked only once at a time. -#define MENUET_MUTEX_INIT {} // Simple mutex initializer, cat be redefined in a realization of the library - - struct TRecMutex; // Recursive mutex can be locked many times by a single thread at a time. -#define MENUET_REC_MUTEX_INIT {} // Recursive mutex initializer, cat be redefined in a realization of the library - - // Some functions have two forms: the fast form with (thread_data) parameter and the form without it. - // Note: pass only thread data of current thread as (thread_data) parameter to these functions. - - void Main(); // Main function is called at program startup. - void* ThreadMain(void *user = 0, void *stack_begin = 0); - // Called at thread startup, (user) is placed in thread data as a user dword, - //_ (stack_begin) is placed in thread data as a stack beginning. - //_ Return new value of stack beginning that can be changed in the thread data. - void GetWindowData(TWindowData &win_data); // Write current window data to (win_data). - void GetWindowData(TWindowData &win_data, TThreadData thread_data); - void SetWindowData(const TWindowData &win_data); // Replace current window data by (win_data). - void SetWindowData(const TWindowData &win_data, TThreadData thread_data); - void CloseWindow(); // Close current window when returning to message loop. - void CloseWindow(TThreadData thread_data); - void Redraw(int frame = 0); // Redraw current window immediately, if (frame) is positive redraw the frame too, - void Redraw(int frame, TThreadData thread_data); //_ if (frame) is negative redraw only invalideted window. - void Invalidate(int frame = 0); // Redraw current window when no message will be is the queue, - void Invalidate(int frame, TThreadData thread_data); //_ if (frame) is positive redraw the frame too, - //_ if (frame) is negative do nothing. - void MoveWindow(const int window_rect[/* 4 */]); // Move and resize current window. - - void Abort(); // Abnormally terminate a program. - void ExitProcess(); // Exit from the process, don't call any destructors of global varyables - void ExitThread(); // Exit from the current thread - void ExitThread(TThreadData thread_data); - void ReturnMessageLoop(); // Return to the message loop of the thread. Exit from the thread - void ReturnMessageLoop(TThreadData thread_data); //_ if it is called from (MenuetOnStart). - - void Delay(unsigned int time); // Delay the execution of the program during (time) hundredth seconds. - unsigned int Clock(); // Return the time from starting of the system to this moment in hundredth of seconds. - int GetPackedTime(); // Return the current time of day in binary-decimal format 0x00SSMMHH. - void GetTime(int t[/* 3 */]); // Write the current time to (t): t[0] = second, t[1] = minute, t[2] = hour. - int GetPackedDate(); // Return the current date in binary-decimal format 0x00YYDDMM. - void GetDate(int d[/* 3 */]); // Write the current date to (d): d[0] = day, d[1] = month, d[2] = year. - void GetTimeDate(int t[/* 6 */]); // Write the current time and date to (t): t[0] = second, - //_ t[1] = minute, t[2] = hour, t[3] = day, t[4] = month, t[5] = year. - void ReadCommonColors(unsigned int colors[/* 10 */]); // Writes standart window colors to (colors). - unsigned int GetProcessInfo(unsigned int *use_cpu, char process_name[/* 13 */], unsigned int *use_memory, - unsigned int *pid, int window_rect[/* 4 */], unsigned int pid_for = -1); - // Write (pid_for) process information to variables parameters points, return - //_ the number of processes. (pid_for) equal to (-1) means current process. - unsigned int GetPid(); // Return the current thread identifier (pid). - unsigned int GetPid(TThreadData thread_data); - TThreadData GetThreadData(); // Return the thread data of the current thread. - TThreadData GetThreadData(unsigned int pid); // Return the thread data of the thread with the given pid. - - void* GetPicture(unsigned short &width, unsigned short &height); - void* GetPicture(unsigned short &width, unsigned short &height, TThreadData thread_data); - // Return the picture on the window and write its width and height to (width) and (height). - void SetPicture(void *picture, unsigned short width, unsigned short height); - void SetPicture(void *picture, unsigned short width, unsigned short height, TThreadData thread_data); - // Replace the picture on the window by the given picture with the given width and height. - void GetBorderHeader(unsigned short &border_size, unsigned short &header_size); - void GetBorderHeader(unsigned short &border_size, unsigned short &header_size, TThreadData thread_data); - // Write the border thickness to (border_size) and header height to (header_size). - void GetClientSize(unsigned short &width, unsigned short &height); - void GetClientSize(unsigned short &width, unsigned short &height, TThreadData thread_data); - // Write the client area width and height to (width) and (height) parameters. - void GetClientSize(unsigned short &width, unsigned short &height, int win_width, int win_height); - void GetClientSize(unsigned short &width, unsigned short &height, int win_width, int win_height, TThreadData thread_data); - // Write the client area size of window with the width (win_width) - //_ and height (win_height) to (width) and (height) parameters. - void GetScreenSize(unsigned short &width, unsigned short &height); - // Write the screen width and height to (width) and (height) parameters. - - void InitMutex(TMutex *mutex); // Initialize the simple mutex. - void InitRecMutex(TRecMutex *mutex); // Initialize the recursive mutex. - bool TryLock(TMutex *mutex); // Try to lock the mutex without waitting, return true if lock. - bool TryLock(TRecMutex *mutex); - bool TryLock(TRecMutex *mutex, TThreadData thread_data); - bool TryLock(TRecMutex *mutex, unsigned int pid); - void Lock(TMutex *mutex); // Lock mutex and wait for it if this necessary. - void Lock(TRecMutex *mutex); - void Lock(TRecMutex *mutex, TThreadData thread_data); - void Lock(TRecMutex *mutex, unsigned int pid); - bool LockTime(TMutex *mutex, int time); - bool LockTime(TRecMutex *mutex, int time); // Lock mutex and wait for it during (time) hundredth seconds. - bool LockTime(TRecMutex *mutex, int time, TThreadData thread_data); - bool LockTime(TRecMutex *mutex, int time, unsigned int pid); - void UnLock(TMutex *mutex); // Unlock mutex - void UnLock(TRecMutex *mutex); - void UnLock(TRecMutex *mutex, TThreadData thread_data); - void UnLock(TRecMutex *mutex, unsigned int pid); - - void DebugPutChar(char c); // Put the character to the debug board. - void DebugPutString(const char *s); // Put the string to the debug board. - int GetKey(); // Return key pressed by user or -1 if no key was pressed. - int GetMouseButton(); // Return buttons pressed: 0 - no buttons, 1 - left button, 2 - right button, 3 - both buttons. - void GetMousePosition(short &x, short &y, bool absolute = false); - // Write mouse position to (x) and (y): absolute if (absolute) is true and relative the window otherwise. - void GetMousePosPicture(short &x, short &y); - - int GetThreadNumber(); // Return the number of threads currently executing. - bool WasThreadCreated(); // Return true if there was created at least one thread except the main thred. - unsigned int CreateThread(void *user = 0, unsigned int stack_size = 0, void *stack_end = 0); - // Create a new thread with the user dword (user) and stack pointer (stack_end). - //_ If (stack_end) is zero, create stack in dynamic memory of size (stack_size) or - //_ the same size as the main thread if (stack_size) less that 4096. Set the beginning - //_ of the stack if (stack_end) is zero or (stack_size) is not zero, in this case stack - //_ will be deleted automaticaly from dynamic memory at the finish of the thread. -} - -// Function, defined outside. - -bool MenuetOnStart(Menuet::TStartData &me_start, Menuet::TThreadData thread_data); - // Window will be created iff return value is true. -bool MenuetOnClose(Menuet::TThreadData thread_data); // Window will be closed iff return value is true. -int MenuetOnIdle(Menuet::TThreadData thread_data); // Return the time to wait next message. -void MenuetOnSize(int window_rect[/* 4 */], Menuet::TThreadData thread_data); // When the window is resized. -void MenuetOnKeyPress(Menuet::TThreadData thread_data); // When user press a key. -void MenuetOnMouse(Menuet::TThreadData thread_data); // When user move a mouse. - -#ifdef __MENUET__ - -namespace Menuet -{ -// Structures. - - struct TMutex // Simple mutex can be locked only once at a time. - { - unsigned int mut; - }; -#undef MENUET_MUTEX_INIT -#define MENUET_MUTEX_INIT {0x40} // Simple mutex initializer, cat be redefined in a realization of the library - - struct TRecMutex // Recursive mutex can be locked many times by a single thread at a time. - { - unsigned int mut, pid; - }; -#undef MENUET_REC_MUTEX_INIT -#define MENUET_REC_MUTEX_INIT {0x20,-1} // Recursive mutex initializer, cat be redefined in a realization of the library - -// Global variables. - - volatile TThreadData _ThreadTable[256]; - volatile unsigned int _ThreadScanCount[2] = {0, 0}; - volatile int _ThreadNumber = 1; - volatile int _ExitProcessNow = 0; - TMutex _ThreadMutex = MENUET_MUTEX_INIT; - unsigned int _ThreadSavedBegProc[4]; - -// Inline functions. - - inline void GetWindowData(TWindowData &win_data) {GetWindowData(win_data, GetThreadData());} - - inline void SetWindowData(const TWindowData &win_data) {SetWindowData(win_data, GetThreadData());} - - inline void CloseWindow() {CloseWindow(GetThreadData());} - - inline void Redraw(int frame) {Redraw(frame, GetThreadData());} - - inline void Invalidate(int frame) {Invalidate(frame, GetThreadData());} - - inline void* GetPicture(unsigned short &width, unsigned short &height) - { - return GetPicture(width, height, GetThreadData()); - } - - inline void SetPicture(void *picture, unsigned short width, unsigned short height) - { - SetPicture(picture, width, height, GetThreadData()); - } - - inline void GetBorderHeader(unsigned short &border_size, unsigned short &header_size) - { - GetBorderHeader(border_size, header_size, GetThreadData()); - } - - inline void GetClientSize(unsigned short &width, unsigned short &height) - { - unsigned int pid; - int rect[4]; - GetProcessInfo(0, 0, 0, &pid, rect); - GetClientSize(width, height, rect[2], rect[3], GetThreadData(pid)); - } - - inline void GetClientSize(unsigned short &width, unsigned short &height, TThreadData thread_data) - { - int rect[4]; - GetProcessInfo(0, 0, 0, 0, rect); - GetClientSize(width, height, rect[2], rect[3], thread_data); - } - - inline void GetClientSize(unsigned short &width, unsigned short &height, int win_width, int win_height) - { - GetClientSize(width, height, win_width, win_height, GetThreadData()); - } - - inline void GetTimeDate(int t[/* 6 */]) {GetTime(t); GetDate(t + 3);} - - inline void InitMutex(TMutex *mutex) {mutex->mut = 0;} - - inline void InitRecMutex(TRecMutex *mutex) {mutex->mut = 0; mutex->pid = -1;} - - inline bool TryLock(TRecMutex *mutex) {return TryLock(mutex, GetPid());} - - inline bool TryLock(TRecMutex *mutex, TThreadData thread_data) {return TryLock(mutex, GetPid(thread_data));} - - inline void Lock(TRecMutex *mutex) {Lock(mutex, GetPid());} - - inline void Lock(TRecMutex *mutex, TThreadData thread_data) {Lock(mutex, GetPid(thread_data));} - - inline bool LockTime(TRecMutex *mutex, int time) {return LockTime(mutex, time, GetPid());} - - inline bool LockTime(TRecMutex *mutex, int time, TThreadData thread_data) - {return LockTime(mutex, time, GetPid(thread_data));} - - inline void UnLock(TRecMutex *mutex) {UnLock(mutex, GetPid());} - - inline void UnLock(TRecMutex *mutex, TThreadData thread_data) {UnLock(mutex, GetPid(thread_data));} - - inline int GetThreadNumber() {return _ThreadNumber;} - -// Constants from fasm. - -#include - -// Functions. - - unsigned char _HashByte(unsigned int value); - unsigned short _HashWord(unsigned int value); - unsigned int _HashDword(unsigned int value); - - void _GetStartData(TStartData &start_data, TThreadData thread_data) - { - start_data.Left = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_X] >> 16); - start_data.Width = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_X]); - start_data.Top = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_Y] >> 16); - start_data.Height = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_Y]); - GetWindowData(start_data.WinData, thread_data); - } - - void _SetStartData(const TStartData &start_data, TThreadData thread_data) - { - (unsigned long&)thread_data[MENUET_THREAD_DATA_X] = - ((unsigned int)start_data.Left << 16) | start_data.Width; - (unsigned long&)thread_data[MENUET_THREAD_DATA_Y] = - ((unsigned int)start_data.Top << 16) | start_data.Height; - SetWindowData(start_data.WinData, thread_data); - } - - void _ApplyCommonColors(TWindowData &win_data) - { - unsigned int colors[10]; - ReadCommonColors(colors); - win_data.WindowColor = colors[5]; - win_data.HeaderColor = colors[1]; - win_data.BorderColor = colors[0]; - win_data.TitleColor = colors[4]; - } - - void _SetValueFunctionPriority(void *beg, int n) - { - int k, i; - unsigned char num[256]; - for (i = 0; i < 256; i++) num[i] = 0; - for (k = 0; k < n; k++) - { - i = ((unsigned char*)beg + 6*k)[1]; - ((unsigned char*)beg + 6*k)[0] = num[i]; - if (num[i] != 255) num[i]++; - } - } - - void _CallFunctionPriority(void *beg, void *end, bool reverse = false) - { - struct _Local - { - static int cmp(void *beg, int i, int j) - { - unsigned char *x = (unsigned char*)beg + 6*i; - unsigned char *y = (unsigned char*)beg + 6*j; - if (*(unsigned short*)x < *(unsigned short*)y) return -1; - if (*(unsigned short*)x > *(unsigned short*)y) return 1; - return 0; - } - - static void swap(void *beg, int i, int j) - { - unsigned char *x = (unsigned char*)beg + 6*i; - unsigned char *y = (unsigned char*)beg + 6*j; - short s; - int t; - s = *(short*)x; *(short*)x = *(short*)y; *(short*)y = s; - x += 2; y += 2; - t = *(int*)x; *(int*)x = *(int*)y; *(int*)y = t; - } - - static void call(void *beg, int i) - { - unsigned char *x = (unsigned char*)beg + 6*i; - (*(void(**)())(x+2))(); - } - }; - - if (!beg || !end || end <= beg) return; - int i, j, k, m, n; - n = ((unsigned char*)end - (unsigned char*)beg) / 6; - if (n <= 0) return; - _SetValueFunctionPriority(beg, n); - m = n; k = n; - while (m > 1) - { - if (k > 0) k--; - else _Local::swap(beg, 0, --m); - j = k; - for (;;) - { - i = j; - if (2*i + 1 >= m) break; - if (_Local::cmp(beg, 2*i + 1, j) > 0) j = 2*i + 1; - if (2*i + 2 < m && _Local::cmp(beg, 2*i + 2, j) > 0) j = 2*i + 2; - if (i == j) break; - _Local::swap(beg, i, j); - } - } - if (!reverse) - { - for (k = 0; k < n; k++) _Local::call(beg, k); - } - else - { - for (k = n-1; k >= 0; k--) _Local::call(beg, k); - } - } - - bool _CallStart(TThreadData thread_data, void *init = 0, void *init_end = 0) - { - struct _TThreadDataTemplate - { - unsigned int data[12]; - }; - static const _TThreadDataTemplate _ThreadDataTemplate = - {{3, 0x00320100, 0x00320100, 0x33FFFFFF, 0x806060FF, 0x00000000, 0x00FFFF40, 0, 0, 0, -1, -1}}; - - unsigned int pid = GetPid(); - volatile TThreadData *thread_table_item; - Lock(&_ThreadMutex); - if (_ExitProcessNow) ExitProcess(); - thread_table_item = &_ThreadTable[_HashByte(pid)]; - thread_data[MENUET_THREAD_DATA_NEXT] = (void*)*thread_table_item; - (unsigned int&)thread_data[MENUET_THREAD_DATA_PID] = pid; - *(_TThreadDataTemplate*)(thread_data + MENUET_THREAD_DATA_FLAG) = _ThreadDataTemplate; - *thread_table_item = thread_data; - UnLock(&_ThreadMutex); - if (_ExitProcessNow) ExitProcess(); - _CallFunctionPriority(init, init_end, false); - TStartData start_data; - _GetStartData(start_data, thread_data); -// _ApplyCommonColors(start_data.WinData); - (unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] |= 0x40000000; - thread_data[MENUET_THREAD_DATA_TITLE] = (void*)(&start_data); - if (!MenuetOnStart(start_data, thread_data)) return false; - (unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] &= ~0x40000000; - _SetStartData(start_data, thread_data); - return true; - } - - void _RemoveThreadData(TThreadData thread_data, void *exit = 0, void *exit_end = 0) - { - _CallFunctionPriority(exit, exit_end, true); - volatile TThreadData *thread_table_item; - Lock(&_ThreadMutex); - if (_ExitProcessNow) ExitProcess(); - thread_table_item = &_ThreadTable[_HashByte(GetPid(thread_data))]; - while (*thread_table_item) - { - if (*thread_table_item == thread_data) - { - *thread_table_item = (TThreadData)thread_data[MENUET_THREAD_DATA_NEXT]; - break; - } - thread_table_item = (TThreadData*)(*thread_table_item + MENUET_THREAD_DATA_NEXT); - } - UnLock(&_ThreadMutex); - if (_ExitProcessNow) ExitProcess(); - } - - void GetWindowData(TWindowData &win_data, TThreadData thread_data) - { - if ((unsigned int)thread_data[MENUET_THREAD_DATA_FLAG] & 0x40000000) - { - win_data = ((TStartData*)thread_data[MENUET_THREAD_DATA_TITLE])->WinData; - return; - } - win_data.WindowType = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_C_WINDOW] >> 24); - win_data.HeaderType = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_C_HEADER] >> 24); - win_data.WindowColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_WINDOW] & 0xFFFFFF; - win_data.HeaderColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_HEADER] & 0xFFFFFF; - win_data.BorderColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_BORDER] & 0xFFFFFF; - win_data.TitleColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_TITLE] & 0xFFFFFF; - win_data.Title = (char*)thread_data[MENUET_THREAD_DATA_TITLE]; - } - - void SetWindowData(const TWindowData &win_data, TThreadData thread_data) - { - if ((unsigned int)thread_data[MENUET_THREAD_DATA_FLAG] & 0x40000000) - { - ((TStartData*)thread_data[MENUET_THREAD_DATA_TITLE])->WinData = win_data; - return; - } - (unsigned int&)thread_data[MENUET_THREAD_DATA_C_WINDOW] = - ((unsigned int)win_data.WindowType << 24) | (win_data.WindowColor & 0xFFFFFF); - (unsigned int&)thread_data[MENUET_THREAD_DATA_C_HEADER] = - ((unsigned int)win_data.HeaderType << 24) | (win_data.HeaderColor & 0xFFFFFF); - (unsigned int&)thread_data[MENUET_THREAD_DATA_C_BORDER] = win_data.BorderColor & 0xFFFFFF; - (unsigned int&)thread_data[MENUET_THREAD_DATA_C_TITLE] = win_data.TitleColor & 0xFFFFFF; - thread_data[MENUET_THREAD_DATA_TITLE] = (void*)win_data.Title; - Invalidate(1, thread_data); - } - - void CloseWindow(TThreadData thread_data) - { - (unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] |= 0x80000000; - } - - void Invalidate(int frame, TThreadData thread_data) - { - if (frame < 0) return; - (unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] |= (frame ? 3 : 1); - } - - void* GetPicture(unsigned short &width, unsigned short &height, TThreadData thread_data) - { - width = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_SZ_PICT] >> 16); - height = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_SZ_PICT]); - return (void*)thread_data[MENUET_THREAD_DATA_PICTURE]; - } - - void SetPicture(void *picture, unsigned short width, unsigned short height, TThreadData thread_data) - { - thread_data[MENUET_THREAD_DATA_PICTURE] = (void*)picture; - (unsigned int&)thread_data[MENUET_THREAD_DATA_SZ_PICT] = - (width == 0 || height == 0) ? 0 : (((unsigned int)width << 16) | height); - Invalidate(0, thread_data); - } - - int _GetSkinHeader(); - - void GetBorderHeader(unsigned short &border_size, unsigned short &header_size, TThreadData thread_data) - { - int win_type = ((unsigned int)thread_data[MENUET_THREAD_DATA_FLAG] & 0x40000000) ? - ((TStartData*)thread_data[MENUET_THREAD_DATA_TITLE])->WinData.WindowType : - ((unsigned int)thread_data[MENUET_THREAD_DATA_C_WINDOW] >> 24); - border_size = MENUET_BORDER_SIZE; - header_size = short(((win_type & 15) == 3) ? _GetSkinHeader() : MENUET_HEADER_SIZE); - } - - void GetClientSize(unsigned short &width, unsigned short &height, - int win_width, int win_height, TThreadData thread_data) - { - const int MAX_SIZE = 32767; - unsigned short border_size, header_size; - GetBorderHeader(border_size, header_size, thread_data); - win_width -= 2 * border_size; - win_height -= border_size + header_size; - if (win_width < 0) win_width = 0; - else if (win_width > MAX_SIZE) win_width = MAX_SIZE; - if (win_height < 0) win_height = 0; - else if (win_height > MAX_SIZE) win_height = MAX_SIZE; - width = (unsigned short)win_width; - height = (unsigned short)win_height; - } - - void GetMousePosPicture(short &x, short &y) - { - unsigned short dx, dy; - GetMousePosition(x, y); - GetBorderHeader(dx, dy); - x -= dx; y -= dy; - } -} - -#else // def __MENUET__ - -namespace Menuet -{ - struct TMutex - { - unsigned int mut; - - TMutex(); - ~TMutex(); - }; -#undef MENUET_MUTEX_INIT -#define MENUET_MUTEX_INIT TMutex() - - struct TRecMutex - { - unsigned int mut; - - TRecMutex(); - ~TRecMutex(); - }; -#undef MENUET_REC_MUTEX_INIT -#define MENUET_REC_MUTEX_INIT TRecMutex() -} - -#endif // else: def __MENUET__ - -#endif // ndef __MENUET_H_INCLUDED_ - diff --git a/programs/games/checkers/trunk/include/stdarg.h b/programs/games/checkers/trunk/include/stdarg.h deleted file mode 100644 index 7abd7592eb..0000000000 --- a/programs/games/checkers/trunk/include/stdarg.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __STDARG_H -#define __STDARG_H - -typedef void *va_list; - -#define __size(x) ((sizeof(x)+sizeof(int)-1) & ~(sizeof(int)-1)) - -#define va_start(ap, parmN) ((void)((ap) = (va_list)((char *)(&parmN)+__size(parmN)))) -#define va_arg(ap, type) (*(type *)(((*(char **)&(ap))+=__size(type))-(__size(type)))) -#define va_end(ap) ((void)0) - - -#endif /* __STDARG_H */ diff --git a/programs/games/checkers/trunk/include/write_macro.inc b/programs/games/checkers/trunk/include/write_macro.inc deleted file mode 100644 index 3015f65896..0000000000 --- a/programs/games/checkers/trunk/include/write_macro.inc +++ /dev/null @@ -1,49 +0,0 @@ -macro writestr [arg] -{ - common - - local straddr - local strend - pushad - push straddr - push strend - jmp @Menuet@DebugPutString$qpxc - straddr db arg,0 - strend: - pop eax - popad -} - -macro writeint arg -{ - push dword arg - xchg eax,[esp] - pushad - push eax - call @DebugPutNumber$qi - pop eax - popad - pop eax -} - -macro write [arg] -{ - forward - - if arg eq - else if arg eq endline - writestr 10 - else if arg eqtype '' - writestr arg - else - writeint arg - end if -} - -macro writeln [arg] -{ - common - - write arg,endline -} - diff --git a/programs/games/checkers/trunk/me_make.inc b/programs/games/checkers/trunk/me_make.inc deleted file mode 100644 index 173c2eb927..0000000000 --- a/programs/games/checkers/trunk/me_make.inc +++ /dev/null @@ -1,10 +0,0 @@ -;//NAME// checkers.cpp -;//COMPILER// bcc32 -S -v- -R- -6 -a4 -O2 -Og -Oi -Ov -OS -k- -D__MENUET__ -Iinclude -;//UTIL_PATH// . - -STACKSIZE equ 102400 -HEAPSIZE equ 102400 - -include "include\me_start.inc" -include "include\me_func.inc" -include "include\me_heap.inc" diff --git a/programs/games/checkers/trunk/mt-draw.h b/programs/games/checkers/trunk/mt-draw.h deleted file mode 100644 index 3adce2b73a..0000000000 --- a/programs/games/checkers/trunk/mt-draw.h +++ /dev/null @@ -1,79 +0,0 @@ -unsigned long cur_color; -class TKlbrGraphDraw : public TGraphDraw -{ -public: - virtual int SetColor(unsigned long c) {cur_color=c;return 1;} - virtual int DrawLine(int x0, int y0, int x1, int y1); - virtual int DrawText(int x0, int y0, char* text); - virtual int IsDraw(void) {return 1;} - virtual int DrawClear(); - virtual unsigned long CreateColor(unsigned short red, - unsigned short green, unsigned short blue); - virtual void GetSize(int &w, int &h); - virtual int GetTextH(const char *s) {return 10;} - virtual int GetTextW(const char *s) {return 6 * strlen(s);} - virtual void Quit(int q = 1) {CloseWindow();} -}; -int TKlbrGraphDraw::DrawLine(int x0, int y0, int x1, int y1) -{ - asm mov ebx, x0 - asm shl ebx, 16 - asm add ebx, x1 - asm mov ecx, y0 - asm shl ecx, 16 - asm add ecx, y1 - asm mov edx, [cur_color] - asm push 38 - asm pop eax - asm int 40h - return 1; -} -int TKlbrGraphDraw::DrawText(int x0, int y0, char* text) -{ - asm mov ebx, x0 - asm shl ebx, 16 - asm add ebx, y0 - asm mov ecx, [cur_color] - asm or ecx, 0xC0000000 - asm mov edx, text - asm mov edi, 0xFFFFFF - asm push 4 - asm pop eax - asm int 40h - return 1; -} -int TKlbrGraphDraw::DrawClear(void) -{ - int w,h; - GetSize(w,h); - asm mov ebx, w - asm mov ecx, h - asm mov edx, 0xFFFFFF - asm push 13 - asm pop eax - asm int 40h - return 1; -} -unsigned long TKlbrGraphDraw::CreateColor(unsigned short red, - unsigned short green, unsigned short blue) -{ - return (unsigned long)(blue >> 8) + ((unsigned long)(green >> 8) << 8) + - ((unsigned long)(red >> 8) << 16); -} -void TKlbrGraphDraw::GetSize(int &w, int &h) -{ - int width, height; - asm sub esp, 1024 - asm mov ebx, esp - asm or ecx, -1 - asm push 9 - asm pop eax - asm int 40h - asm mov eax, [esp+62] - asm mov width, eax - asm mov eax, [esp+66] - asm mov height, eax - asm add esp, 1024 - w = width; - h = height; -} diff --git a/programs/games/checkers/trunk/player.h b/programs/games/checkers/trunk/player.h index 8362d45b23..d1a673c48b 100644 --- a/programs/games/checkers/trunk/player.h +++ b/programs/games/checkers/trunk/player.h @@ -3,11 +3,9 @@ #include "position.h" #include "sysproc.h" -#ifndef __MENUET__ #include #include #include -#endif template class TBaseCompPlayer : public TChPlayer diff --git a/programs/games/checkers/trunk/position.h b/programs/games/checkers/trunk/position.h index 30599a773f..127051c091 100644 --- a/programs/games/checkers/trunk/position.h +++ b/programs/games/checkers/trunk/position.h @@ -1,12 +1,10 @@ #ifndef _HEADER_POSITION_H #define _HEADER_POSITION_H -#ifndef __MENUET__ #include #include #include #include -#endif #define NELEM(a) (sizeof(a) / sizeof((a)[0])) @@ -226,7 +224,7 @@ char *Position::WriteMv(const unsigned char mv[], char WP[], int how) int x, y; NumToPole(mv[i], x, y); WP[j++] = char('a' + NW_CELL - 1 - x); - int r = sprintf(WP + j, "%d", 1 + y); + int r = itoa(WP + j, 1 + y); if (r > 0) j += r; if (i != nmv) WP[j++] = '-'; } @@ -333,7 +331,7 @@ int Position::WriteMvEx(const unsigned char mv[], char WP[], int how) const if (WP) { WP[L++] = char('a' + NW_CELL - 1 - x0); - int r = sprintf(WP + L, "%d", 1 + y0); + int r = itoa(WP + L, 1 + y0); if (r > 0) L += r; } else diff --git a/programs/games/checkers/trunk/qsort.c b/programs/games/checkers/trunk/qsort.c deleted file mode 100644 index 6edc89a627..0000000000 --- a/programs/games/checkers/trunk/qsort.c +++ /dev/null @@ -1,331 +0,0 @@ -static void shortsort(char *lo, char *hi, unsigned width, - int (*comp)(const void *, const void *)); - -static void swap(char *p, char *q, unsigned width); - -/* this parameter defines the cutoff between using quick sort and - insertion sort for arrays; arrays with lengths shorter or equal to the - below value use insertion sort */ - -#define CUTOFF 8 /* testing shows that this is good value */ - -#define STKSIZ (8*sizeof(void*) - 2) - -/*** -*qsort(base, num, wid, comp) - quicksort function for sorting arrays -* -*Purpose: -* quicksort the array of elements -* side effects: sorts in place -* maximum array size is number of elements times size of elements, -* but is limited by the virtual address space of the processor -* -*Entry: -* char *base = pointer to base of array -* unsigned num = number of elements in the array -* unsigned width = width in bytes of each array element -* int (*comp)() = pointer to function returning analog of strcmp for -* strings, but supplied by user for comparing the array elements. -* it accepts 2 pointers to elements. -* Returns neg if 1<2, 0 if 1=2, pos if 1>2. -* -*Exit: -* returns void -* -*******************************************************************************/ - -void qsort ( - void *base, - unsigned num, - unsigned width, - int (*comp)(const void *, const void *) - ) -{ - /* Note: the number of stack entries required is no more than - 1 + log2(num), so 30 is sufficient for any array */ - char *lo, *hi; /* ends of sub-array currently sorting */ - char *mid; /* points to middle of subarray */ - char *loguy, *higuy; /* traveling pointers for partition step */ - unsigned size; /* size of the sub-array */ - char *lostk[STKSIZ], *histk[STKSIZ]; - int stkptr; /* stack for saving sub-array to be processed */ - - if (num < 2) - return; /* nothing to do */ - - stkptr = 0; /* initialize stack */ - - lo = (char *)base; - hi = (char *)base + width * (num-1); /* initialize limits */ - - /* this entry point is for pseudo-recursion calling: setting - lo and hi and jumping to here is like recursion, but stkptr is - preserved, locals aren't, so we preserve stuff on the stack */ -recurse: - - size = (hi - lo) / width + 1; /* number of el's to sort */ - - /* below a certain size, it is faster to use a O(n^2) sorting method */ - if (size <= CUTOFF) { - shortsort(lo, hi, width, comp); - } - else { - /* First we pick a partitioning element. The efficiency of the - algorithm demands that we find one that is approximately the median - of the values, but also that we select one fast. We choose the - median of the first, middle, and last elements, to avoid bad - performance in the face of already sorted data, or data that is made - up of multiple sorted runs appended together. Testing shows that a - median-of-three algorithm provides better performance than simply - picking the middle element for the latter case. */ - - mid = lo + (size / 2) * width; /* find middle element */ - - /* Sort the first, middle, last elements into order */ - if (comp(lo, mid) > 0) { - swap(lo, mid, width); - } - if (comp(lo, hi) > 0) { - swap(lo, hi, width); - } - if (comp(mid, hi) > 0) { - swap(mid, hi, width); - } - - /* We now wish to partition the array into three pieces, one consisting - of elements <= partition element, one of elements equal to the - partition element, and one of elements > than it. This is done - below; comments indicate conditions established at every step. */ - - loguy = lo; - higuy = hi; - - /* Note that higuy decreases and loguy increases on every iteration, - so loop must terminate. */ - for (;;) { - /* lo <= loguy < hi, lo < higuy <= hi, - A[i] <= A[mid] for lo <= i <= loguy, - A[i] > A[mid] for higuy <= i < hi, - A[hi] >= A[mid] */ - - /* The doubled loop is to avoid calling comp(mid,mid), since some - existing comparison funcs don't work when passed the same - value for both pointers. */ - - if (mid > loguy) { - do { - loguy += width; - } while (loguy < mid && comp(loguy, mid) <= 0); - } - if (mid <= loguy) { - do { - loguy += width; - } while (loguy <= hi && comp(loguy, mid) <= 0); - } - - /* lo < loguy <= hi+1, A[i] <= A[mid] for lo <= i < loguy, - either loguy > hi or A[loguy] > A[mid] */ - - do { - higuy -= width; - } while (higuy > mid && comp(higuy, mid) > 0); - - /* lo <= higuy < hi, A[i] > A[mid] for higuy < i < hi, - either higuy == lo or A[higuy] <= A[mid] */ - - if (higuy < loguy) - break; - - /* if loguy > hi or higuy == lo, then we would have exited, so - A[loguy] > A[mid], A[higuy] <= A[mid], - loguy <= hi, higuy > lo */ - - swap(loguy, higuy, width); - - /* If the partition element was moved, follow it. Only need - to check for mid == higuy, since before the swap, - A[loguy] > A[mid] implies loguy != mid. */ - - if (mid == higuy) - mid = loguy; - - /* A[loguy] <= A[mid], A[higuy] > A[mid]; so condition at top - of loop is re-established */ - } - - /* A[i] <= A[mid] for lo <= i < loguy, - A[i] > A[mid] for higuy < i < hi, - A[hi] >= A[mid] - higuy < loguy - implying: - higuy == loguy-1 - or higuy == hi - 1, loguy == hi + 1, A[hi] == A[mid] */ - - /* Find adjacent elements equal to the partition element. The - doubled loop is to avoid calling comp(mid,mid), since some - existing comparison funcs don't work when passed the same value - for both pointers. */ - - higuy += width; - if (mid < higuy) { - do { - higuy -= width; - } while (higuy > mid && comp(higuy, mid) == 0); - } - if (mid >= higuy) { - do { - higuy -= width; - } while (higuy > lo && comp(higuy, mid) == 0); - } - - /* OK, now we have the following: - higuy < loguy - lo <= higuy <= hi - A[i] <= A[mid] for lo <= i <= higuy - A[i] == A[mid] for higuy < i < loguy - A[i] > A[mid] for loguy <= i < hi - A[hi] >= A[mid] */ - - /* We've finished the partition, now we want to sort the subarrays - [lo, higuy] and [loguy, hi]. - We do the smaller one first to minimize stack usage. - We only sort arrays of length 2 or more.*/ - - if ( higuy - lo >= hi - loguy ) { - if (lo < higuy) { - lostk[stkptr] = lo; - histk[stkptr] = higuy; - ++stkptr; - } /* save big recursion for later */ - - if (loguy < hi) { - lo = loguy; - goto recurse; /* do small recursion */ - } - } - else { - if (loguy < hi) { - lostk[stkptr] = loguy; - histk[stkptr] = hi; - ++stkptr; /* save big recursion for later */ - } - - if (lo < higuy) { - hi = higuy; - goto recurse; /* do small recursion */ - } - } - } - - /* We have sorted the array, except for any pending sorts on the stack. - Check if there are any, and do them. */ - - --stkptr; - if (stkptr >= 0) { - lo = lostk[stkptr]; - hi = histk[stkptr]; - goto recurse; /* pop subarray from stack */ - } - else - return; /* all subarrays done */ -} - - -/*** -*shortsort(hi, lo, width, comp) - insertion sort for sorting short arrays -*shortsort_s(hi, lo, width, comp, context) - insertion sort for sorting short arrays -* -*Purpose: -* sorts the sub-array of elements between lo and hi (inclusive) -* side effects: sorts in place -* assumes that lo < hi -* -*Entry: -* char *lo = pointer to low element to sort -* char *hi = pointer to high element to sort -* unsigned width = width in bytes of each array element -* int (*comp)() = pointer to function returning analog of strcmp for -* strings, but supplied by user for comparing the array elements. -* it accepts 2 pointers to elements, together with a pointer to a context -* (if present). Returns neg if 1<2, 0 if 1=2, pos if 1>2. -* void *context - pointer to the context in which the function is -* called. This context is passed to the comparison function. -* -*Exit: -* returns void -* -*Exceptions: -* -*******************************************************************************/ - -static void shortsort ( - char *lo, - char *hi, - unsigned width, - int (*comp)(const void *, const void *) - ) -{ - char *p, *max; - - /* Note: in assertions below, i and j are alway inside original bound of - array to sort. */ - - while (hi > lo) { - /* A[i] <= A[j] for i <= j, j > hi */ - max = lo; - for (p = lo+width; p <= hi; p += width) { - /* A[i] <= A[max] for lo <= i < p */ - if (comp(p, max) > 0) { - max = p; - } - /* A[i] <= A[max] for lo <= i <= p */ - } - - /* A[i] <= A[max] for lo <= i <= hi */ - - swap(max, hi, width); - - /* A[i] <= A[hi] for i <= hi, so A[i] <= A[j] for i <= j, j >= hi */ - - hi -= width; - - /* A[i] <= A[j] for i <= j, j > hi, loop top condition established */ - } - /* A[i] <= A[j] for i <= j, j > lo, which implies A[i] <= A[j] for i < j, - so array is sorted */ -} - -/*** -*swap(a, b, width) - swap two elements -* -*Purpose: -* swaps the two array elements of size width -* -*Entry: -* char *a, *b = pointer to two elements to swap -* unsigned width = width in bytes of each array element -* -*Exit: -* returns void -* -*Exceptions: -* -*******************************************************************************/ - -static void swap ( - char *a, - char *b, - unsigned width - ) -{ - char tmp; - - if ( a != b ) - /* Do the swap one character at a time to avoid potential alignment - problems. */ - while ( width-- ) { - tmp = *a; - *a++ = *b; - *b++ = tmp; - } -} diff --git a/programs/games/checkers/trunk/sysproc.h b/programs/games/checkers/trunk/sysproc.h index caba2c2d71..d3e76e0c1d 100644 --- a/programs/games/checkers/trunk/sysproc.h +++ b/programs/games/checkers/trunk/sysproc.h @@ -1,19 +1,23 @@ #ifndef _HEADER_SYSTEM_PROCESS_H #define _HEADER_SYSTEM_PROCESS_H -#ifndef __MENUET__ #include #include -#endif -#if defined __GNUC__ +#if defined _KOLIBRI +# define DIR_SEPARATOR ('/') + inline long GetProcessId() {return 0;} + inline long DuplicateProcess() {return -1;} + inline int random(int m) {return ((unsigned long)rand()) % m;} + inline void randomize() {srand(__menuet__getsystemclock());} +#elif defined __GNUC__ # include # define DIR_SEPARATOR ('/') inline long GetProcessId() {return (long)getpid();} inline long DuplicateProcess() {return (long)fork();} inline int random(int m) {return ((unsigned long)rand()) % m;} inline void randomize() {srand(time(0));} -#elif defined __TURBOC__ && !defined __MENUET__ +#elif defined __TURBOC__ # include # define DIR_SEPARATOR ('\\') inline long GetProcessId() {return (long)getpid();} diff --git a/programs/games/checkers/trunk/t2fasm.exe b/programs/games/checkers/trunk/t2fasm.exe deleted file mode 100644 index cad968b59c..0000000000 Binary files a/programs/games/checkers/trunk/t2fasm.exe and /dev/null differ diff --git a/programs/games/checkers/trunk/win-draw.h b/programs/games/checkers/trunk/win-draw.h index af9cd06688..d9e353494f 100644 --- a/programs/games/checkers/trunk/win-draw.h +++ b/programs/games/checkers/trunk/win-draw.h @@ -19,8 +19,9 @@ #define main OwlMain -class TWinGraphDraw : public TGraphDraw +class TWinGraphDraw : public TBaseGraphDraw { + typedef TBaseGraphDraw TGraphDraw; public: TWinGraphDraw(const char *s = 0); ~TWinGraphDraw(); diff --git a/programs/use_gcc.lua b/programs/use_gcc.lua index 7c304b0336..c1b02f489a 100644 --- a/programs/use_gcc.lua +++ b/programs/use_gcc.lua @@ -1,4 +1,6 @@ -CFLAGS = "-Os -fno-ident -fomit-frame-pointer -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -mpreferred-stack-boundary=2 -fno-exceptions -fno-asynchronous-unwind-tables -ffast-math -mno-ms-bitfields" +CFLAGS = "-Os -fno-ident -fomit-frame-pointer -fno-stack-check -fno-stack-protector -mno-stack-arg-probe -mpreferred-stack-boundary=2 -fno-exceptions -fno-asynchronous-unwind-tables -ffast-math -mno-ms-bitfields -march=pentium-mmx" +CFLAGS_c = "" -- extra flags for *.c +CFLAGS_cpp = " -fno-rtti" -- extra flags for *.cpp LDFLAGS = "-nostdlib -n --file-alignment=16 --section-alignment=16" INCLUDES = "" LIBS = "" @@ -8,7 +10,7 @@ OBJS = {} function compile_gcc(input, output) if not output then output = '%B.o' end tup.append_table(OBJS, - tup.foreach_rule(input, "kos32-gcc -c " .. CFLAGS .. " " .. INCLUDES .. " -o %o %f", output) + tup.foreach_rule(input, "kos32-gcc -c " .. CFLAGS .. "$(CFLAGS_%e) " .. INCLUDES .. " -o %o %f", output) ) end