Ejemplo n.º 1
0
Archivo: main.c Proyecto: Nlcke/gideros
void test1()
{
    gpath_init();

    gpath_setDrivePath(0, "/resource/");
    gpath_setDrivePath(1, "/documents/");
    gpath_setDrivePath(2, "/temporary/");

    gpath_addDrivePrefix(0, "|R|");
    gpath_addDrivePrefix(1, "|D|");
    gpath_addDrivePrefix(2, "|T|");

    gpath_setDefaultDrive(0);

    printf("%d\n", gpath_getPathDrive("/hebe.png"));
    printf("%d\n", gpath_getPathDrive("hebe.png"));
    printf("%d\n", gpath_getPathDrive("|R|hebe.png"));
    printf("%d\n", gpath_getPathDrive("|D|hebe.png"));
    printf("%d\n", gpath_getPathDrive("|T|hebe.png"));

    printf("%s\n", gpath_transform("/hebe.png"));
    printf("%s\n", gpath_transform("hebe.png"));
    printf("%s\n", gpath_transform("|R|hebe.png"));
    printf("%s\n", gpath_transform("|D|hebe.png"));
    printf("%s\n", gpath_transform("|T|hebe.png"));

    gpath_cleanup();
}
Ejemplo n.º 2
0
Archivo: main.c Proyecto: Nlcke/gideros
void test2()
{
    gpath_init();

//    gpath_setDrivePath(0, ".");
    gpath_setDriveFlags(0, GPATH_RW | GPATH_REAL);
    gpath_setDefaultDrive(0);
    gpath_setAbsolutePathFlags(GPATH_RW | GPATH_REAL);
    gpath_addDrivePrefix(0, "|R|");

    printf("%d\n", gpath_getPathDrive("/hebe.png"));
    printf("%d\n", gpath_getPathDrive("hebe.png"));
    printf("%d\n", gpath_getPathDrive("|R|hebe.png"));

    printf("%s\n", gpath_transform("/hebe.png"));
    printf("%s\n", gpath_transform("hebe.png"));
    printf("%s\n", gpath_transform("./hebe.png"));
    printf("%s\n", gpath_transform("|R|./hebe.png"));

    gpath_cleanup();
}
Ejemplo n.º 3
0
static int s_open(const char *pathname, int flags)
{
    int drive = gpath_getPathDrive(pathname);

    if (drive != GPATH_ABSOLUTE)
    {
        if ((gpath_getDriveFlags(drive) & GPATH_RO) == GPATH_RO && (flags & O_ACCMODE) != O_RDONLY)
        {
            errno = EACCES;
            return -1;
        }
    }

    int fd = ::open(gpath_transform(pathname), flags, 0755);

    if (fd < 0)
        return fd;

    FileInfo fi = {0};

    if (drive == 0)
    {
        const char *ext = strrchr(pathname, '.');

        if (ext)
        {
            ext++;
            if (!strcasecmp(ext, "lua"))
            {
                fi.encrypt = 1;
            }
            else if (!strcasecmp(ext, "jpeg") ||
                     !strcasecmp(ext, "jpg") ||
                     !strcasecmp(ext, "png") ||
                     !strcasecmp(ext, "wav"))
            {
                fi.encrypt = 2;
            }
        }
    }

    s_fileInfos[fd] = fi;

    return fd;
}
Ejemplo n.º 4
0
static int s_open(const char *pathname, int flags)
{
    int drive = gpath_getPathDrive(pathname);

    if (drive != GPATH_ABSOLUTE)
    {
        if ((gpath_getDriveFlags(drive) & GPATH_RO) == GPATH_RO && (flags & O_ACCMODE) != O_RDONLY)
        {
            errno = EACCES;
            return -1;
        }
    }

    int fd = -1;

    FileInfo fi = {-1, (size_t)-1, (size_t)-1, 0};

    if ( drive != 0 || s_zipFile.empty() )
        fd=::open(gpath_transform(pathname), flags, 0755);
    else
    {
    	pathname = gpath_normalizeArchivePath(pathname);
    	glog_d("Looking for %s in archive %s",pathname,s_zipFile.c_str());

        std::map<std::string, FileInfo>::iterator iter;
        iter = s_files.find(pathname);

        if (iter == s_files.end())
        {
        	glog_d("%s Not found in archive",pathname);
            errno = ENOENT;
            return -1;
        }

        fd = ::open(s_zipFile.c_str(), flags, 0755);
    	glog_d("%s: fd is %d",pathname,fd);

        ::lseek(fd, iter->second.startOffset, SEEK_SET);

        fi = iter->second;
    }

    if (fd < 0)
        return fd;

    if (drive == 0)
    {
        const char *ext = strrchr(pathname, '.');

        if (ext)
        {
            ext++;
            if (!strcasecmp(ext, "lua"))
            {
                fi.encrypt = 1;
            }
            else if (!strcasecmp(ext, "jpeg") ||
                     !strcasecmp(ext, "jpg") ||
                     !strcasecmp(ext, "png") ||
                     !strcasecmp(ext, "wav"))
            {
                fi.encrypt = 2;
            }
        }
    }

    s_fileInfos[fd] = fi;

    return fd;
}
Ejemplo n.º 5
0
int AudioBinder::Sound_create(lua_State *L)
{
    StackChecker checker(L, "AudioBinder::Sound_create", 1);

    Binder binder(L);

    const char *fileName = luaL_checkstring(L, 1);

    std::vector<char> sig;
    int flags = gpath_getDriveFlags(gpath_getPathDrive(fileName));
    if (flags & GPATH_RO)
    {
        append(sig, fileName, strlen(fileName) + 1);
    }
    else
    {
        if (flags & GPATH_REAL)
        {
            append(sig, fileName, strlen(fileName) + 1);

            struct stat s;
            stat(gpath_transform(fileName), &s);
            append(sig, &s.st_mtime, sizeof(s.st_mtime));
        }
    }

    GGSound *sound = NULL;

    luaL_rawgetptr(L, LUA_REGISTRYINDEX, &keySound);

    if (sig.empty())
    {
        lua_pushnil(L);
    }
    else
    {
        lua_pushlstring(L, &sig[0], sig.size());
        lua_rawget(L, -2);
    }

    if (!lua_isnil(L, -1))
    {
        sound = static_cast<GGSound*>(lua_touserdata(L, -1));
        sound->ref();
    }
    else
    {
        gaudio_Error error;
        sound = new GGSound(L, fileName, &error, sig);

        switch (error)
        {
        case GAUDIO_NO_ERROR:
            break;
        case GAUDIO_CANNOT_OPEN_FILE:
            sound->unref();
            luaL_error(L, "%s: No such file or directory.", fileName);
            break;
        case GAUDIO_UNRECOGNIZED_FORMAT:
            sound->unref();
            luaL_error(L, "%s: Sound format is not recognized.", fileName);
            break;
        case GAUDIO_ERROR_WHILE_READING:
            sound->unref();
            luaL_error(L, "%s: Error while reading.", fileName);
            break;
        case GAUDIO_UNSUPPORTED_FORMAT:
            sound->unref();
            luaL_error(L, "%s: Sound format is not supported.", fileName);
            break;
        case GAUDIO_INTERNAL_ERROR:
            sound->unref();
            luaL_error(L, "%s: Sound internal error.", fileName);
            break;
        }
    }

    lua_pop(L, 2);

    binder.pushInstance("Sound", sound);

    return 1;
}
Ejemplo n.º 6
0
TextureData* TextureManager::createTextureFromFile(const char* filename, const TextureParameters& parameters)
{
    int flags = gpath_getDriveFlags(gpath_getPathDrive(filename));

    std::vector<char> sig;
    if (flags & GPATH_RO)
    {
        append(sig, filename, strlen(filename) + 1);
        append(sig, parameters);
    }
    else
    {
        if (flags & GPATH_REAL)
        {
            struct stat s;
            stat(gpath_transform(filename), &s);

            append(sig, filename, strlen(filename) + 1);
            append(sig, parameters);
            append(sig, &s.st_mtime, sizeof(s.st_mtime));
        }
    }

    int wrap = 0;
    switch (parameters.wrap)
    {
    case eClamp:
        wrap = GTEXTURE_CLAMP;
        break;
    case eRepeat:
        wrap = GTEXTURE_REPEAT;
        break;
    }

    int filter = 0;
    switch (parameters.filter)
    {
    case eNearest:
        filter = GTEXTURE_NEAREST;
        break;
    case eLinear:
        filter = GTEXTURE_LINEAR;
        break;
    }

    int format = 0;
    int type = 0;
    switch (parameters.format)
    {
    case eRGBA8888:
        format = GTEXTURE_RGBA;
        type = GTEXTURE_UNSIGNED_BYTE;
        break;
    case eRGB888:
        format = GTEXTURE_RGB;
        type = GTEXTURE_UNSIGNED_BYTE;
        break;
    case eRGB565:
        format = GTEXTURE_RGB;
        type = GTEXTURE_UNSIGNED_SHORT_5_6_5;
        break;
    case eRGBA4444:
        format = GTEXTURE_RGBA;
        type = GTEXTURE_UNSIGNED_SHORT_4_4_4_4;
        break;
    case eRGBA5551:
        format = GTEXTURE_RGBA;
        type = GTEXTURE_UNSIGNED_SHORT_5_5_5_1;
        break;
    }

    if (!sig.empty())
    {
        g_id gid = gtexture_reuse(format, type, wrap, filter, &sig[0], sig.size());
        if (gid != 0)
        {
            TextureData* internal = (TextureData*)gtexture_getUserData(gid);
            TextureData* data = new TextureData(*internal);
            data->gid = gid;

            return data;
        }
    }

    Dib dib(application_, filename, true, true, parameters.maketransparent, parameters.transparentcolor);

    if (parameters.grayscale)
        dib.convertGrayscale();

#if PREMULTIPLIED_ALPHA
    dib.premultiplyAlpha();
#endif

    g_id gid = 0;
    switch (parameters.format)
    {
    case eRGBA8888:
        gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, dib.data(), &sig[0], sig.size());
        break;
    case eRGB888:
    {
        std::vector<unsigned char> data = dib.to888();
        gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size());
        break;
    }
    case eRGB565:
    {
        std::vector<unsigned short> data = dib.to565();
        gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size());
        break;
    }
    case eRGBA4444:
    {
        std::vector<unsigned short> data = dib.to4444();
        gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size());
        break;
    }
    case eRGBA5551:
    {
        std::vector<unsigned short> data = dib.to5551();
        gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size());
        break;
    }
    }

    TextureData* data = new TextureData;

    data->gid = gid;
    data->parameters = parameters;
    data->width = dib.originalWidth();
    data->height = dib.originalHeight();
    data->exwidth = dib.width();
    data->exheight = dib.height();
    data->baseWidth = dib.baseOriginalWidth();
    data->baseHeight = dib.baseOriginalHeight();

    TextureData* internal = new TextureData(*data);
    gtexture_setUserData(gid, internal);

    return data;
}
Ejemplo n.º 7
0
static int s_open(const char *pathname, int flags)
{
	int drive = gpath_getPathDrive(pathname);
	
    if (s_playerModeEnabled == true || drive != 0)
    {
        int fd = ::open(gpath_transform(pathname), flags, 0755);

        if (fd < 0)
            return fd;

        FileInfo fi = {-1, (size_t)-1, (size_t)-1, 0};
        s_fileInfos[fd] = fi;

        return fd;
    }

	std::string normpathname = pystring::os::path::normpath(gpath_transform(pathname));
	pathname = normpathname.c_str();

    std::map<std::string, FileInfo>::iterator iter;
    iter = s_files.find(pathname);

    if (iter == s_files.end())
    {
        errno = ENOENT;
        return -1;
    }

    if ((flags & O_ACCMODE) != O_RDONLY)
    {
        errno = EACCES;
        return -1;
    }

    int fd = ::open(s_zipFiles[iter->second.zipFile].c_str(), flags, 0755);

    if (fd < 0)
        return fd;

    FileInfo fi = iter->second;

    if (drive == 0)
    {
        const char *ext = strrchr(pathname, '.');

        if (ext)
        {
            ext++;
            if (!strcasecmp(ext, "lua"))
            {
                fi.encrypt = 1;
            }
            else if (!strcasecmp(ext, "jpeg") ||
                     !strcasecmp(ext, "jpg") ||
                     !strcasecmp(ext, "png") ||
                     !strcasecmp(ext, "wav"))
            {
                fi.encrypt = 2;
            }
        }
    }

    ::lseek(fd, iter->second.startOffset, SEEK_SET);

    s_fileInfos[fd] = fi;

    return fd;
}