Directory Reading

origin
stpohle 23 years ago
parent 2a1f84f4d1
commit 05882d4c42

@ -1,4 +1,4 @@
/* $Id: bomberclone.h,v 1.9 2003/05/05 20:40:04 stpohle Exp $ */ /* $Id: bomberclone.h,v 1.10 2003/05/06 12:09:22 stpohle Exp $ */
/* bomberclone.h */ /* bomberclone.h */
#ifndef _BOMBERCLONE_H_ #ifndef _BOMBERCLONE_H_
@ -11,6 +11,8 @@
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
#include <ctype.h> #include <ctype.h>
#include <dirent.h>
#include <sys/stat.h>
#ifdef _WIN32 #ifdef _WIN32
#include <winsock.h> #include <winsock.h>
#else #else
@ -26,7 +28,7 @@
#include "../config.h" #include "../config.h"
#include "gfx.h" #include "gfx.h"
#include "network.h" #include "network.h"
#include "sysfunc.h"
struct __playerilness { struct __playerilness {
@ -207,11 +209,6 @@ extern int ReadConfig();
extern int WriteConfig(); extern int WriteConfig();
extern void ReadPrgArgs (int argc, char **argv); extern void ReadPrgArgs (int argc, char **argv);
// sysfunc.c
extern void s_delay (int ms);
extern int s_random (int maxnr);
extern char *s_gethomedir ();
// debug.c // debug.c
extern void d_in_pl_detail (char *head); extern void d_in_pl_detail (char *head);
extern void d_playerdetail (char *head); extern void d_playerdetail (char *head);

@ -1,12 +1,13 @@
/* /* $Id: sysfunc.c,v 1.2 2003/05/06 12:09:22 stpohle Exp $
sysfunc.c - this file hold some routines for the system functions.. sysfunc.c - this file hold some routines for the system functions..
like d_delay like d_delay
*/ */
#include "bomberclone.h" #include "bomberclone.h"
#include "sysfunc.h"
void
void s_delay (int ms) { s_delay (int ms)
{
fd_set selectset; fd_set selectset;
struct timeval tval; struct timeval tval;
@ -14,42 +15,79 @@ void s_delay (int ms) {
tval.tv_sec = 0; tval.tv_sec = 0;
tval.tv_usec = ms; tval.tv_usec = ms;
select (1, &selectset, NULL, NULL, &tval); select (1, &selectset, NULL, NULL, &tval);
} } int
s_random (int maxnr)
int s_random (int maxnr) { {
#ifdef _WIN32 #ifdef _WIN32
return ((rand () * maxnr)/RAND_MAX ); return ((rand () * maxnr) / RAND_MAX);
#else #else
int i; int i;
i = (((rand () >> 16) * (maxnr+1))/(RAND_MAX >> 16));
if (i >= maxnr) i = (((rand () >> 16) * (maxnr + 1)) / (RAND_MAX >> 16));
i = 0; if (i >= maxnr)
return i; i = 0;
return i;
#endif #endif
}; };
static char homedir[255];
char *
s_gethomedir ()
{
char *hd;
static char homedir[255]; if ((hd = getenv ("HOME")) == NULL) {
/* Homedir konnte nicht ermittelt werden. */
char *s_gethomedir () { homedir[0] = 0;
d_printf ("Variable HOME could not be found\n");
char *hd; }
if ((hd = getenv ("HOME")) == NULL) { else {
/* Homedir konnte nicht ermittelt werden. */ strncpy (homedir, hd, 253);
homedir[0] = 0; homedir[strlen (homedir) + 1] = 0;
d_printf ("Variable HOME could not be found\n");
}
else {
strncpy (homedir, hd, 253);
homedir [strlen(homedir)+1] = 0;
#ifdef _WIN32 #ifdef _WIN32
if (homedir [strlen(homedir)-1] != '\\') if (homedir[strlen (homedir) - 1] != '\\')
homedir [strlen(homedir)] = '\\'; homedir[strlen (homedir)] = '\\';
#else #else
if (homedir [strlen(homedir)-1] != '/') if (homedir[strlen (homedir) - 1] != '/')
homedir [strlen(homedir)] = '/'; homedir[strlen (homedir)] = '/';
#endif #endif
} }
return homedir;
};
static _direntry direntrys[MAX_DIRENTRYS];
_direntry * s_getdir (char *path)
{
DIR *dp;
struct dirent *ep;
struct stat fstat;
int entrynr = 0;
char filename[LEN_PATHFILENAME];
dp = opendir (path);
if (dp != NULL) {
while ((ep = readdir (dp)) != NULL && entrynr < MAX_DIRENTRYS) {
direntrys[entrynr].next = NULL;
strncpy (direntrys[entrynr].name, ep->d_name, LEN_FILENAME - 1);
if (strlen (ep->d_name) >= LEN_FILENAME)
direntrys[entrynr].name[LEN_FILENAME - 1] = 0;
return homedir; sprintf (filename, "%s/%s\0", path, direntrys[entrynr].name);
lstat (filename, &fstat);
if (S_ISREG (fstat.st_mode)) {
direntrys[entrynr].flags = DF_file;
direntrys[entrynr].next = &direntrys[entrynr + 1];
entrynr++;
}
else if (S_ISDIR (fstat.st_mode)) {
direntrys[entrynr].flags = DF_dir;
direntrys[entrynr].next = &direntrys[entrynr + 1];
entrynr++;
}
}
}
closedir (dp);
if (entrynr == 0)
return NULL;
direntrys[entrynr - 1].next = NULL;
return &direntrys[0];
}; };

@ -0,0 +1,26 @@
/* $Id: sysfunc.h,v 1.1 2003/05/06 12:09:22 stpohle Exp $ */
/* include some system near functions */
#ifndef _SYSFUNC_H_
#define _SYSFUNC_H_
#define MAX_DIRENTRYS 1024
enum _dirflags {
DF_dir = 1,
DF_file = 2
};
struct __direntry {
unsigned char flags;
char name[LEN_FILENAME];
struct __direntry *next;
} typedef _direntry;
extern void s_delay (int ms);
extern int s_random (int maxnr);
extern char *s_gethomedir ();
extern _direntry *s_getdir (char *path);
#endif
Loading…
Cancel
Save