diff --git a/src/bomberclone.h b/src/bomberclone.h index 25f443f..26606c8 100644 --- a/src/bomberclone.h +++ b/src/bomberclone.h @@ -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 */ #ifndef _BOMBERCLONE_H_ @@ -11,6 +11,8 @@ #include #include #include +#include +#include #ifdef _WIN32 #include #else @@ -26,7 +28,7 @@ #include "../config.h" #include "gfx.h" #include "network.h" - +#include "sysfunc.h" struct __playerilness { @@ -207,11 +209,6 @@ extern int ReadConfig(); extern int WriteConfig(); 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 extern void d_in_pl_detail (char *head); extern void d_playerdetail (char *head); diff --git a/src/sysfunc.c b/src/sysfunc.c index 697d652..48fc632 100644 --- a/src/sysfunc.c +++ b/src/sysfunc.c @@ -1,55 +1,93 @@ -/* +/* $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.. like d_delay -*/ - +*/ + #include "bomberclone.h" - - -void s_delay (int ms) { - fd_set selectset; - struct timeval tval; - - FD_ZERO (&selectset); - tval.tv_sec = 0; - tval.tv_usec = ms; - select (1, &selectset, NULL, NULL, &tval); -} - -int s_random (int maxnr) { +#include "sysfunc.h" + void +s_delay (int ms) +{ + fd_set selectset; + struct timeval tval; + + FD_ZERO (&selectset); + tval.tv_sec = 0; + tval.tv_usec = ms; + select (1, &selectset, NULL, NULL, &tval); +} int +s_random (int maxnr) +{ #ifdef _WIN32 - return ((rand () * maxnr)/RAND_MAX ); -#else - int i; - i = (((rand () >> 16) * (maxnr+1))/(RAND_MAX >> 16)); - if (i >= maxnr) - i = 0; - return i; -#endif -}; - -static char homedir[255]; - -char *s_gethomedir () { - - char *hd; - if ((hd = getenv ("HOME")) == NULL) { - /* Homedir konnte nicht ermittelt werden. */ - homedir[0] = 0; - d_printf ("Variable HOME could not be found\n"); - } - else { - strncpy (homedir, hd, 253); - homedir [strlen(homedir)+1] = 0; + return ((rand () * maxnr) / RAND_MAX); +#else + int i; + + i = (((rand () >> 16) * (maxnr + 1)) / (RAND_MAX >> 16)); + if (i >= maxnr) + i = 0; + return i; +#endif +}; + static char homedir[255]; + char * +s_gethomedir () +{ + char *hd; + + if ((hd = getenv ("HOME")) == NULL) { + /* Homedir konnte nicht ermittelt werden. */ + homedir[0] = 0; + d_printf ("Variable HOME could not be found\n"); + } + else { + strncpy (homedir, hd, 253); + homedir[strlen (homedir) + 1] = 0; #ifdef _WIN32 - if (homedir [strlen(homedir)-1] != '\\') - homedir [strlen(homedir)] = '\\'; -#else - if (homedir [strlen(homedir)-1] != '/') - homedir [strlen(homedir)] = '/'; -#endif - } - - return homedir; -}; - + if (homedir[strlen (homedir) - 1] != '\\') + homedir[strlen (homedir)] = '\\'; +#else + if (homedir[strlen (homedir) - 1] != '/') + homedir[strlen (homedir)] = '/'; +#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; + + 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]; +}; + diff --git a/src/sysfunc.h b/src/sysfunc.h new file mode 100644 index 0000000..dbb2546 --- /dev/null +++ b/src/sysfunc.h @@ -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 \ No newline at end of file