Internal data Fist step : Generate an arbo inside the binary and get data with abstraction of the arboressance od the software
This commit is contained in:
parent
fbb244b398
commit
ac984dac7a
34
Makefile
34
Makefile
@ -49,18 +49,24 @@ DEFAULT_PLATFORM=X11
|
|||||||
# default platform can be overridden
|
# default platform can be overridden
|
||||||
PLATFORM?=$(DEFAULT_PLATFORM)
|
PLATFORM?=$(DEFAULT_PLATFORM)
|
||||||
|
|
||||||
|
DATA_MODE=MEMORY
|
||||||
|
|
||||||
ifeq ($(PLATFORM), X11)
|
ifeq ($(PLATFORM), X11)
|
||||||
CXXFILES += base/guiX11.cpp
|
CXXFILES += base/guiX11.cpp
|
||||||
else ifeq ($(PLATFORM), DoubleBuffer)
|
else ifeq ($(PLATFORM), DoubleBuffer)
|
||||||
CXXFILES += base/guiDoubleBuffer.cpp
|
CXXFILES += base/guiDoubleBuffer.cpp
|
||||||
else ifeq ($(PLATFORM), IPhone)
|
else ifeq ($(PLATFORM), IPhone)
|
||||||
CXXFILES += base/guiIPhone.cpp
|
CXXFILES += base/guiIPhone.cpp
|
||||||
|
DATA_MODE=MEMORY
|
||||||
else ifeq ($(PLATFORM), IPad)
|
else ifeq ($(PLATFORM), IPad)
|
||||||
CXXFILES += base/guiIPad.cpp
|
CXXFILES += base/guiIPad.cpp
|
||||||
|
DATA_MODE=MEMORY
|
||||||
else ifeq ($(PLATFORM), Android)
|
else ifeq ($(PLATFORM), Android)
|
||||||
CXXFILES += base/guiAndroid.cpp
|
CXXFILES += base/guiAndroid.cpp
|
||||||
|
DATA_MODE=MEMORY
|
||||||
else ifeq ($(PLATFORM), AndroidTablet)
|
else ifeq ($(PLATFORM), AndroidTablet)
|
||||||
CXXFILES += base/guiAndroidTablet.cpp
|
CXXFILES += base/guiAndroidTablet.cpp
|
||||||
|
DATA_MODE=MEMORY
|
||||||
else
|
else
|
||||||
$(error you must specify a corect platform : make PLATFORM=$(SUPPORTED_PLATFORM))
|
$(error you must specify a corect platform : make PLATFORM=$(SUPPORTED_PLATFORM))
|
||||||
endif
|
endif
|
||||||
@ -139,6 +145,10 @@ CXXFLAGS+= -D_REENTRANT
|
|||||||
CXXFLAGS+= $(DEFINE)
|
CXXFLAGS+= $(DEFINE)
|
||||||
# remove warning from the convertion char*
|
# remove warning from the convertion char*
|
||||||
CXXFLAGS+= -Wno-write-strings
|
CXXFLAGS+= -Wno-write-strings
|
||||||
|
#set data in memory
|
||||||
|
ifeq ($(DATA_MODE), MEMORY)
|
||||||
|
CXXFLAGS+= -DDATA_INTERNAL_BINARY
|
||||||
|
endif
|
||||||
|
|
||||||
CFLAGS= $(CXXFLAGS) -std=c99
|
CFLAGS= $(CXXFLAGS) -std=c99
|
||||||
|
|
||||||
@ -180,6 +190,12 @@ MAKE_DEPENDENCE=Makefile
|
|||||||
### Files Listes ###
|
### Files Listes ###
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
#data File of the program :
|
||||||
|
ifeq ($(DATA_MODE), MEMORY)
|
||||||
|
CXXFILES += GeneratedData.cpp
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# tiny XML (extern OPEN Sources) :
|
# tiny XML (extern OPEN Sources) :
|
||||||
CXXFILES += tinyXML/tinyxml.cpp \
|
CXXFILES += tinyXML/tinyxml.cpp \
|
||||||
tinyXML/tinyxmlparser.cpp \
|
tinyXML/tinyxmlparser.cpp \
|
||||||
@ -236,10 +252,13 @@ CXXFILES += ewol/themeManager.cpp \
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Ewol Test Software :
|
# Ewol Test Software :
|
||||||
CXXFILES += Main.cpp
|
CXXFILES += Main.cpp
|
||||||
|
|
||||||
|
# get all data file in the specific folder
|
||||||
|
DATA_FOLDER=dataTest
|
||||||
|
DATA_FILE=$(shell find $(DATA_FOLDER)/*)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### Liste of folder where .h can be ###
|
### Liste of folder where .h can be ###
|
||||||
@ -278,6 +297,19 @@ build: .encadrer .versionFile $(OUTPUT_NAME)
|
|||||||
@mkdir -p $(addprefix $(OBJECT_DIRECTORY)/, $(LISTE_MODULES))
|
@mkdir -p $(addprefix $(OBJECT_DIRECTORY)/, $(LISTE_MODULES))
|
||||||
|
|
||||||
|
|
||||||
|
# Tool used to create a binary version of every element png or other needed by the application
|
||||||
|
fileToCpp: tools/fileToCpp.cpp
|
||||||
|
@echo $(F_ROUGE)" (bin) $@"$(F_NORMALE)
|
||||||
|
@$(CXX) $< -o $@
|
||||||
|
@strip -s $@
|
||||||
|
|
||||||
|
# Generate basic user Data
|
||||||
|
$(FILE_DIRECTORY)/GeneratedData.cpp: $(DATA_FILE) $(MAKE_DEPENDENCE) fileToCpp
|
||||||
|
@echo $(F_BLUE)" (.cpp) "$(DATA_FOLDER)" ==> $@"$(F_NORMALE)
|
||||||
|
@#echo ./pngToCpp $@ $(DATA_FILE)
|
||||||
|
@./fileToCpp $@ $(DATA_FILE)
|
||||||
|
|
||||||
|
|
||||||
.versionFile:
|
.versionFile:
|
||||||
@rm -f $(OBJECT_DIRECTORY)/ewol/ewol.o
|
@rm -f $(OBJECT_DIRECTORY)/ewol/ewol.o
|
||||||
|
|
||||||
|
@ -100,12 +100,13 @@ void APP_Init(int argc, char *argv[])
|
|||||||
//fontID = GetFontIdWithFileName("dataTest/TextMonospace.ebt");
|
//fontID = GetFontIdWithFileName("dataTest/TextMonospace.ebt");
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
ewol::SetFontFolder("Font");
|
ewol::SetFontFolder("dataTest/Font");
|
||||||
//ewol::SetDefaultFont("freefont/FreeMono", 14);
|
//ewol::SetDefaultFont("freefont/FreeMono", 14);
|
||||||
ewol::SetDefaultFont("ebtfont/Monospace", 14);
|
ewol::SetDefaultFont("ebtfont/Monospace", 14);
|
||||||
//ewol::theme::LoadDefault("dataTest/exemple.eol");
|
//ewol::theme::LoadDefault("dataTest/exemple.eol");
|
||||||
ewol::theme::LoadDefault("theme/exemple.eol");
|
etk::File fileTmp("dataTest/exemple.eol", etk::FILE_TYPE_DATA);
|
||||||
|
ewol::theme::LoadDefault(fileTmp);
|
||||||
|
/*
|
||||||
etk::File tmpFile("/data/data/com.example.EwolActivity.app/assets/theme/exemple.eol");
|
etk::File tmpFile("/data/data/com.example.EwolActivity.app/assets/theme/exemple.eol");
|
||||||
if (tmpFile.Exist() ) {
|
if (tmpFile.Exist() ) {
|
||||||
EWOL_WARNING("file existed : " << tmpFile);
|
EWOL_WARNING("file existed : " << tmpFile);
|
||||||
@ -138,7 +139,7 @@ void APP_Init(int argc, char *argv[])
|
|||||||
if (tmpFile.Exist() ) {
|
if (tmpFile.Exist() ) {
|
||||||
EWOL_WARNING("file existed : " << tmpFile);
|
EWOL_WARNING("file existed : " << tmpFile);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
myWindowsExample = new Plop();
|
myWindowsExample = new Plop();
|
||||||
|
@ -28,6 +28,12 @@
|
|||||||
#include <etk/File.h>
|
#include <etk/File.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
# include "GeneratedData.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "etk::File"
|
#define __class__ "etk::File"
|
||||||
|
|
||||||
@ -40,33 +46,40 @@ etk::CCout& etk::operator <<(etk::CCout &os, const etk::File &obj)
|
|||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
etk::File::File(etk::String &filename, int32_t LineNumber)
|
etk::File::File(etk::String &filename, etk::FileType_te type, int32_t LineNumber)
|
||||||
{
|
{
|
||||||
m_lineNumberOpen = LineNumber;
|
m_lineNumberOpen = LineNumber;
|
||||||
SetCompleateName(filename);
|
m_PointerFile = NULL;
|
||||||
|
SetCompleateName(filename, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
etk::File::File(const char *filename, int32_t LineNumber)
|
etk::File::File(const char *filename, etk::FileType_te type, int32_t LineNumber)
|
||||||
{
|
{
|
||||||
etk::String tmpString = filename;
|
etk::String tmpString = filename;
|
||||||
m_lineNumberOpen = LineNumber;
|
m_lineNumberOpen = LineNumber;
|
||||||
SetCompleateName(tmpString);
|
m_PointerFile = NULL;
|
||||||
|
SetCompleateName(tmpString, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
etk::File::File(etk::String &filename, etk::String &folder, int32_t lineNumber)
|
etk::File::File(etk::String &filename, etk::String &folder, etk::FileType_te type, int32_t lineNumber)
|
||||||
{
|
{
|
||||||
etk::String tmpString = folder;
|
etk::String tmpString = folder;
|
||||||
tmpString += '/';
|
tmpString += '/';
|
||||||
tmpString += filename;
|
tmpString += filename;
|
||||||
SetCompleateName(tmpString);
|
m_PointerFile = NULL;
|
||||||
|
SetCompleateName(tmpString, type);
|
||||||
m_lineNumberOpen = lineNumber;
|
m_lineNumberOpen = lineNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
etk::File::~File(void)
|
etk::File::~File(void)
|
||||||
{
|
{
|
||||||
// nothing to do ...
|
// nothing to do ...
|
||||||
|
if (NULL != m_PointerFile) {
|
||||||
|
TK_ERROR("Missing close the file : \"" << GetCompleateName() << "\"");
|
||||||
|
fClose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -96,6 +109,15 @@ const etk::File& etk::File::operator= (const etk::File &etkF )
|
|||||||
m_folder = etkF.m_folder;
|
m_folder = etkF.m_folder;
|
||||||
m_shortFilename = etkF.m_shortFilename;
|
m_shortFilename = etkF.m_shortFilename;
|
||||||
m_lineNumberOpen = etkF.m_lineNumberOpen;
|
m_lineNumberOpen = etkF.m_lineNumberOpen;
|
||||||
|
m_type = etkF.m_type;
|
||||||
|
if (NULL != m_PointerFile) {
|
||||||
|
TK_ERROR("Missing close the file : \"" << GetCompleateName() << "\"");
|
||||||
|
fClose();
|
||||||
|
}
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
m_idInternal = etkF.m_idInternal;
|
||||||
|
m_readingOffset = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -136,20 +158,32 @@ bool etk::File::operator!= (const etk::File &etkF) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
etk::String baseFolderMobile = "/data/data/com.example.ewolAbstraction/assets/";
|
etk::String baseFolderData = "./";
|
||||||
|
etk::String baseFolderDataUser = "~/.tmp/userData";
|
||||||
|
etk::String baseFolderCache = "~/.tmp/cache";
|
||||||
// for specific device contraint :
|
// for specific device contraint :
|
||||||
void etk::SetBaseFolder(const char * folder)
|
void etk::SetBaseFolderData(const char * folder)
|
||||||
{
|
{
|
||||||
//baseFolderMobile = folder;
|
baseFolderData = folder;
|
||||||
|
}
|
||||||
|
void etk::SetBaseFolderDataUser(const char * folder)
|
||||||
|
{
|
||||||
|
baseFolderDataUser = folder;
|
||||||
|
}
|
||||||
|
void etk::SetBaseFolderCache(const char * folder)
|
||||||
|
{
|
||||||
|
baseFolderCache = folder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void etk::File::SetCompleateName(etk::String &newFilename, etk::FileType_te type)
|
||||||
void etk::File::SetCompleateName(etk::String &newFilename)
|
|
||||||
{
|
{
|
||||||
char buf[MAX_FILE_NAME];
|
char buf[MAX_FILE_NAME];
|
||||||
memset(buf, 0, MAX_FILE_NAME);
|
memset(buf, 0, MAX_FILE_NAME);
|
||||||
char * ok;
|
char * ok;
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
m_idInternal = -1;
|
||||||
|
#endif
|
||||||
// Reset ALL DATA :
|
// Reset ALL DATA :
|
||||||
m_folder = "";
|
m_folder = "";
|
||||||
m_shortFilename = "";
|
m_shortFilename = "";
|
||||||
@ -162,50 +196,119 @@ void etk::File::SetCompleateName(etk::String &newFilename)
|
|||||||
destFilename = newFilename;
|
destFilename = newFilename;
|
||||||
}
|
}
|
||||||
TK_VERBOSE("2 : Get file Name : " << destFilename );
|
TK_VERBOSE("2 : Get file Name : " << destFilename );
|
||||||
if ('/' != *destFilename.c_str()) {
|
if ('/' == *destFilename.c_str()) {
|
||||||
// Get the command came from the running of the program :
|
m_type = etk::FILE_TYPE_DIRECT;
|
||||||
char cCurrentPath[FILENAME_MAX];
|
if (type != etk::FILE_TYPE_DIRECT) {
|
||||||
#ifdef __PLATFORM__Android
|
TK_WARNING("Incompatible type with a file=\"" << newFilename << "\" ==> force it in direct mode ...");
|
||||||
strcpy(cCurrentPath, baseFolderMobile.c_str() );
|
}
|
||||||
#else
|
} else {
|
||||||
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
|
if (type == etk::FILE_TYPE_DIRECT) {
|
||||||
return;
|
TK_WARNING("Incompatible type with a file=\"" << newFilename << "\" ==> force it in FILE_TYPE_DATA mode ...");
|
||||||
}
|
m_type = etk::FILE_TYPE_DATA;
|
||||||
#endif
|
} else {
|
||||||
cCurrentPath[FILENAME_MAX - 1] = '\0';
|
m_type = type;
|
||||||
etk::String tmpFilename = destFilename;
|
}
|
||||||
destFilename = cCurrentPath;
|
}
|
||||||
destFilename += '/';
|
bool needUnpack = false;
|
||||||
destFilename += tmpFilename;
|
#if ETK_DEBUG_LEVEL > 3
|
||||||
}
|
char *mode = NULL;
|
||||||
TK_VERBOSE("3 : Get file Name : " << destFilename );
|
#endif
|
||||||
|
switch (m_type)
|
||||||
// Get the real Path of the current File
|
{
|
||||||
ok = realpath(destFilename.c_str(), buf);
|
case etk::FILE_TYPE_DATA:
|
||||||
if (!ok) {
|
{
|
||||||
int32_t lastPos = destFilename.FindBack('/');
|
#if ETK_DEBUG_LEVEL > 3
|
||||||
if (-1 != lastPos) {
|
mode = "FILE_TYPE_DATA";
|
||||||
// Get the FileName
|
#endif
|
||||||
etk::String tmpFilename = destFilename.Extract(lastPos+1);
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
destFilename.Remove(lastPos, destFilename.Size() - lastPos);
|
for(int32_t iii=0; iii<internalDataFilesSize; iii++) {
|
||||||
TK_VERBOSE("try to find :\"" << destFilename << "\" / \"" << tmpFilename << "\" ");
|
if (destFilename == internalDataFiles[iii].filename) {
|
||||||
ok = realpath(destFilename.c_str(), buf);
|
m_idInternal = iii;
|
||||||
if (!ok) {
|
break;
|
||||||
TK_VERBOSE("Can not find real Path name of \"" << destFilename << "\"");
|
}
|
||||||
m_shortFilename = tmpFilename;
|
}
|
||||||
m_folder = destFilename;
|
if (-1 == m_idInternal) {
|
||||||
} else {
|
TK_ERROR("File Does not existed ... in memory : \"" << destFilename << "\"");
|
||||||
// ALL is OK ...
|
}
|
||||||
m_shortFilename = tmpFilename;
|
#else
|
||||||
m_folder = destFilename;
|
etk::String tmpFilename = destFilename;
|
||||||
}
|
destFilename = baseFolderData;
|
||||||
} else {
|
destFilename += '/';
|
||||||
TK_WARNING("file : \"" << destFilename << "\" ==> No data???");
|
destFilename += tmpFilename;
|
||||||
// Basic ERROR ...
|
#endif
|
||||||
m_shortFilename = destFilename;
|
}
|
||||||
|
break;
|
||||||
|
case etk::FILE_TYPE_USER_DATA:
|
||||||
|
{
|
||||||
|
#if ETK_DEBUG_LEVEL > 3
|
||||||
|
mode = "FILE_TYPE_USER_DATA";
|
||||||
|
#endif
|
||||||
|
etk::String tmpFilename = destFilename;
|
||||||
|
destFilename = baseFolderDataUser;
|
||||||
|
destFilename += '/';
|
||||||
|
destFilename += tmpFilename;
|
||||||
|
}
|
||||||
|
needUnpack = true;
|
||||||
|
break;
|
||||||
|
case etk::FILE_TYPE_CACHE:
|
||||||
|
{
|
||||||
|
#if ETK_DEBUG_LEVEL > 3
|
||||||
|
mode = "FILE_TYPE_CACHE";
|
||||||
|
#endif
|
||||||
|
etk::String tmpFilename = destFilename;
|
||||||
|
destFilename = baseFolderCache;
|
||||||
|
destFilename += '/';
|
||||||
|
destFilename += tmpFilename;
|
||||||
|
}
|
||||||
|
needUnpack = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// nothing to do ...
|
||||||
|
#if ETK_DEBUG_LEVEL > 3
|
||||||
|
mode = "FILE_TYPE_DIRECT";
|
||||||
|
#endif
|
||||||
|
needUnpack = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
TK_VERBOSE("3 : Get file Name : " << destFilename );
|
||||||
|
if (true == needUnpack) {
|
||||||
|
// Get the real Path of the current File
|
||||||
|
ok = realpath(destFilename.c_str(), buf);
|
||||||
|
if (!ok) {
|
||||||
|
int32_t lastPos = destFilename.FindBack('/');
|
||||||
|
if (-1 != lastPos) {
|
||||||
|
// Get the FileName
|
||||||
|
etk::String tmpFilename = destFilename.Extract(lastPos+1);
|
||||||
|
destFilename.Remove(lastPos, destFilename.Size() - lastPos);
|
||||||
|
TK_VERBOSE("try to find :\"" << destFilename << "\" / \"" << tmpFilename << "\" ");
|
||||||
|
ok = realpath(destFilename.c_str(), buf);
|
||||||
|
if (!ok) {
|
||||||
|
TK_VERBOSE("Can not find real Path name of \"" << destFilename << "\"");
|
||||||
|
m_shortFilename = tmpFilename;
|
||||||
|
m_folder = destFilename;
|
||||||
|
} else {
|
||||||
|
// ALL is OK ...
|
||||||
|
m_shortFilename = tmpFilename;
|
||||||
|
m_folder = destFilename;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
TK_WARNING("file : \"" << destFilename << "\" ==> No data???");
|
||||||
|
// Basic ERROR ...
|
||||||
|
m_shortFilename = destFilename;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
destFilename = buf;
|
||||||
|
int32_t lastPos = destFilename.FindBack('/');
|
||||||
|
if (-1 != lastPos) {
|
||||||
|
m_shortFilename = destFilename.Extract(lastPos+1);
|
||||||
|
m_folder = destFilename.Extract(0, lastPos);
|
||||||
|
} else {
|
||||||
|
// Basic ERROR ...
|
||||||
|
TK_WARNING("file : \"" << destFilename << "\" ==> No data???");
|
||||||
|
m_shortFilename = destFilename;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
destFilename = buf;
|
|
||||||
int32_t lastPos = destFilename.FindBack('/');
|
int32_t lastPos = destFilename.FindBack('/');
|
||||||
if (-1 != lastPos) {
|
if (-1 != lastPos) {
|
||||||
m_shortFilename = destFilename.Extract(lastPos+1);
|
m_shortFilename = destFilename.Extract(lastPos+1);
|
||||||
@ -216,7 +319,7 @@ void etk::File::SetCompleateName(etk::String &newFilename)
|
|||||||
m_shortFilename = destFilename;
|
m_shortFilename = destFilename;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TK_VERBOSE("Set FileName :\"" << m_folder << "\" / \"" << m_shortFilename << "\" ");
|
TK_VERBOSE("Set FileName :\"" << m_folder << "\" / \"" << m_shortFilename << "\" mode=" << mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t etk::File::GetLineNumber(void)
|
int32_t etk::File::GetLineNumber(void)
|
||||||
@ -261,6 +364,14 @@ etk::String etk::File::GetExtention(void)
|
|||||||
|
|
||||||
int32_t etk::File::Size(void)
|
int32_t etk::File::Size(void)
|
||||||
{
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
if (m_idInternal >= -1 && m_idInternal < internalDataFilesSize) {
|
||||||
|
return internalDataFiles[m_idInternal].fileLenght;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
FILE *myFile=NULL;
|
FILE *myFile=NULL;
|
||||||
etk::String myCompleateName = GetCompleateName();
|
etk::String myCompleateName = GetCompleateName();
|
||||||
myFile=fopen(myCompleateName.c_str(),"rb");
|
myFile=fopen(myCompleateName.c_str(),"rb");
|
||||||
@ -279,6 +390,14 @@ int32_t etk::File::Size(void)
|
|||||||
|
|
||||||
bool etk::File::Exist(void)
|
bool etk::File::Exist(void)
|
||||||
{
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
if (m_idInternal >= -1 && m_idInternal < internalDataFilesSize) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
FILE *myFile=NULL;
|
FILE *myFile=NULL;
|
||||||
etk::String myCompleateName = GetCompleateName();
|
etk::String myCompleateName = GetCompleateName();
|
||||||
myFile=fopen(myCompleateName.c_str(),"rb");
|
myFile=fopen(myCompleateName.c_str(),"rb");
|
||||||
@ -288,3 +407,151 @@ bool etk::File::Exist(void)
|
|||||||
fclose(myFile);
|
fclose(myFile);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool etk::File::fOpenRead(void)
|
||||||
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
m_readingOffset = 0;
|
||||||
|
if (m_idInternal >= -1 && m_idInternal < internalDataFilesSize) {
|
||||||
|
TK_DEBUG("Open file : " << GetCompleateName() << " with size=" << internalDataFilesSize << " Octets");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (NULL != m_PointerFile) {
|
||||||
|
TK_CRITICAL("File Already open : \"" << GetCompleateName() << "\"");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
m_PointerFile=fopen(GetCompleateName().c_str(),"rb");
|
||||||
|
if(NULL == m_PointerFile) {
|
||||||
|
TK_ERROR("Can not find the file name=\"" << GetCompleateName() << "\"");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool etk::File::fOpenWrite(void)
|
||||||
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
m_readingOffset = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (NULL != m_PointerFile) {
|
||||||
|
TK_CRITICAL("File Already open : \"" << GetCompleateName() << "\"");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
m_PointerFile=fopen(GetCompleateName().c_str(),"wb");
|
||||||
|
if(NULL == m_PointerFile) {
|
||||||
|
TK_ERROR("Can not find the file name=\"" << GetCompleateName() << "\"");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool etk::File::fClose(void)
|
||||||
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
m_readingOffset = 0;
|
||||||
|
if (m_idInternal >= -1 && m_idInternal < internalDataFilesSize) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (NULL == m_PointerFile) {
|
||||||
|
TK_CRITICAL("File Already closed : \"" << GetCompleateName() << "\"");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
fclose(m_PointerFile);
|
||||||
|
m_PointerFile = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
char * etk::File::fGets(char * elementLine, int32_t maxData)
|
||||||
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
char * element = elementLine;
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
if (m_idInternal >= -1 && m_idInternal < internalDataFilesSize) {
|
||||||
|
// TODO ...
|
||||||
|
//char * tmpData = internalDataFiles[iii].data + m_readingOffset;
|
||||||
|
if (m_readingOffset>internalDataFilesSize) {
|
||||||
|
element[0] = '\0';
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
while (internalDataFiles[m_idInternal].data[m_readingOffset] != '\0') {
|
||||||
|
if( internalDataFiles[m_idInternal].data[m_readingOffset] == '\n'
|
||||||
|
|| internalDataFiles[m_idInternal].data[m_readingOffset] == '\r')
|
||||||
|
{
|
||||||
|
*element = internalDataFiles[m_idInternal].data[m_readingOffset];
|
||||||
|
element++;
|
||||||
|
m_readingOffset++;
|
||||||
|
*element = '\0';
|
||||||
|
return elementLine;
|
||||||
|
}
|
||||||
|
*element = internalDataFiles[m_idInternal].data[m_readingOffset];
|
||||||
|
element++;
|
||||||
|
m_readingOffset++;
|
||||||
|
// TODO : Understand why this does not work
|
||||||
|
/*if (m_readingOffset>internalDataFilesSize) {
|
||||||
|
*element = '\0';
|
||||||
|
return elementLine;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return fgets(elementLine, maxData, m_PointerFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t etk::File::fRead(void * data, int32_t blockSize, int32_t nbBlock)
|
||||||
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
if (m_idInternal >= -1 && m_idInternal < internalDataFilesSize) {
|
||||||
|
int32_t dataToRead = blockSize * nbBlock;
|
||||||
|
if (dataToRead + m_readingOffset > internalDataFilesSize) {
|
||||||
|
nbBlock = ((internalDataFilesSize - m_readingOffset) / blockSize);
|
||||||
|
dataToRead = blockSize * nbBlock;
|
||||||
|
}
|
||||||
|
memcpy(data, &internalDataFiles[m_idInternal].data[m_readingOffset], dataToRead);
|
||||||
|
m_readingOffset +=dataToRead;
|
||||||
|
return nbBlock;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return fread(data, blockSize, nbBlock, m_PointerFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t etk::File::fWrite(void * data, int32_t blockSize, int32_t nbBlock)
|
||||||
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
TK_CRITICAL("Can not write on data inside memory : \"" << GetCompleateName() << "\"");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return fwrite(data, blockSize, nbBlock, m_PointerFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char * etk::File::GetDirectPointer(void)
|
||||||
|
{
|
||||||
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == m_type) {
|
||||||
|
if (m_idInternal >= -1 && m_idInternal < internalDataFilesSize) {
|
||||||
|
return (char*)internalDataFiles[m_idInternal].data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
@ -33,13 +33,36 @@
|
|||||||
|
|
||||||
namespace etk
|
namespace etk
|
||||||
{
|
{
|
||||||
|
typedef enum {
|
||||||
|
// user might done abstraction ==> acces of the sdcard when possible ...
|
||||||
|
FILE_TYPE_DIRECT,
|
||||||
|
|
||||||
|
// depend of the case
|
||||||
|
// - PC : /usr/shared/programName/
|
||||||
|
// - Android : Internal at the executable file (pointer on static area)
|
||||||
|
// - Apple : Internal at the executable file
|
||||||
|
FILE_TYPE_DATA,
|
||||||
|
|
||||||
|
// depend on case
|
||||||
|
// - PC : ~/.programName/
|
||||||
|
// - Android : /data/data/programName/files/
|
||||||
|
// - Apple : ????
|
||||||
|
FILE_TYPE_USER_DATA,
|
||||||
|
|
||||||
|
// depend on case
|
||||||
|
// - PC : ~/.programName/cache/
|
||||||
|
// - Android : /data/data/programName/cache/
|
||||||
|
// - Apple : ????
|
||||||
|
FILE_TYPE_CACHE,
|
||||||
|
} FileType_te;
|
||||||
|
|
||||||
class File
|
class File
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
File(void) { m_lineNumberOpen=0; }
|
File(void) { m_lineNumberOpen=0; m_type = etk::FILE_TYPE_DIRECT; m_PointerFile = NULL;}
|
||||||
File(etk::String &filename, int32_t LineNumber = 0);
|
File(etk::String &filename, etk::FileType_te type = etk::FILE_TYPE_DIRECT, int32_t LineNumber = 0);
|
||||||
File(const char *filename, int32_t LineNumber = 0);
|
File(const char *filename, etk::FileType_te type = etk::FILE_TYPE_DIRECT, int32_t LineNumber = 0);
|
||||||
File(etk::String &filename, etk::String &folder, int32_t lineNumber = 0);
|
File(etk::String &filename, etk::String &folder, etk::FileType_te type = etk::FILE_TYPE_DIRECT, int32_t lineNumber = 0);
|
||||||
~File(void);
|
~File(void);
|
||||||
etk::String GetFolder(void) const;
|
etk::String GetFolder(void) const;
|
||||||
etk::String GetShortFilename(void) const;
|
etk::String GetShortFilename(void) const;
|
||||||
@ -50,23 +73,41 @@ namespace etk
|
|||||||
bool Exist(void);
|
bool Exist(void);
|
||||||
int32_t GetLineNumber(void);
|
int32_t GetLineNumber(void);
|
||||||
void SetLineNumber(int32_t newline);
|
void SetLineNumber(int32_t newline);
|
||||||
void SetCompleateName(etk::String &newFilename);
|
void SetCompleateName(etk::String &newFilename, etk::FileType_te type);
|
||||||
|
|
||||||
const etk::File& operator= (const etk::File &etkF );
|
const etk::File& operator= (const etk::File &etkF );
|
||||||
bool operator== (const etk::File &etkF ) const;
|
bool operator== (const etk::File &etkF ) const;
|
||||||
bool operator!= (const etk::File &etkF ) const;
|
bool operator!= (const etk::File &etkF ) const;
|
||||||
friend etk::CCout& operator <<( etk::CCout &os,const etk::File &obj);
|
friend etk::CCout& operator <<( etk::CCout &os,const etk::File &obj);
|
||||||
|
|
||||||
|
FileType_te GetTypeAccess(void) { return m_type; };
|
||||||
|
char * GetDirectPointer(void);
|
||||||
|
|
||||||
|
// TODO : IO access of the file :
|
||||||
|
bool fOpenRead(void);
|
||||||
|
bool fOpenWrite(void);
|
||||||
|
bool fClose(void);
|
||||||
|
char * fGets(char * elementLine, int32_t maxData);
|
||||||
|
int32_t fRead(void * data, int32_t blockSize, int32_t nbBlock);
|
||||||
|
int32_t fWrite(void * data, int32_t blockSize, int32_t nbBlock);
|
||||||
private :
|
private :
|
||||||
etk::String m_folder;
|
etk::FileType_te m_type;
|
||||||
etk::String m_shortFilename;
|
FILE * m_PointerFile;
|
||||||
int32_t m_lineNumberOpen;
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
int32_t m_idInternal;
|
||||||
|
int32_t m_readingOffset;
|
||||||
|
#endif
|
||||||
|
etk::String m_folder;
|
||||||
|
etk::String m_shortFilename;
|
||||||
|
int32_t m_lineNumberOpen;
|
||||||
};
|
};
|
||||||
|
|
||||||
etk::CCout& operator <<(etk::CCout &os, const etk::File &obj);
|
etk::CCout& operator <<(etk::CCout &os, const etk::File &obj);
|
||||||
|
|
||||||
void SetBaseFolder(const char * folder);
|
void SetBaseFolderData(const char * folder);
|
||||||
|
void SetBaseFolderDataUser(const char * folder);
|
||||||
|
void SetBaseFolderCache(const char * folder);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -67,16 +67,16 @@ namespace ewol
|
|||||||
tmpchar.ratio = 0;
|
tmpchar.ratio = 0;
|
||||||
m_elements.PushBack(tmpchar);
|
m_elements.PushBack(tmpchar);
|
||||||
}
|
}
|
||||||
FILE* File=fopen(m_filename.GetCompleateName().c_str(),"r");
|
if(false == m_filename.fOpenRead()) {
|
||||||
if(NULL == File) {
|
|
||||||
EWOL_ERROR("Can not find the file name=\"" << m_filename << "\"");
|
EWOL_ERROR("Can not find the file name=\"" << m_filename << "\"");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// load all element of the file ...
|
// load all element of the file ...
|
||||||
char elementLine[2048];
|
char elementLine[2048];
|
||||||
int32_t lineID=1;
|
int32_t lineID=1;
|
||||||
while (NULL != fgets(elementLine, 2048, File) )
|
while (NULL != m_filename.fGets(elementLine, 2048) )
|
||||||
{
|
{
|
||||||
|
EWOL_DEBUG(" Read file Line : " << elementLine);
|
||||||
if ( '\n' != elementLine[0] // EOL
|
if ( '\n' != elementLine[0] // EOL
|
||||||
&& '\0' != elementLine[0] // EOF
|
&& '\0' != elementLine[0] // EOF
|
||||||
&& '#' != elementLine[0] // Comment line
|
&& '#' != elementLine[0] // Comment line
|
||||||
@ -113,11 +113,12 @@ namespace ewol
|
|||||||
lineID++;
|
lineID++;
|
||||||
}
|
}
|
||||||
// close the file at end of reading...
|
// close the file at end of reading...
|
||||||
fclose(File);
|
m_filename.fClose();
|
||||||
// Load Bitmap :
|
// Load Bitmap :
|
||||||
etk::String bitmapRealFile = m_filename.GetFolder() + "/" + m_bitmapName;
|
etk::String bitmapRealFile = m_filename.GetFolder() + "/" + m_bitmapName;
|
||||||
EWOL_INFO("load text font image : \"" << bitmapRealFile << "\"");
|
EWOL_INFO("load text font image : \"" << bitmapRealFile << "\"");
|
||||||
m_textureId = ewol::LoadTexture(bitmapRealFile);
|
etk::File tmpFile(bitmapRealFile, m_filename.GetTypeAccess());
|
||||||
|
m_textureId = ewol::LoadTexture(tmpFile);
|
||||||
m_textureLoaded = true;
|
m_textureLoaded = true;
|
||||||
m_loadedOK = true;
|
m_loadedOK = true;
|
||||||
};
|
};
|
||||||
@ -270,7 +271,7 @@ int32_t ewol::LoadFont(etk::String fontName, int32_t size)
|
|||||||
{
|
{
|
||||||
// check if folder file
|
// check if folder file
|
||||||
etk::String tmpFileName = s_currentFolderName + "/" + fontName + ".ebt";
|
etk::String tmpFileName = s_currentFolderName + "/" + fontName + ".ebt";
|
||||||
etk::File fileName(tmpFileName);
|
etk::File fileName(tmpFileName, etk::FILE_TYPE_DATA);
|
||||||
if (false == fileName.Exist()) {
|
if (false == fileName.Exist()) {
|
||||||
EWOL_ERROR("Font does not exist: \"" << fileName.GetCompleateName() << "\"");
|
EWOL_ERROR("Font does not exist: \"" << fileName.GetCompleateName() << "\"");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -88,10 +88,10 @@ class Bitmap
|
|||||||
|
|
||||||
FILE *File=NULL;
|
FILE *File=NULL;
|
||||||
// Get the fileSize ...
|
// Get the fileSize ...
|
||||||
if (fileName.Size() < (int32_t)(sizeof(bitmapFileHeader_ts) + sizeof(bitmapInfoHeader_ts) ) ) {
|
/*if (fileName.Size() < (int32_t)(sizeof(bitmapFileHeader_ts) + sizeof(bitmapInfoHeader_ts) ) ) {
|
||||||
EWOL_ERROR("not enought data in the file named=\"" << fileName << "\"");
|
EWOL_ERROR("not enought data in the file named=\"" << fileName << "\"");
|
||||||
return;
|
return;
|
||||||
}
|
}*/
|
||||||
File=fopen(fileName.GetCompleateName().c_str(),"rb");
|
File=fopen(fileName.GetCompleateName().c_str(),"rb");
|
||||||
if(NULL == File) {
|
if(NULL == File) {
|
||||||
EWOL_ERROR("Can not find the file name=\"" << fileName << "\"");
|
EWOL_ERROR("Can not find the file name=\"" << fileName << "\"");
|
||||||
|
@ -58,7 +58,15 @@ void ewol::theme::Theme::Load(etk::File & newFile, bool defaultTheme)
|
|||||||
} else {
|
} else {
|
||||||
TiXmlDocument XmlDocument;
|
TiXmlDocument XmlDocument;
|
||||||
// open the curent File
|
// open the curent File
|
||||||
XmlDocument.LoadFile(newFile.GetCompleateName().c_str());
|
#ifdef DATA_INTERNAL_BINARY
|
||||||
|
if (etk::FILE_TYPE_DATA == newFile.GetTypeAccess()) {
|
||||||
|
XmlDocument.Parse(newFile.GetDirectPointer());
|
||||||
|
} else {
|
||||||
|
XmlDocument.LoadFile(newFile.GetCompleateName().c_str());
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
XmlDocument.LoadFile(newFile.GetCompleateName().c_str());
|
||||||
|
#endif
|
||||||
TiXmlElement* root = XmlDocument.FirstChildElement( "eol" );
|
TiXmlElement* root = XmlDocument.FirstChildElement( "eol" );
|
||||||
if (NULL == root ) {
|
if (NULL == root ) {
|
||||||
EWOL_ERROR("(l ?) main node not find: \"eol\" in \"" << newFile << "\"");
|
EWOL_ERROR("(l ?) main node not find: \"eol\" in \"" << newFile << "\"");
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.0 MiB |
@ -1,129 +0,0 @@
|
|||||||
name:Monospace
|
|
||||||
source:Monospace.bmp
|
|
||||||
# comment line ...
|
|
||||||
# size 54 largeur 33 space between letter 12
|
|
||||||
# unknow UTF8 code of the letter and start coordonate and size ==> 0x54 (33,45) (33,54)
|
|
||||||
0x00 (99,453) (33,54) # Error : Unknow the UTF8 element ...
|
|
||||||
# hexa UTF8 code of the letter and start coordonate and size ==> 0x54 (33,45) (33,54)
|
|
||||||
# ABCDEFGHIJKLMN
|
|
||||||
0x20 (0,7) (33,54) # space ...
|
|
||||||
0x41 (33,7) (33,54) # A
|
|
||||||
0x42 (66,7) (33,54) # B
|
|
||||||
0x43 (99,7) (33,54) # C
|
|
||||||
0x44 (132,7) (33,54) # D
|
|
||||||
0x45 (165,7) (33,54) # E
|
|
||||||
0x46 (198,7) (33,54) # F
|
|
||||||
0x47 (231,7) (33,54) # G
|
|
||||||
0x48 (264,7) (33,54) # H
|
|
||||||
0x49 (297,7) (33,54) # I
|
|
||||||
0x4A (330,7) (33,54) # J
|
|
||||||
0x4B (363,7) (33,54) # K
|
|
||||||
0x4C (396,7) (33,54) # L
|
|
||||||
0x4D (429,7) (33,54) # M
|
|
||||||
0x4E (462,7) (33,54) # N
|
|
||||||
#OPQRSTUVWXYZabc
|
|
||||||
0x4F (0,71) (33,54) # O
|
|
||||||
0x50 (33,71) (33,54) # P
|
|
||||||
0x51 (66,71) (33,54) # Q
|
|
||||||
0x52 (99,71) (33,54) # R
|
|
||||||
0x53 (132,71) (33,54) # S
|
|
||||||
0x54 (165,71) (33,54) # T
|
|
||||||
0x55 (198,71) (33,54) # U
|
|
||||||
0x56 (231,71) (33,54) # V
|
|
||||||
0x57 (264,71) (33,54) # W
|
|
||||||
0x58 (297,71) (33,54) # X
|
|
||||||
0x59 (330,71) (33,54) # Y
|
|
||||||
0x5A (363,71) (33,54) # Z
|
|
||||||
0x61 (396,71) (33,54) # a
|
|
||||||
0x62 (429,71) (33,54) # b
|
|
||||||
0x63 (462,71) (33,54) # c
|
|
||||||
#defghijklmnopqr
|
|
||||||
0x64 (0,135) (33,54) # d
|
|
||||||
0x65 (33,135) (33,54) # e
|
|
||||||
0x66 (66,135) (33,54) # f
|
|
||||||
0x67 (99,135) (33,54) # g
|
|
||||||
0x68 (132,135) (33,54) # h
|
|
||||||
0x69 (165,135) (33,54) # i
|
|
||||||
0x6A (198,135) (33,54) # j
|
|
||||||
0x6B (231,135) (33,54) # k
|
|
||||||
0x6C (264,135) (33,54) # l
|
|
||||||
0x6D (297,135) (33,54) # m
|
|
||||||
0x6E (330,135) (33,54) # n
|
|
||||||
0x6F (363,135) (33,54) # o
|
|
||||||
0x70 (396,135) (33,54) # p
|
|
||||||
0x71 (429,135) (33,54) # q
|
|
||||||
0x72 (462,135) (33,54) # r
|
|
||||||
#stuvwxyz1234567
|
|
||||||
0x73 (0,199) (33,54) # s
|
|
||||||
0x74 (33,199) (33,54) # t
|
|
||||||
0x75 (66,199) (33,54) # u
|
|
||||||
0x76 (99,199) (33,54) # v
|
|
||||||
0x77 (132,199) (33,54) # w
|
|
||||||
0x78 (165,199) (33,54) # x
|
|
||||||
0x79 (198,199) (33,54) # y
|
|
||||||
0x7A (231,199) (33,54) # z
|
|
||||||
0x31 (264,199) (33,54) # 1
|
|
||||||
0x32 (297,199) (33,54) # 2
|
|
||||||
0x33 (330,199) (33,54) # 3
|
|
||||||
0x34 (363,199) (33,54) # 4
|
|
||||||
0x35 (396,199) (33,54) # 5
|
|
||||||
0x36 (429,199) (33,54) # 6
|
|
||||||
0x37 (462,199) (33,54) # 7
|
|
||||||
#890&é~"#'{([-|è
|
|
||||||
0x38 (0,263) (33,54) # 8
|
|
||||||
0x39 (33,263) (33,54) # 9
|
|
||||||
0x30 (66,263) (33,54) # 0
|
|
||||||
0x26 (99,263) (33,54) # &
|
|
||||||
#0x (132,263) (33,54) # é
|
|
||||||
0x7E (165,263) (33,54) # ~
|
|
||||||
0x22 (198,263) (33,54) # "
|
|
||||||
0x23 (231,263) (33,54) # #
|
|
||||||
0x27 (264,263) (33,54) # '
|
|
||||||
0x7B (297,263) (33,54) # {
|
|
||||||
0x28 (330,263) (33,54) # (
|
|
||||||
0x5B (363,263) (33,54) # [
|
|
||||||
0x2D (396,263) (33,54) # -
|
|
||||||
0x7C (429,263) (33,54) # |
|
|
||||||
#0x (462,263) (33,54) # è
|
|
||||||
#`_\ç^à@)]=}
|
|
||||||
0x60 (0,335) (33,54) # `
|
|
||||||
0x5F (33,335) (33,54) # _
|
|
||||||
0x5C (66,335) (33,54) # \
|
|
||||||
#0x (99,335) (33,54) # ç
|
|
||||||
0x5E (132,335) (33,54) # ^
|
|
||||||
#0x (165,335) (33,54) # à
|
|
||||||
0x40 (198,335) (33,54) # @
|
|
||||||
0x29 (231,335) (33,54) # )
|
|
||||||
0x5D (264,335) (33,54) # ]
|
|
||||||
0x3D (297,335) (33,54) # =
|
|
||||||
0x7D (330,335) (33,54) # }
|
|
||||||
#0x (363,335) (33,54) # o chap
|
|
||||||
#0x (396,335) (33,54) # u chap
|
|
||||||
#0x (429,335) (33,54) # e chap
|
|
||||||
#0x (462,335) (33,54) # a chap
|
|
||||||
#$£*µ%!§:/
|
|
||||||
#0x (0,391) (33,54) # i chap
|
|
||||||
#0x (33,391) (33,54) # o trema
|
|
||||||
#0x (66,391) (33,54) # u trema
|
|
||||||
#0x (99,391) (33,54) # e trema
|
|
||||||
#0x (132,391) (33,54) # a trema
|
|
||||||
0x24 (165,391) (33,54) # $
|
|
||||||
#0x (198,391) (33,54) # £
|
|
||||||
0x2A (231,391) (33,54) # *
|
|
||||||
#0x (264,391) (33,54) # µ
|
|
||||||
#0x (297,391) (33,54) # ù
|
|
||||||
0x25 (330,391) (33,54) # %
|
|
||||||
0x21 (363,391) (33,54) # !
|
|
||||||
#0x (396,391) (33,54) # §
|
|
||||||
0x3A (429,391) (33,54) # :
|
|
||||||
0x2F (462,391) (33,54) # /
|
|
||||||
#;.,?<>²!+
|
|
||||||
0x3B (0,453) (33,54) # ;
|
|
||||||
0x2E (33,453) (33,54) # .
|
|
||||||
0x2C (66,453) (33,54) # ,
|
|
||||||
0x3F (99,453) (33,54) # ?
|
|
||||||
0x3C (132,453) (33,54) # <
|
|
||||||
0x3E (165,453) (33,54) # >
|
|
||||||
#0x (198,453) (33,54) # ²
|
|
||||||
#0x21 (231,453) (33,54) # ! ==> doublon ...
|
|
||||||
0x2B (264,453) (33,54) # +
|
|
Binary file not shown.
Before Width: | Height: | Size: 6.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<eol>
|
|
||||||
<!-- can have "color" and "group" that is consider as global ... -->
|
|
||||||
<color/>
|
|
||||||
<color name="MEGAMERDIQUE"/>
|
|
||||||
<color name="GenBG" val="#FF0000"/>
|
|
||||||
<color name="GenFG" val="#FF000055"/>
|
|
||||||
<color name="TestPlop" val="#0000FF55"/>
|
|
||||||
<color name="GenBorder" val="1.0;0.000512;1.0;0.755562535"/>
|
|
||||||
<color name="GenBorder" val="5.0;0.000512;1.0"/>
|
|
||||||
|
|
||||||
<group name="Gen Rect system ... ">
|
|
||||||
<rect color="..."
|
|
||||||
position="0.53;0.56"
|
|
||||||
size="0.22;0.11"
|
|
||||||
/>
|
|
||||||
<line color="..."
|
|
||||||
positionStart="0.53;0.56"
|
|
||||||
positionStop="0.22;0.11"
|
|
||||||
thickness="0.05"
|
|
||||||
/>
|
|
||||||
<!-- and more basic display -->
|
|
||||||
</group>
|
|
||||||
|
|
||||||
<!-- example of a single element -->
|
|
||||||
<element name="plop"
|
|
||||||
ratio="1.0"
|
|
||||||
ClipX="false"
|
|
||||||
ClipY="false"
|
|
||||||
internalElemStart="0.25;0.75"
|
|
||||||
internalElemStop="0.75;0.75">
|
|
||||||
<!--
|
|
||||||
note we have 5 methode to reference a color :
|
|
||||||
- #RRGGBB ==> in hexa 0x00<=x<=0xFF
|
|
||||||
- #RRGGBBAA ==> in hexa 0x00<=x<=0xFF
|
|
||||||
- R.R;G.G;B.B ==> in double 0<=x<=1
|
|
||||||
- R.R;G.G;B.B;A.A ==> in double 0<=x<=1
|
|
||||||
- &NameColor ==> search internal color of the element and after global color ...
|
|
||||||
-->
|
|
||||||
<color name="Background" val="#EEEEEEFF"/>
|
|
||||||
<color name="Red" val="#FF0000FF"/>
|
|
||||||
<color name="Green" val="#00FF00FF"/>
|
|
||||||
<color name="Border" val="0.0;0.000512;1.0;0.755562535"/>
|
|
||||||
<!--...-->
|
|
||||||
|
|
||||||
|
|
||||||
<group name="basicRect">
|
|
||||||
<rect color="..."
|
|
||||||
position="0.53;0.56"
|
|
||||||
size="0.22;0.11"
|
|
||||||
/>
|
|
||||||
<line color="..."
|
|
||||||
positionStart="0.53;0.56"
|
|
||||||
positionStop="0.22;0.11"
|
|
||||||
thickness="0.05"
|
|
||||||
/>
|
|
||||||
<!-- and more basic display -->
|
|
||||||
</group>
|
|
||||||
<!--...-->
|
|
||||||
|
|
||||||
<frame id="0" name="basic">
|
|
||||||
<rect colorBG="Background"
|
|
||||||
position="0.0;0.0"
|
|
||||||
size="1.0;1.0"
|
|
||||||
/>
|
|
||||||
<rect colorBorder="Red"
|
|
||||||
position="0.1;0.1"
|
|
||||||
size="0.25;0.25"
|
|
||||||
thickness="0.01"
|
|
||||||
/>
|
|
||||||
<line color="TestPlop"
|
|
||||||
positionStart="0.53;0.56"
|
|
||||||
positionStop="0.22;0.11"
|
|
||||||
thickness="0.01"
|
|
||||||
/>
|
|
||||||
<circle colorBG="Green"
|
|
||||||
position="0.75;0.75"
|
|
||||||
radius="0.25"
|
|
||||||
/>
|
|
||||||
</frame>
|
|
||||||
<frame id="0" name="hover">
|
|
||||||
<rect color="..."
|
|
||||||
position="0.53;0.56"
|
|
||||||
size="0.22;0.11"
|
|
||||||
/>
|
|
||||||
<link name="basicRect"/>
|
|
||||||
</frame>
|
|
||||||
<!--...-->
|
|
||||||
|
|
||||||
</element>
|
|
||||||
<!--...-->
|
|
||||||
</eol>
|
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
@ -1,6 +1,6 @@
|
|||||||
name:Monospace
|
name:Monospace
|
||||||
source:Monospace.bmp
|
source:Monospace.bmp
|
||||||
# comment line ...
|
#comment line ...
|
||||||
# size 54 largeur 33 space between letter 12
|
# size 54 largeur 33 space between letter 12
|
||||||
# unknow UTF8 code of the letter and start coordonate and size ==> 0x54 (33,45) (33,54)
|
# unknow UTF8 code of the letter and start coordonate and size ==> 0x54 (33,45) (33,54)
|
||||||
0x00 (99,453) (33,54) # Error : Unknow the UTF8 element ...
|
0x00 (99,453) (33,54) # Error : Unknow the UTF8 element ...
|
219
tools/fileToCpp.cpp
Normal file
219
tools/fileToCpp.cpp
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
/**
|
||||||
|
*******************************************************************************
|
||||||
|
* @file pngToCpp.cpp
|
||||||
|
* @brief convert a binary file into a C source vector
|
||||||
|
* @author Sandro Sigala
|
||||||
|
* @date 26/01/2011
|
||||||
|
* @par Project
|
||||||
|
* ---
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
*
|
||||||
|
* @par Copyright
|
||||||
|
* THE "BEER-WARE LICENSE" (Revision 3.1415):
|
||||||
|
* sandro AT sigala DOT it wrote this file. As long as you retain this notice you can do
|
||||||
|
* whatever you want with this stuff. If we meet some day, and you think this stuff is
|
||||||
|
* worth it, you can buy me a beer in return. Sandro Sigala
|
||||||
|
*
|
||||||
|
* @compilation g++ pngToCpp -o pngToCpp
|
||||||
|
*
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifndef PATH_MAX
|
||||||
|
#define PATH_MAX 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool zeroTerminated = false;
|
||||||
|
|
||||||
|
int myfgetc(FILE *f)
|
||||||
|
{
|
||||||
|
int c = fgetc(f);
|
||||||
|
if (c == EOF && zeroTerminated)
|
||||||
|
{
|
||||||
|
zeroTerminated = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void generateHeader(FILE *file)
|
||||||
|
{
|
||||||
|
fprintf(file, "/**\n");
|
||||||
|
fprintf(file, " ******************************************************************************* \n");
|
||||||
|
fprintf(file, " * \n");
|
||||||
|
fprintf(file, " * @par Project\n");
|
||||||
|
fprintf(file, " * Edn\n");
|
||||||
|
fprintf(file, " * \n");
|
||||||
|
fprintf(file, " * Automatic generated file for Edn Software\n");
|
||||||
|
fprintf(file, " * Please do not save this file on File configuration server\n");
|
||||||
|
fprintf(file, " * \n");
|
||||||
|
fprintf(file, " * @par Copyright\n");
|
||||||
|
fprintf(file, " * The copyright of the data depend on the source file but generated file is on GPL v3\n");
|
||||||
|
fprintf(file, " * \n");
|
||||||
|
fprintf(file, " * Copyright 2010 Edouard DUPIN, all right reserved\n");
|
||||||
|
fprintf(file, " * \n");
|
||||||
|
fprintf(file, " * This is free software; you can redistribute it and/or modify it under the\n");
|
||||||
|
fprintf(file, " * terms of the GNU General Public License as published by the Free Software\n");
|
||||||
|
fprintf(file, " * Foundation; either version 3 of the License, or (at your option) any later\n");
|
||||||
|
fprintf(file, " * version.\n");
|
||||||
|
fprintf(file, " * \n");
|
||||||
|
fprintf(file, " * This software is distributed in the hope that it will be useful, but WITHOUT\n");
|
||||||
|
fprintf(file, " * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n");
|
||||||
|
fprintf(file, " * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n");
|
||||||
|
fprintf(file, " * for more details.\n");
|
||||||
|
fprintf(file, " * \n");
|
||||||
|
fprintf(file, " ******************************************************************************* \n");
|
||||||
|
fprintf(file, " */\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
char endTable[256000] = "";
|
||||||
|
|
||||||
|
FILE *ofile=NULL;
|
||||||
|
FILE *ofileH=NULL;
|
||||||
|
|
||||||
|
void process(const char *ifname)
|
||||||
|
{
|
||||||
|
printf(" Import File : \"%s\"\n", ifname);
|
||||||
|
FILE *ifile=NULL;
|
||||||
|
ifile = fopen(ifname, "rb");
|
||||||
|
if (ifile == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "cannot open %s for reading\n", ifname);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
char buf[PATH_MAX], *p;
|
||||||
|
const char *cp;
|
||||||
|
if ((cp = strrchr(ifname, '/')) != NULL)
|
||||||
|
{
|
||||||
|
++cp;
|
||||||
|
} else {
|
||||||
|
if ((cp = strrchr(ifname, '\\')) != NULL)
|
||||||
|
++cp;
|
||||||
|
else
|
||||||
|
cp = ifname;
|
||||||
|
}
|
||||||
|
strcpy(buf, cp);
|
||||||
|
for (p = buf; *p != '\0'; ++p)
|
||||||
|
{
|
||||||
|
if (!isalnum(*p))
|
||||||
|
*p = '_';
|
||||||
|
}
|
||||||
|
fprintf(ofile, "unsigned char %s[] = {", buf);
|
||||||
|
int n = 0;
|
||||||
|
unsigned char c = 0;
|
||||||
|
while(fread(&c, 1, 1, ifile) == 1)
|
||||||
|
{
|
||||||
|
if(n%100 == 0) {
|
||||||
|
fprintf(ofile, "\n\t\t");
|
||||||
|
}
|
||||||
|
fprintf(ofile, "0x%02x,", c);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
fprintf(ofile, "\n};\n");
|
||||||
|
fprintf(ofile, "long int %s_size = sizeof(%s);\n", buf, buf);
|
||||||
|
|
||||||
|
//fprintf(ofileH, "extern unsigned char %s[];\n", buf);
|
||||||
|
//fprintf(ofileH, "extern unsigned long int %s_size;\n", buf);
|
||||||
|
char tmpVar[4096];
|
||||||
|
sprintf(tmpVar, " {\"%s\", %s_size , %s},\n", ifname, buf, buf);
|
||||||
|
strcat (endTable, tmpVar);
|
||||||
|
|
||||||
|
fclose(ifile);
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: pngToCpp <output_file>.xxx <input_file>\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
//zeroTerminated = true;
|
||||||
|
if (argc < 3) {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
// dynamic output name :
|
||||||
|
char tmpOutput[PATH_MAX*2] = "";
|
||||||
|
strcpy(tmpOutput, argv[1]);
|
||||||
|
int32_t sizeName = strlen(tmpOutput);
|
||||||
|
if (6>=sizeName) {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
if (tmpOutput[sizeName-1] == '.') {
|
||||||
|
tmpOutput[sizeName-1] = '\0';
|
||||||
|
} else if (tmpOutput[sizeName-2] == '.') {
|
||||||
|
tmpOutput[sizeName-2] = '\0';
|
||||||
|
} else if (tmpOutput[sizeName-3] == '.') {
|
||||||
|
tmpOutput[sizeName-3] = '\0';
|
||||||
|
} else if (tmpOutput[sizeName-4] == '.') {
|
||||||
|
tmpOutput[sizeName-4] = '\0';
|
||||||
|
} else if (tmpOutput[sizeName-5] == '.') {
|
||||||
|
tmpOutput[sizeName-5] = '\0';
|
||||||
|
} else if (tmpOutput[sizeName-6] == '.') {
|
||||||
|
tmpOutput[sizeName-6] = '\0';
|
||||||
|
}
|
||||||
|
//fprintf(stderr, "writing to %s\n", tmpOutput);
|
||||||
|
|
||||||
|
char tmpOutputCPP[PATH_MAX*2] = "";
|
||||||
|
char tmpOutputH[PATH_MAX*2] = "";
|
||||||
|
// Generate the output filename
|
||||||
|
sprintf(tmpOutputCPP,"%s.cpp", tmpOutput);
|
||||||
|
sprintf(tmpOutputH,"%s.h", tmpOutput);
|
||||||
|
// open destination name :
|
||||||
|
ofile = fopen(tmpOutputCPP, "wb");
|
||||||
|
if (ofile == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "cannot open %s for writing\n", tmpOutputCPP);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
generateHeader(ofile);
|
||||||
|
ofileH = fopen(tmpOutputH, "wb");
|
||||||
|
if (ofileH == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "cannot open %s for writing\n", tmpOutputH);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
generateHeader(ofileH);
|
||||||
|
fprintf(ofileH, "#ifndef __INPUT_PNG_FILE_GENERATED_H__\n");
|
||||||
|
fprintf(ofileH, "#define __INPUT_PNG_FILE_GENERATED_H__\n\n");
|
||||||
|
fprintf(ofileH, "extern \"C\" {\n");
|
||||||
|
fprintf(ofileH, " typedef struct {\n");
|
||||||
|
fprintf(ofileH, " char filename[1024];\n");
|
||||||
|
fprintf(ofileH, " long int fileLenght;\n");
|
||||||
|
fprintf(ofileH, " unsigned char * data;\n");
|
||||||
|
fprintf(ofileH, " } internalData_ts;\n\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
// Generate the output
|
||||||
|
int32_t i;
|
||||||
|
for(i=2; i<argc; i++) {
|
||||||
|
process(argv[i]);
|
||||||
|
}
|
||||||
|
// set the pointer on the table
|
||||||
|
fprintf(ofileH, " extern internalData_ts internalDataFiles[];\n");
|
||||||
|
// set the number of files
|
||||||
|
fprintf(ofileH, " extern long int internalDataFilesSize;\n");
|
||||||
|
fprintf(ofileH, "}\n");
|
||||||
|
fprintf(ofileH, "#endif\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
fprintf(ofile, "#include \"GeneratedData.h\"\n");
|
||||||
|
fprintf(ofile, "internalData_ts internalDataFiles[] = {\n");
|
||||||
|
fprintf(ofile, "%s", endTable);
|
||||||
|
fprintf(ofile, "};\n");
|
||||||
|
fprintf(ofile, "long int internalDataFilesSize = sizeof(internalDataFiles) / sizeof(internalData_ts);\n");
|
||||||
|
|
||||||
|
|
||||||
|
// Close destination files
|
||||||
|
fclose(ofile);
|
||||||
|
fclose(ofileH);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user