/* $Id: sysfunc.c,v 1.3 2003/05/06 20:48:54 stpohle Exp $ sysfunc.c - this file hold some routines for the system functions.. like d_delay */ #include "bomberclone.h" #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; #ifdef _WIN32 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); stat (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]; };