U8 Profiler_Init( const U16 aGameBuildHi, const U16 aGameBuildLo) { sProfilerHeader lHeader; gProfilerIndex = 0; gProfilerOldHBL = *(U32*)0x68; gProfilerOnFlag = 0; gpProfilerBuffer = (U32*)Memory_Calloc( dPROFILER_BUFFER_LIMIT ); gProfilerHandle = File_Create( "PROFILE.PRO" ); if( (!gpProfilerBuffer) || (gProfilerHandle <0) ) { return( 0 ); } lHeader.ID = dPROFILER_ID; lHeader.Version = 0; lHeader.EntryCount = 0; lHeader.pText = (U32)__text; lHeader.GameBuildHi = aGameBuildHi; lHeader.GameBuildLo = aGameBuildLo; strcpy( lHeader.DateText, __DATE__ ); strcpy( lHeader.TimeText, __TIME__ ); File_Write( gProfilerHandle, sizeof(sProfilerHeader), &lHeader ); Vbl_AddCall( Profiler_VBL ); return( 1 ); }
void ScreenGrab_Update( void ) { char lFileName[ 264 ]; sDegasHeader lHeader; sFileHandle lHandle; if( IKBD_GetKeyStatus( gScreenGrabKeyIndex ) ) { if( !gScreenGrabKeyState ) { sprintf( lFileName, "%sGRAB%04x.PI1", gScreenGrabDirectory, gScreenGrabIndex ); lHandle = File_Create( lFileName ); if( lHandle > 0 ) { lHeader.Mode = 0; Video_GetPalST( &lHeader.Palette[ 0 ] ); File_Write( lHandle, sizeof(sDegasHeader), &lHeader ); File_Write( lHandle, 32000, Video_GetpPhysic() ); File_Close( lHandle ); gScreenGrabIndex++; } gScreenGrabKeyState = 1; } } else { gScreenGrabKeyState = 0; } }
VOID Mij_SetButton( MOTIONINJOY_BUTTON_MAP* ButtonMapping ) { HANDLE driverHandle; IO_STATUS_BLOCK isb; MOTIONINJOY_APP_OPTION options; File_Create( &driverHandle, L"\\\\.\\MIJFilter", SYNCHRONIZE | FILE_READ_DATA | FILE_WRITE_DATA, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL ); Memory_Clear(&options, sizeof(MOTIONINJOY_APP_OPTION)); options.CommonOption.mode = Keyboard; options.CommonOption.LED = 129; options.CommonOption.AutoOff_timeout = 0x80 | /*PushSharedMemory->ControllerTimeout*/10; //minutes options.CommonOption.Deadzone_LStick_X = 10; options.CommonOption.Deadzone_LStick_Y = 10; options.InputOption.Duration = 100; options.InputOption.Interval = 400; Memory_Copy(&options.InputOption.Maping, ButtonMapping, sizeof(MOTIONINJOY_BUTTON_MAP)); NtDeviceIoControlFile(driverHandle, NULL, NULL, NULL, &isb, IOCTL_MIJ_SET_CONFIG_OPTIONS, &options, 256, NULL, 0); File_Close(driverHandle); }
void SetMacro( unsigned __int8 Count, MOTIONINJOY_MACRO* Macro ) { HANDLE driverHandle; BYTE b; MOTIONINJOY_BUTTON_MACRO macro; IO_STATUS_BLOCK isb; File_Create( &driverHandle, L"\\\\.\\MIJFilter", SYNCHRONIZE | FILE_READ_DATA | FILE_WRITE_DATA, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL ); Memory_Clear(¯o, sizeof(MOTIONINJOY_BUTTON_MACRO)); macro.DeviceIndex = 0; macro.EIndex = 0; b = 0; while ((int)b < ((Count > 6) ? 6 : Count)) { int i; macro.MacroIndex = b; macro.Duration = Macro->Duration; Memory_Copy(macro.Command, Macro->Command, sizeof(macro.Command)); // Fill button intervals for (i = 0; i < 6; i++) { macro.ButtonIndex = i; Memory_Copy(macro.Button, Macro->ButtonIntervals[i], sizeof(macro.Button)); NtDeviceIoControlFile( driverHandle, NULL, NULL, NULL, &isb, IOCTL_MIJ_SET_CONFIG_MACRO, ¯o, sizeof(MOTIONINJOY_BUTTON_MACRO), NULL, 0 ); } b++; Macro++; } File_Close(driverHandle); }
Object File_Clone(Object _self) { Object _toReturn = File_Create(); File entity2 = _toReturn->entity; File entity = _self->entity; entity2->_descriptor = entity->_descriptor; return _toReturn; }
static void file_selection_ok(GtkWidget *w, GtkFileSelection *gfs) { file_selection_t *fsp = (file_selection_t *)gfs; GtkFileSelection *fs = (GtkFileSelection *)fsp->fs; char *p; UNUSED(w); p = (char *)gtk_file_selection_get_filename(fs); if (p) { struct stat st; if (stat(p, &st) == 0) { if (!S_ISDIR(st.st_mode)) { switch (fsp->type) { case 1: // open MIMPI tone map gtk_entry_set_text(GTK_ENTRY(fsp->arg), p); strncpy(ConfigProp.ToneMapFile, p, sizeof(ConfigProp.ToneMapFile)); break; case 2: // open SASI HDD { sasi_hdd_t *sasi_hdd = (sasi_hdd_t *)fsp->arg; strncpy(ConfigProp.HDImage[sasi_hdd->idx], p, sizeof(ConfigProp.HDImage[0])); gtk_entry_set_text(GTK_ENTRY(sasi_hdd->entry), p); } break; } } } else if (errno == ENOENT) { switch (fsp->type) { case 3: // create SASI HDD image { sasi_hdd_t *sasi_hdd = (sasi_hdd_t *)fsp->arg; char buf[0x1000]; FILEH *fh; int i; fh = File_Create(p, FTYPE_NONE); if (fh == INVALID_HANDLE_VALUE) break; bzero(buf, sizeof(buf)); for (i = 0; i < 0x2793 /* 40Mb/0x1000 */; ++i) File_Write(fh, buf, 0x1000); File_Close(fh); strncpy(ConfigProp.HDImage[sasi_hdd->idx], p, sizeof(ConfigProp.HDImage[0])); gtk_entry_set_text(GTK_ENTRY(sasi_hdd->entry), p); } break; } } } gtk_widget_destroy(GTK_WIDGET(fs)); }
VOID Mij_SetProfile( MOTIONINJOY_APP_OPTION* Configuration ) { HANDLE driverHandle; IO_STATUS_BLOCK isb; BOOLEAN setTestMacro = FALSE; if (setTestMacro) { MOTIONINJOY_MACRO macro; Memory_Clear(¯o, sizeof(MOTIONINJOY_MACRO)); macro.Duration = 800; //800 milli-seconds Memory_Copy(macro.Command, SomeMacro, sizeof(macro.Command)); macro.ButtonIntervals[0][10] = 0x01; //0ms macro.ButtonIntervals[1][10] = 0x02; //100ms macro.ButtonIntervals[2][10] = 0x04; //200ms macro.ButtonIntervals[3][10] = 0x08; //300ms macro.ButtonIntervals[4][10] = 0x10; //400ms macro.ButtonIntervals[5][10] = 0x20; //500ms SetMacro(1, ¯o); } File_Create( &driverHandle, L"\\\\.\\MIJFilter", SYNCHRONIZE | FILE_READ_DATA | FILE_WRITE_DATA, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL ); if (setTestMacro) Configuration->InputOption.Maping.Triangle = Macro1; //set triangle button to macro NtDeviceIoControlFile(driverHandle, NULL, NULL, NULL, &isb, IOCTL_MIJ_SET_CONFIG_OPTIONS, Configuration, 256, NULL, 0); File_Close(driverHandle); }
NTSTATUS Directory_Enum( WCHAR* Directory, WCHAR* SearchPattern, SL_ENUM_DIRECTORY Callback ) { NTSTATUS status; IO_STATUS_BLOCK isb; BOOLEAN firstTime = TRUE; VOID *directoryHandle, *buffer; UINT32 bufferSize = 0x400; UINT32 i; UNICODE_STRING pattern; status = File_Create( &directoryHandle, Directory, FILE_LIST_DIRECTORY | SYNCHRONIZE, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL ); if (!NT_SUCCESS(status)) return status; buffer = Memory_Allocate(bufferSize); UnicodeString_Init(&pattern, SearchPattern); while (TRUE) { // Query the directory, doubling the buffer each time NtQueryDirectoryFile fails. while (TRUE) { status = NtQueryDirectoryFile( directoryHandle, NULL, NULL, NULL, &isb, buffer, bufferSize, FileDirectoryInformation, FALSE, &pattern, firstTime ); // Our ISB is on the stack, so we have to wait for the operation to complete // before continuing. if (status == STATUS_PENDING) { status = NtWaitForSingleObject(directoryHandle, FALSE, NULL); if (NT_SUCCESS(status)) status = isb.Status; } if (status == STATUS_BUFFER_OVERFLOW || status == STATUS_INFO_LENGTH_MISMATCH) { Memory_Free(buffer); bufferSize *= 2; buffer = Memory_Allocate(bufferSize); } else { break; } } // If we don't have any entries to read, exit. if (status == STATUS_NO_MORE_FILES) { status = STATUS_SUCCESS; break; } if (!NT_SUCCESS(status)) break; // Read the batch and execute the callback function for each file. i = 0; while (TRUE) { FILE_DIRECTORY_INFORMATION *information; information = (FILE_DIRECTORY_INFORMATION *)(((UINT_B)(buffer)) + i); if (Callback) Callback(Directory, information); if (information->NextEntryOffset != 0) i += information->NextEntryOffset; else break; } firstTime = FALSE; } Memory_Free(buffer); NtClose(directoryHandle); return status; }
/** * Intro menu. */ static void GameLoop_GameIntroAnimationMenu(void) { static const uint16 mainMenuStrings[][6] = { {STR_PLAY_A_GAME, STR_REPLAY_INTRODUCTION, STR_EXIT_GAME, STR_NULL, STR_NULL, STR_NULL}, /* Neither HOF nor save. */ {STR_PLAY_A_GAME, STR_REPLAY_INTRODUCTION, STR_LOAD_GAME, STR_EXIT_GAME, STR_NULL, STR_NULL}, /* Has a save game. */ {STR_PLAY_A_GAME, STR_REPLAY_INTRODUCTION, STR_EXIT_GAME, STR_HALL_OF_FAME, STR_NULL, STR_NULL}, /* Has a HOF. */ {STR_PLAY_A_GAME, STR_REPLAY_INTRODUCTION, STR_LOAD_GAME, STR_EXIT_GAME, STR_HALL_OF_FAME, STR_NULL} /* Has a HOF and a save game. */ }; bool loadGame = false; static bool drawMenu = true; static uint16 stringID = STR_REPLAY_INTRODUCTION; uint16 maxWidth; static bool hasSave = false; static bool hasFame = false; static const char *strings[6]; static uint16 index = 0xFFFF; if (index == 0xFFFF) { hasSave = File_Exists("_save000.dat"); hasFame = File_Exists("SAVEFAME.DAT"); index = (hasFame ? 2 : 0) + (hasSave ? 1 : 0); } if (hasSave || File_Exists("ONETIME.DAT")) g_canSkipIntro = true; switch (stringID) { case STR_REPLAY_INTRODUCTION: Music_Play(0); free(g_readBuffer); g_readBufferSize = (g_enableVoices == 0) ? 12000 : 28000; g_readBuffer = calloc(1, g_readBufferSize); GUI_Mouse_Hide_Safe(); Driver_Music_FadeOut(); GameLoop_GameIntroAnimation(); Sound_Output_Feedback(0xFFFE); File_ReadBlockFile("IBM.PAL", g_palette_998A, 256 * 3); memmove(g_palette1, g_palette_998A, 256 * 3); if (!g_canSkipIntro) { File_Create("ONETIME.DAT"); g_canSkipIntro = true; } Music_Play(0); free(g_readBuffer); g_readBufferSize = (g_enableVoices == 0) ? 12000 : 20000; g_readBuffer = calloc(1, g_readBufferSize); GUI_Mouse_Show_Safe(); Music_Play(28); drawMenu = true; break; case STR_EXIT_GAME: g_running = false; return; case STR_HALL_OF_FAME: GUI_HallOfFame_Show(0xFFFF); GFX_SetPalette(g_palette2); hasFame = File_Exists("SAVEFAME.DAT"); drawMenu = true; break; case STR_LOAD_GAME: GUI_Mouse_Hide_Safe(); GUI_SetPaletteAnimated(g_palette2, 30); GUI_ClearScreen(SCREEN_0); GUI_Mouse_Show_Safe(); GFX_SetPalette(g_palette1); if (GUI_Widget_SaveLoad_Click(false)) { loadGame = true; if (g_gameMode == GM_RESTART) break; g_gameMode = GM_NORMAL; } else { GFX_SetPalette(g_palette2); drawMenu = true; } break; default: break; } if (drawMenu) { uint16 i; g_widgetProperties[21].height = 0; for (i = 0; i < 6; i++) { strings[i] = NULL; if (mainMenuStrings[index][i] == 0) { if (g_widgetProperties[21].height == 0) g_widgetProperties[21].height = i; continue; } strings[i] = String_Get_ByIndex(mainMenuStrings[index][i]); } GUI_DrawText_Wrapper(NULL, 0, 0, 0, 0, 0x22); maxWidth = 0; for (i = 0; i < g_widgetProperties[21].height; i++) { if (Font_GetStringWidth(strings[i]) <= maxWidth) continue; maxWidth = Font_GetStringWidth(strings[i]); } maxWidth += 7; g_widgetProperties[21].width = maxWidth >> 3; g_widgetProperties[13].width = g_widgetProperties[21].width + 2; g_widgetProperties[13].xBase = 19 - (maxWidth >> 4); g_widgetProperties[13].yBase = 160 - ((g_widgetProperties[21].height * g_fontCurrent->height) >> 1); g_widgetProperties[13].height = (g_widgetProperties[21].height * g_fontCurrent->height) + 11; Sprites_LoadImage(String_GenerateFilename("TITLE"), SCREEN_1, NULL); GUI_Mouse_Hide_Safe(); GUI_ClearScreen(SCREEN_0); GUI_Screen_Copy(0, 0, 0, 0, SCREEN_WIDTH / 8, SCREEN_HEIGHT, SCREEN_1, SCREEN_0); GUI_SetPaletteAnimated(g_palette1, 30); GUI_DrawText_Wrapper("V1.07", 319, 192, 133, 0, 0x231, 0x39); GUI_DrawText_Wrapper(NULL, 0, 0, 0, 0, 0x22); Widget_SetCurrentWidget(13); GUI_Widget_DrawBorder(13, 2, 1); GameLoop_DrawMenu(strings); GUI_Mouse_Show_Safe(); drawMenu = false; } if (loadGame) return; stringID = GameLoop_HandleEvents(strings); if (stringID != 0xFFFF) stringID = mainMenuStrings[index][stringID]; GUI_PaletteAnimate(); if (stringID == STR_PLAY_A_GAME) g_gameMode = GM_PICKHOUSE; }
void Mouse_SetMouseMode(uint8 mouseMode, const char *filename) { switch (mouseMode) { default: break; case INPUT_MOUSE_MODE_NORMAL: g_mouseMode = mouseMode; if (g_mouseFileID != 0xFF) { Input_Flags_ClearBits(INPUT_FLAG_KEY_RELEASE); File_Close(g_mouseFileID); } g_mouseFileID = 0xFF; g_var_701B = true; break; case INPUT_MOUSE_MODE_RECORD: if (g_mouseFileID != 0xFF) break; File_Delete(filename); File_Create(filename); Tools_RandomLCG_Seed(0x21433412); g_mouseFileID = File_Open(filename, 3); g_mouseMode = mouseMode; Input_Flags_SetBits(INPUT_FLAG_KEY_RELEASE); Input_HandleInput(0x2D); break; case INPUT_MOUSE_MODE_PLAY: if (g_mouseFileID == 0xFF) { g_mouseFileID = File_Open(filename, 1); Tools_RandomLCG_Seed(0x21433412); } g_var_701B = true; File_Read(g_mouseFileID, &g_var_7013, 2); if (File_Read(g_mouseFileID, &g_var_7015, 2) != 2) break;; if ((g_var_7013 >= 0x41 && g_var_7013 <= 0x44) || g_var_7013 == 0x2D) { File_Read(g_mouseFileID, &g_var_7017, 2); if (File_Read(g_mouseFileID, &g_var_7019, 2) == 2) { g_mouseX = g_var_7017; g_mouseY = g_var_7019; g_prevButtonState = 0; GUI_Mouse_Hide_Safe(); GUI_Mouse_Show_Safe(); g_var_701B = false; break; } g_var_701B = true; break; } g_var_701B = false; break; } g_timerInput = 0; g_mouseMode = mouseMode; }