Windows WIP.
This commit is contained in:
parent
c51b91cfe7
commit
e9788e390d
14 changed files with 476 additions and 282 deletions
282
src/main.c
282
src/main.c
|
@ -10,7 +10,7 @@
|
|||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include <getopt.h>
|
||||
///#include <getopt.h>
|
||||
|
||||
#include "fixer.h"
|
||||
|
||||
|
@ -66,10 +66,10 @@ JOYINFOEX JoystickData;
|
|||
JOYCAPS JoystickCaps;
|
||||
|
||||
/* defaults */
|
||||
static int WantFullscreen = 1;
|
||||
static int WantFullscreen = 0;
|
||||
int WantSound = 1;
|
||||
static int WantCDRom = 1;
|
||||
static int WantJoystick = 1;
|
||||
static int WantCDRom = 0;
|
||||
static int WantJoystick = 0;
|
||||
|
||||
/* originally was "/usr/lib/libGL.so.1:/usr/lib/tls/libGL.so.1:/usr/X11R6/lib/libGL.so" */
|
||||
static const char * opengl_library = NULL;
|
||||
|
@ -336,7 +336,7 @@ char *GetVideoModeDescription3()
|
|||
{
|
||||
static char buf[64];
|
||||
|
||||
snprintf(buf, 64, "%dx%d", VideoModeList[CurrentVideoMode].w, VideoModeList[CurrentVideoMode].h);
|
||||
_snprintf(buf, 64, "%dx%d", VideoModeList[CurrentVideoMode].w, VideoModeList[CurrentVideoMode].h);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
@ -1097,187 +1097,23 @@ void FlipBuffers()
|
|||
|
||||
char *AvpCDPath = 0;
|
||||
|
||||
static int try_game_directory(char *dir, char *file)
|
||||
{
|
||||
char tmppath[PATH_MAX];
|
||||
|
||||
strncpy(tmppath, dir, PATH_MAX-32);
|
||||
tmppath[PATH_MAX-32] = 0;
|
||||
strcat(tmppath, file);
|
||||
|
||||
return access(tmppath, R_OK) == 0;
|
||||
}
|
||||
|
||||
static int check_game_directory(char *dir)
|
||||
{
|
||||
if (!dir || !*dir) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!try_game_directory(dir, "/avp_huds")) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!try_game_directory(dir, "/avp_huds/alien.rif")) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!try_game_directory(dir, "/avp_rifs")) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!try_game_directory(dir, "/avp_rifs/temple.rif")) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!try_game_directory(dir, "/fastfile")) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!try_game_directory(dir, "/fastfile/ffinfo.txt")) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void InitGameDirectories(char *argv0)
|
||||
{
|
||||
extern char *SecondTex_Directory;
|
||||
extern char *SecondSoundDir;
|
||||
|
||||
char tmppath[PATH_MAX];
|
||||
char *homedir, *gamedir, *localdir, *tmp;
|
||||
char *path;
|
||||
size_t len, copylen;
|
||||
|
||||
SecondTex_Directory = "graphics/";
|
||||
SecondSoundDir = "sound/";
|
||||
|
||||
homedir = getenv("HOME");
|
||||
if (homedir == NULL)
|
||||
homedir = ".";
|
||||
localdir = (char *)malloc(strlen(homedir)+10);
|
||||
strcpy(localdir, homedir);
|
||||
strcat(localdir, "/");
|
||||
strcat(localdir, ".avp");
|
||||
|
||||
tmp = NULL;
|
||||
|
||||
/*
|
||||
1. $AVP_DATA overrides all
|
||||
2. executable path from argv[0]
|
||||
3. realpath of executable path from argv[0]
|
||||
4. $PATH
|
||||
5. current directory
|
||||
*/
|
||||
|
||||
/* 1. $AVP_DATA */
|
||||
gamedir = getenv("AVP_DATA");
|
||||
|
||||
/* $AVP_DATA overrides all, so no check */
|
||||
|
||||
if (gamedir == NULL) {
|
||||
/* 2. executable path from argv[0] */
|
||||
tmp = strdup(argv0);
|
||||
|
||||
if (tmp == NULL) {
|
||||
/* ... */
|
||||
fprintf(stderr, "InitGameDirectories failure\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
gamedir = strrchr(tmp, '/');
|
||||
|
||||
if (gamedir) {
|
||||
*gamedir = 0;
|
||||
gamedir = tmp;
|
||||
|
||||
if (!check_game_directory(gamedir)) {
|
||||
gamedir = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (gamedir == NULL) {
|
||||
/* 3. realpath of executable path from argv[0] */
|
||||
|
||||
assert(tmp != NULL);
|
||||
|
||||
gamedir = realpath(tmp, tmppath);
|
||||
|
||||
if (!check_game_directory(gamedir)) {
|
||||
gamedir = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (gamedir == NULL) {
|
||||
/* 4. $PATH */
|
||||
path = getenv("PATH");
|
||||
if (path) {
|
||||
while (*path) {
|
||||
len = strcspn(path, ":");
|
||||
|
||||
copylen = min(len, PATH_MAX-1);
|
||||
|
||||
strncpy(tmppath, path, copylen);
|
||||
tmppath[copylen] = 0;
|
||||
|
||||
if (check_game_directory(tmppath)) {
|
||||
gamedir = tmppath;
|
||||
break;
|
||||
}
|
||||
|
||||
path += len;
|
||||
path += strspn(path, ":");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (gamedir == NULL) {
|
||||
/* 5. current directory */
|
||||
gamedir = ".";
|
||||
}
|
||||
|
||||
assert(gamedir != NULL);
|
||||
|
||||
/* last chance sanity check */
|
||||
if (!check_game_directory(gamedir)) {
|
||||
fprintf(stderr, "Unable to find the AvP gamedata.\n");
|
||||
fprintf(stderr, "The directory last examined was: %s\n", gamedir);
|
||||
fprintf(stderr, "Has the game been installed and\n");
|
||||
fprintf(stderr, "are all game files lowercase?\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
SetGameDirectories(localdir, gamedir);
|
||||
|
||||
free(localdir);
|
||||
if (tmp) {
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
/* delete some log files */
|
||||
DeleteGameFile("dx_error.log");
|
||||
}
|
||||
|
||||
static const struct option getopt_long_options[] = {
|
||||
{ "help", 0, NULL, 'h' },
|
||||
{ "version", 0, NULL, 'v' },
|
||||
{ "fullscreen", 0, NULL, 'f' },
|
||||
{ "windowed", 0, NULL, 'w' },
|
||||
{ "nosound", 0, NULL, 's' },
|
||||
{ "nocdrom", 0, NULL, 'c' },
|
||||
{ "nojoy", 0, NULL, 'j' },
|
||||
{ "debug", 0, NULL, 'd' },
|
||||
{ "withgl", 1, NULL, 'g' },
|
||||
/*
|
||||
{ "loadrifs", 1, NULL, 'l' },
|
||||
{ "server", 0, someval, 1 },
|
||||
{ "client", 1, someval, 2 },
|
||||
*/
|
||||
{ NULL, 0, NULL, 0 },
|
||||
};
|
||||
///static const struct option getopt_long_options[] = {
|
||||
///{ "help", 0, NULL, 'h' },
|
||||
///{ "version", 0, NULL, 'v' },
|
||||
///{ "fullscreen", 0, NULL, 'f' },
|
||||
///{ "windowed", 0, NULL, 'w' },
|
||||
///{ "nosound", 0, NULL, 's' },
|
||||
///{ "nocdrom", 0, NULL, 'c' },
|
||||
///{ "nojoy", 0, NULL, 'j' },
|
||||
///{ "debug", 0, NULL, 'd' },
|
||||
///{ "withgl", 1, NULL, 'g' },
|
||||
////*
|
||||
///{ "loadrifs", 1, NULL, 'l' },
|
||||
///{ "server", 0, someval, 1 },
|
||||
///{ "client", 1, someval, 2 },
|
||||
///*/
|
||||
///{ NULL, 0, NULL, 0 },
|
||||
///};
|
||||
|
||||
static const char *usage_string =
|
||||
"Aliens vs Predator Linux - http://www.icculus.org/avp/\n"
|
||||
|
@ -1296,43 +1132,43 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
int c;
|
||||
|
||||
opterr = 0;
|
||||
while ((c = getopt_long(argc, argv, "hvfwscdg:", getopt_long_options, NULL)) != -1) {
|
||||
switch(c) {
|
||||
case 'h':
|
||||
printf("%s", usage_string);
|
||||
exit(EXIT_SUCCESS);
|
||||
case 'v':
|
||||
printf("%s", AvPVersionString);
|
||||
exit(EXIT_SUCCESS);
|
||||
case 'f':
|
||||
WantFullscreen = 1;
|
||||
break;
|
||||
case 'w':
|
||||
WantFullscreen = 0;
|
||||
break;
|
||||
case 's':
|
||||
WantSound = 0;
|
||||
break;
|
||||
case 'c':
|
||||
WantCDRom = 0;
|
||||
break;
|
||||
case 'j':
|
||||
WantJoystick = 0;
|
||||
break;
|
||||
case 'd': {
|
||||
extern int DebuggingCommandsActive;
|
||||
DebuggingCommandsActive = 1;
|
||||
}
|
||||
break;
|
||||
case 'g':
|
||||
opengl_library = optarg;
|
||||
break;
|
||||
default:
|
||||
printf("%s", usage_string);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
/// opterr = 0;
|
||||
/// while ((c = getopt_long(argc, argv, "hvfwscdg:", getopt_long_options, NULL)) != -1) {
|
||||
/// switch(c) {
|
||||
/// case 'h':
|
||||
/// printf("%s", usage_string);
|
||||
/// exit(EXIT_SUCCESS);
|
||||
/// case 'v':
|
||||
/// printf("%s", AvPVersionString);
|
||||
/// exit(EXIT_SUCCESS);
|
||||
/// case 'f':
|
||||
/// WantFullscreen = 1;
|
||||
/// break;
|
||||
/// case 'w':
|
||||
/// WantFullscreen = 0;
|
||||
/// break;
|
||||
/// case 's':
|
||||
/// WantSound = 0;
|
||||
/// break;
|
||||
/// case 'c':
|
||||
/// WantCDRom = 0;
|
||||
/// break;
|
||||
/// case 'j':
|
||||
/// WantJoystick = 0;
|
||||
/// break;
|
||||
/// case 'd': {
|
||||
/// extern int DebuggingCommandsActive;
|
||||
/// DebuggingCommandsActive = 1;
|
||||
/// }
|
||||
/// break;
|
||||
/// case 'g':
|
||||
/// opengl_library = optarg;
|
||||
/// break;
|
||||
/// default:
|
||||
/// printf("%s", usage_string);
|
||||
/// exit(EXIT_FAILURE);
|
||||
/// }
|
||||
/// }
|
||||
|
||||
InitGameDirectories(argv[0]);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue