Key config is saved in user dir.

Melee config is also saved in user dir again.
Added copyFile() function.
Some cleanups.


git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@761 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
meep-eep
2003-02-17 01:26:29 +00:00
parent 19f668b507
commit 2d861025d5
9 changed files with 202 additions and 25 deletions
+3
View File
@@ -1,4 +1,7 @@
Changes towards version 0.2: Changes towards version 0.2:
- Key config is now saved in user dir too.
melee.cfg too again. - SvdB
- Added copyFile() - SvdB
- Pure mode partial screen updates are now more efficient; - Pure mode partial screen updates are now more efficient;
fixed 'crossfades not finished' problem -Mika fixed 'crossfades not finished' problem -Mika
- Graduated colours for crew in shipyard, from Nic - Graduated colours for crew in shipyard, from Nic
+4
View File
@@ -137,6 +137,10 @@ SOURCE=..\sc2code\libs\file\dirs.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\sc2code\libs\file\files.c
# End Source File
# Begin Source File
SOURCE=..\sc2code\libs\file\filintrn.h SOURCE=..\sc2code\libs\file\filintrn.h
# End Source File # End Source File
# Begin Source File # Begin Source File
+18 -1
View File
@@ -33,8 +33,18 @@
# define W_OK 2 # define W_OK 2
# define R_OK 4 # define R_OK 4
# include <direct.h> # include <direct.h>
# define open _open
# define mkdir _mkdir # define mkdir _mkdir
# define read _read
# define rmdir _rmdir # define rmdir _rmdir
# define ssize_t int
# define fstat _fstat
# define S_IRWXU (S_IREAD | S_IWRITE | S_IEXEC)
# define S_IRWXG 0
# define S_IRWXO 0
# define write _write
# define stat _stat
# define unlink _unlink
#else #else
# include <unistd.h> # include <unistd.h>
#endif #endif
@@ -42,15 +52,22 @@
// for BOOLEAN // for BOOLEAN
#include "compiler.h" #include "compiler.h"
// from temp.h
void initTempDir (void); void initTempDir (void);
void unInitTempDir (void); void unInitTempDir (void);
char *tempFilePath (const char *filename); char *tempFilePath (const char *filename);
// from dirs.h
int mkdirhier (const char *path); int mkdirhier (const char *path);
const char *getHomeDir (void); const char *getHomeDir (void);
int createDirectory (const char *dir, int mode); int createDirectory (const char *dir, int mode);
int expandPath (char *dest, size_t len, const char *src); int expandPath (char *dest, size_t len, const char *src);
// from files.h
int copyFile (const char *srcName, const char *newName);
BOOLEAN fileExists (const char *name); BOOLEAN fileExists (const char *name);
int getUserDataDir (char *dir, size_t len);
#endif /* _FILE_H */ #endif /* _FILE_H */
+1 -1
View File
@@ -1 +1 @@
uqm_CFILES="dirs.c temp.c" uqm_CFILES="dirs.c files.c temp.c"
-6
View File
@@ -322,9 +322,3 @@ expandPath (char *dest, size_t len, const char *src)
return 0; return 0;
} }
BOOLEAN
fileExists (const char *name)
{
return access (name, F_OK) == 0;
}
+130
View File
@@ -0,0 +1,130 @@
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
// Contains code handling files
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "port.h"
#include "config.h"
#include "types.h"
#include "filintrn.h"
static int copyError(int srcFd, int dstFd, const char *unlinkPath);
BOOLEAN
fileExists (const char *name)
{
return access (name, F_OK) == 0;
}
/*
* Copy a file with path srcName to a file with name newName.
* If the destination already exists, the operation fails.
* Links are followed.
* Special files (fifos, char devices, block devices, etc) will be
* read as long as there is data available and the destination will be
* a regular file with that data.
* The new file will have the same permissions as the old.
* If an error occurs during copying, an attempt will be made to
* remove the copy.
*/
int
copyFile (const char *srcName, const char *newName)
{
int src, dst;
struct stat sb;
#define BUFSIZE 65536
uint8 buf[BUFSIZE], *bufPtr;
ssize_t numInBuf, numWritten;
src = open (srcName, O_RDONLY);
if (src == -1)
return -1;
if (fstat (src, &sb) == -1)
return copyError (src, -1, NULL);
dst = open (newName, O_WRONLY | O_CREAT | O_EXCL,
sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO));
if (dst == -1)
return copyError (src, -1, NULL);
while (1) {
numInBuf = read (src, buf, BUFSIZE);
if (numInBuf == -1)
{
if (errno == EINTR)
continue;
return copyError (src, dst, newName);
}
if (numInBuf == 0)
break;
bufPtr = buf;
do {
numWritten = write (dst, bufPtr, numInBuf);
if (numWritten == -1)
{
if (errno == EINTR)
continue;
return copyError (src, dst, newName);
}
numInBuf -= numWritten;
bufPtr += numWritten;
} while (numInBuf > 0);
}
close(src);
close(dst);
errno = 0;
return 0;
}
/*
* Closes srcFd if it's not -1.
* Closes dstFd if it's not -1.
* Removes unlinkpath if it's not NULL.
* Always returns -1.
* errno is what was before the call.
*/
static int
copyError(int srcFd, int dstFd, const char *unlinkPath)
{
int savedErrno;
savedErrno = errno;
#ifdef DEBUG
fprintf (stderr, "Error while copying: %s\n", strerror (errno))
#endif
if (srcFd >= 0)
close (srcFd);
if (dstFd >= 0)
close (dstFd);
if (unlinkPath != NULL)
unlink (unlinkPath);
errno = savedErrno;
return -1;
}
+4 -13
View File
@@ -22,19 +22,6 @@
#ifndef MISC_H #ifndef MISC_H
#define MISC_H #define MISC_H
#define Stream FILE
#define MEMTYPE_ANY 1
#define SqrtF16 sqrt
#define Atan2F16 atan2
#define CosF16 cos
#define SinF16 sin
int CD_get_drive(void); // Returns 0
unsigned int CD_get_volsize(void); // Returns 0
void OpenMathFolio(void);
extern void *HMalloc (int size); extern void *HMalloc (int size);
extern void HFree (void *p); extern void HFree (void *p);
extern void *HCalloc (int size); extern void *HCalloc (int size);
@@ -42,4 +29,8 @@ extern void *HRealloc (void *p, int size);
extern int TFB_DEBUG_HALT; extern int TFB_DEBUG_HALT;
// from misc.c:
size_t vstrncpy (char *dest, size_t destLen, ...);
#endif #endif
+9 -2
View File
@@ -17,6 +17,7 @@
*/ */
#include <ctype.h> #include <ctype.h>
#include <assert.h>
#include "starcon.h" #include "starcon.h"
#include "libs/graphics/drawable.h" #include "libs/graphics/drawable.h"
#include "melee.h" #include "melee.h"
@@ -1853,8 +1854,11 @@ Melee (void)
LoadMeleeInfo (&MenuState); LoadMeleeInfo (&MenuState);
{ {
FILE *load_fp; FILE *load_fp;
char configFile[PATH_MAX];
load_fp = res_OpenResFile ("melee.cfg", "rb"); assert (snprintf (configFile, PATH_MAX, "%smelee.cfg",
configDir) != -1);
load_fp = res_OpenResFile (configFile, "rb");
if (load_fp) if (load_fp)
{ {
int status; int status;
@@ -1899,9 +1903,12 @@ Melee (void)
{ {
FILE *save_fp; FILE *save_fp;
BOOLEAN err; BOOLEAN err;
char configFile[PATH_MAX];
err = FALSE; err = FALSE;
save_fp = res_OpenResFile ("melee.cfg", "wb"); assert (snprintf (configFile, PATH_MAX, "%smelee.cfg",
configDir) != -1);
save_fp = res_OpenResFile (configFile, "wb");
if (save_fp) if (save_fp)
{ {
if (PutResFileChar (PlayerControl[0], save_fp) == -1) if (PutResFileChar (PlayerControl[0], save_fp) == -1)
+32 -1
View File
@@ -16,10 +16,15 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include <assert.h>
#include <errno.h>
#include <string.h>
#include "starcon.h" #include "starcon.h"
#include "coderes.h" #include "coderes.h"
#include "libs/threadlib.h" #include "libs/threadlib.h"
#include "libs/graphics/gfx_common.h" #include "libs/graphics/gfx_common.h"
#include "libs/file.h"
#include "options.h"
//Added by Chris //Added by Chris
@@ -265,6 +270,31 @@ LoadKeyConfig (FILE *fp, DWORD length)
return (NULL_HANDLE); return (NULL_HANDLE);
} }
static void
initKeyConfig() {
char userFile[PATH_MAX]; /* System-wide key config */
FILE *fp;
assert (snprintf (userFile, PATH_MAX, "%skeys.cfg", configDir) != -1);
// strlen (configDir) <= PATH_MAX - 13
if (fileExists (userFile)) {
fp = res_OpenResFile (userFile, "rt");
} else {
if (copyFile ("starcon.key", userFile) == -1) {
fprintf(stderr, "Warning: Could not copy default key config "
"to %s: %s.\n", userFile, strerror (errno));
} else
fprintf(stderr, "Copying default key config file to %s.\n",
userFile);
fp = res_OpenResFile ("starcon.key", "rt");
}
LoadKeyConfig (fp, 0);
// second arg is file length, but is unused.
// It should be temporary anyhow.
res_CloseResFile (fp);
}
static void static void
InitPlayerInput (void) InitPlayerInput (void)
{ {
@@ -335,7 +365,8 @@ LoadKernel (int argc, char *argv[])
INIT_INSTANCES (); INIT_INSTANCES ();
InstallResTypeVectors (KEY_CONFIG, LoadKeyConfig, NULL_PTR); InstallResTypeVectors (KEY_CONFIG, LoadKeyConfig, NULL_PTR);
res_GetResource (JOYSTICK_KEYS); // res_GetResource (JOYSTICK_KEYS);
initKeyConfig();
{ {
COLORMAP ColorMapTab; COLORMAP ColorMapTab;