/* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. */ #pragma off (unreferenced) static char rcsid[] = "$Id: joydefsw.c 1.27 1996/10/16 16:13:50 samir Exp $"; #pragma on (unreferenced) #include "desw.h" #include #include #include #include #include #include "mono.h" #include "key.h" #include "joy.h" #include "timer.h" #include "error.h" #include "inferno.h" #include "game.h" #include "object.h" #include "player.h" #include "controls.h" #include "joydefs.h" #include "victor.h" #include "render.h" #include "palette.h" #include "newmenu.h" #include "args.h" #include "gamefont.h" #include "text.h" #include "kconfig.h" #include "digi.h" #include "playsave.h" #include "screens.h" #include "config.h" // Extra control stuff // #include "cyberimp.h" //##int joydefs_calibrate_flag = 0; int joydefs_max_joysticks = 0; int joydefs_num_joysticks = 0; int Joystick_calibrating = 0; extern int WriteConfigFile(); extern void kconfig_set_fcs_button(int btn, int button); WinJoystickDesc WinJoyDesc; // Windows 95: // Calibration and Menus because of automatic joystick detection // and 6 axis' (XYZ-RUV) extern ubyte default_kconfig_settings[][MAX_CONTROLS]; void win95_autodetect_joystick() { JOYCAPS jc; // Set default windows joystick settings. // AUTODETECT !!! joyGetDevCaps(JOYSTICKID1, &jc, sizeof(jc)); // Do buttons first default_kconfig_settings[CONTROL_WINJOYSTICK][1] = 0xff; default_kconfig_settings[CONTROL_WINJOYSTICK][4] = 0xff; default_kconfig_settings[CONTROL_WINJOYSTICK][26] = 0xff; default_kconfig_settings[CONTROL_WINJOYSTICK][0] = 0x0; if (jc.wMaxButtons > 1) default_kconfig_settings[CONTROL_WINJOYSTICK][1] = 0x1; if (jc.wMaxButtons > 2) default_kconfig_settings[CONTROL_WINJOYSTICK][4] = 0x2; if (jc.wMaxButtons > 3) default_kconfig_settings[CONTROL_WINJOYSTICK][26] = 0x3; // Do Hat! default_kconfig_settings[CONTROL_WINJOYSTICK][6] = 0xff; default_kconfig_settings[CONTROL_WINJOYSTICK][7] = 0xff; default_kconfig_settings[CONTROL_WINJOYSTICK][8] = 0xff; default_kconfig_settings[CONTROL_WINJOYSTICK][9] = 0xff; if (jc.wCaps & JOYCAPS_HASPOV) { default_kconfig_settings[CONTROL_WINJOYSTICK][6] = 0x10; default_kconfig_settings[CONTROL_WINJOYSTICK][7] = 0x12; default_kconfig_settings[CONTROL_WINJOYSTICK][8] = 0x13; default_kconfig_settings[CONTROL_WINJOYSTICK][9] = 0x11; } // Do Z-Axis (Throttle) // Do rudder? (R-AXIS) } int win95_controls_init() { //int i = 0; int spjoy = 0; if (FindArg("-SpecialDevice")) spjoy = 1; joydefs_max_joysticks = joy_init(0,spjoy); if (!joy95_init_stick(1, spjoy)) return 0; //@@ for (i = 2; i <= joydefs_max_joysticks; i++) //@@ if (!joy95_init_stick(i,0)) { //@@ joydefs_max_joysticks = i-1; //@@ break; //@@ } joy_handler_win(0,0,0,0); win95_autodetect_joystick(); return 1; } void joy_delay() { stop_time(); WinDelay(250); joy_flush(); start_time(); } void dump_axis_vals(int *t_vals) { mprintf_at((0, 2, 32, "X:%6d\n", t_vals[0])); mprintf_at((0, 3, 32, "Y:%6d\n", t_vals[1])); mprintf_at((0, 4, 32, "Z:%6d\n", t_vals[2])); mprintf_at((0, 5, 32, "R:%6d\n", t_vals[4])); mprintf_at((0, 6, 32, "U:%6d\n", t_vals[5])); mprintf_at((0, 7, 32, "V:%6d\n", t_vals[6])); } // MAIN CALIBRATION ROUTINES // ---------------------------------------------------------------------------- void joydefs_calibrate(void) { DWORD dwval; BOOL flag; STARTUPINFO si; PROCESS_INFORMATION pi; char name[80]; char oldname[80]; int j; int old_mode= -1; Joystick_calibrating = 1; if (GRMODEINFO(modex)) { old_mode = Screen_mode; set_screen_mode(SCREEN_MENU); } palette_save(); apply_modified_palette(); reset_palette_add(); gr_palette_load(gr_palette); // Call calibration Applet joy95_get_name(JOYSTICKID1, oldname, 79); logentry("Closing joystick for control panel init.\n"); joy_close(); // Close down joystick polling memset(&si, 0, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW; flag = CreateProcess( NULL, "rundll32.exe shell32.dll,Control_RunDLL joy.cpl", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); if (!flag) { nm_messagebox( NULL, 1, TXT_OK, "UNABLE TO INITIATE\nJOYSTICK CONTROL PANEL"); } else { dwval = WaitForInputIdle(pi.hProcess, INFINITE); mprintf((1, "JOY.CPL initiated?\n")); WinDelayIdle(); // Clear out messages. while (WaitForSingleObject(pi.hProcess, 0) != WAIT_OBJECT_0) { if (multi_menu_poll()==-1) { TerminateProcess(pi.hProcess,0); Sleep(100); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); break; } } mprintf((1, "JOY.CPL process finished?\n")); ShowWindow(_hAppWnd, SW_MAXIMIZE); WinDelayIdle(); SetForegroundWindow(_hAppWnd); WinDelayIdle(); _RedrawScreen = FALSE; } if (win95_controls_init()) // Reinitializing joystick polling. logentry("Reinitialized joystick with new settings.\n"); else logentry("Failed to reinitialize joystick.\n"); // Set kconfig settings to updated vals. joy95_get_name(JOYSTICKID1, name, 79); if (Config_control_type == CONTROL_WINJOYSTICK) { if (strcmp(name, oldname)) { for (j=0; j -1); // No calibration under new system where control panel does this. // switch (Config_control_type) { // case CONTROL_WINJOYSTICK: // if ( joydefs_calibrate_flag ) // joydefs_calibrate(); // break; // } } // Extended joystick menu // ---------------------------------------------------------------------------- void joydefsw_win_joyselect(char *title) { FILE *fp; char filename[64]; char *token; ubyte axis; if (newmenu_filelist("Windows 95 Controls", "*.joy", filename)) { fp = fopen(filename, "rb"); if (!fp) { nm_messagebox(TXT_ERROR, 1, TXT_OK, "Unable to find control file"); strcpy(title, "Windows 95 Custom"); return; } // Get Axis support. if (!fread(&axis, sizeof(ubyte), 1, fp)) { nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal or corrupt control file"); strcpy(title, "Windows 95 Custom"); fclose(fp); return; } if (fread(kconfig_settings[CONTROL_WINJOYSTICK], sizeof(kconfig_settings[CONTROL_WINJOYSTICK]), 1, fp) != 1) { nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal or corrupt control file"); strcpy(title, "Windows 95 Custom"); fclose(fp); return; } fclose(fp); token = strtok(filename, "."); strcpy(title, token); } else strcpy(title, "Windows 95 Custom"); }