home *** CD-ROM | disk | FTP | other *** search
- // implementation of generic tools
-
- #include "cube.h"
-
- //////////////////////////// pool ///////////////////////////
-
- ///////////////////////// misc tools ///////////////////////
-
- char *path(char *s)
- {
- for(char *t = s; (t = strpbrk(t, "/\\")); *t++ = PATHDIV);
- for(char *prevdir = NULL, *curdir = s;;)
- {
- prevdir = curdir[0]==PATHDIV ? curdir+1 : curdir;
- curdir = strchr(prevdir, PATHDIV);
- if(!curdir) break;
- if(prevdir+1==curdir && prevdir[0]=='.')
- {
- memmove(prevdir, curdir+1, strlen(curdir+1)+1);
- curdir = prevdir;
- }
- else if(curdir[1]=='.' && curdir[2]=='.' && curdir[3]==PATHDIV)
- {
- if(prevdir+2==curdir && prevdir[0]=='.' && prevdir[1]=='.') continue;
- memmove(prevdir, curdir+4, strlen(curdir+4)+1);
- curdir = prevdir;
- }
- }
- return s;
- }
-
- char *parentdir(char *directory)
- {
- char *p = strrchr(directory, '/');
- if(!p) p = directory;
- size_t len = p-directory+1;
- char *parent = new char[len];
- s_strncpy(parent, directory, len);
- return parent;
- }
-
- char *loadfile(char *fn, int *size)
- {
- FILE *f = fopen(fn, "rb");
- if(!f) return NULL;
- fseek(f, 0, SEEK_END);
- int len = ftell(f);
- if(len<=0) { fclose(f); return NULL; };
- fseek(f, 0, SEEK_SET);
- char *buf = new char[len+1];
- if(!buf) { fclose(f); return NULL; };
- buf[len] = 0;
- size_t rlen = fread(buf, 1, len, f);
- fclose(f);
- if(size_t(len)!=rlen)
- {
- delete[] buf;
- return NULL;
- }
- if(size!=NULL) *size = len;
- return buf;
- }
-
- bool cmpb(void *b, int n, enet_uint32 c)
- {
- ENetBuffer buf;
- buf.data = b;
- buf.dataLength = n;
- return enet_crc32(&buf, 1)==c;
- }
-
- bool cmpf(char *fn, enet_uint32 c)
- {
- int n = 0;
- char *b = loadfile(fn, &n);
- bool r = cmpb(b, n, c);
- delete[] b;
- return r;
- }
-
- void endianswap(void *memory, int stride, int length) // little endian as storage format
- {
- #if SDL_BYTEORDER == SDL_BIG_ENDIAN
- loop(w, length) loop(i, stride/2)
- {
- uchar *p = (uchar *)memory+w*stride;
- uchar t = p[i];
- p[i] = p[stride-i-1];
- p[stride-i-1] = t;
- }
- #endif
- }
-