git » fp-git.git » commit b1c4604

Bugfixes. Created the "index" xml attibute. Added ordered list primitives for the future new resource handling structure.

author ecalot
2005-06-05 02:28:45 UTC
committer ecalot
2005-06-05 02:28:45 UTC
parent c5468c23b2329e14bcbac4b627be509d154b0fa6

Bugfixes. Created the "index" xml attibute. Added ordered list primitives for the future new resource handling structure.

PR/src/Makefile +1 -1
PR/src/include/autodetect.h +2 -2
PR/src/include/idlist.h +2 -2
PR/src/include/list.h +61 -0
PR/src/include/pr.h +1 -0
PR/src/include/tree.h +2 -2
PR/src/include/unknown.h +2 -2
PR/src/lib/actions/export.c +2 -2
PR/src/lib/actions/import.c +2 -2
PR/src/lib/layers/autodetect.c +4 -4
PR/src/lib/layers/idlist.c +4 -4
PR/src/lib/layers/list.c +125 -0
PR/src/lib/layers/reslist.c +81 -0
PR/src/lib/xml/parse.c +4 -0
PR/src/lib/xml/tree.c +4 -4
PR/src/lib/xml/unknown.c +4 -4
PR/src/xml/resources.xml +191 -24

diff --git a/PR/src/Makefile b/PR/src/Makefile
index 6fc257d..5b3e52a 100644
--- a/PR/src/Makefile
+++ b/PR/src/Makefile
@@ -8,7 +8,7 @@ INFO       = @echo
 MAKEDIR    = @mkdir -p
 REMOVER    = @rm -f
 GZIP       = @gzip
-COPY       = @cp -f
+COPY       = @ln -f
 
 #####################
 # Operating Systems #
diff --git a/PR/src/include/autodetect.h b/PR/src/include/autodetect.h
index 6c0a1d5..a493c21 100644
--- a/PR/src/include/autodetect.h
+++ b/PR/src/include/autodetect.h
@@ -39,7 +39,7 @@ resources.h: Princed Resources : Resource Handler headers
 #define RES_XML_UNKNOWN_PATH  "%s/unknown/%s/"
 #define RES_XML_UNKNOWN_FILES "%s%02d.%s"
 #define RES_XML_UNKNOWN_START "<?xml version=\"1.0\" ?>\n<resources version=\"generated\">\n <folder name=\"unknown\" path=\"%s\" file=\"%s\" palette=\"%d\">\n"
-#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
+#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" index=\"%s\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
 #define RES_XML_UNKNOWN_END   " </folder>\n</resources>\n"
 
 /* File extensions */
@@ -123,7 +123,7 @@ int checkSum(const unsigned char* data,int size);
 void emptyTable(tResource* r[]);
 
 /* Resources extras */
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension);
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension,const char* indexName);
 void getUpperFolder(char* aux, char* vFiledat);
 
 const char* getExtDesc(int type);
diff --git a/PR/src/include/idlist.h b/PR/src/include/idlist.h
index 6c0a1d5..a493c21 100644
--- a/PR/src/include/idlist.h
+++ b/PR/src/include/idlist.h
@@ -39,7 +39,7 @@ resources.h: Princed Resources : Resource Handler headers
 #define RES_XML_UNKNOWN_PATH  "%s/unknown/%s/"
 #define RES_XML_UNKNOWN_FILES "%s%02d.%s"
 #define RES_XML_UNKNOWN_START "<?xml version=\"1.0\" ?>\n<resources version=\"generated\">\n <folder name=\"unknown\" path=\"%s\" file=\"%s\" palette=\"%d\">\n"
-#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
+#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" index=\"%s\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
 #define RES_XML_UNKNOWN_END   " </folder>\n</resources>\n"
 
 /* File extensions */
@@ -123,7 +123,7 @@ int checkSum(const unsigned char* data,int size);
 void emptyTable(tResource* r[]);
 
 /* Resources extras */
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension);
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension,const char* indexName);
 void getUpperFolder(char* aux, char* vFiledat);
 
 const char* getExtDesc(int type);
diff --git a/PR/src/include/list.h b/PR/src/include/list.h
new file mode 100644
index 0000000..445e47d
--- /dev/null
+++ b/PR/src/include/list.h
@@ -0,0 +1,61 @@
+/*  Princed V3 - Prince of Persia Level Editor for PC Version
+    Copyright (C) 2003 Princed Development Team
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    The authors of this program may be contacted at http://forum.princed.com.ar
+*/
+
+/*
+list.h: Princed Resources : Ordered Read-Only list headers
+\xaf\xaf\xaf\xaf\xaf\xaf
+ Copyright 2005 Princed Development Team
+  Created: 04 Jun 2005
+
+  Author: Enrique Calot <ecalot.cod@princed.com.ar>
+  Version: 1.00 (2005-Jun-04)
+
+ Note:
+  DO NOT remove this copyright notice
+*/
+
+/* Defines */
+#ifndef _LIST_H_
+#define _LIST_H_
+
+#define GT 1
+#define EQ 0
+#define LT -1
+
+typedef struct node {
+	void* data;
+	struct node* next;
+}tListNode;
+
+typedef struct {
+	int size;
+	int (*cmp)(void*,void*);
+	tListNode *cursor,*first;
+}tList;
+
+tList list_create(int dataSize,int dataCmp(void*,void*));
+void  list_insert(tList *list,void* data);
+void  list_drop(tList *list);
+void  list_nextCursor(tList* list);
+void  list_firstCursor(tList* list);
+int   list_moveCursor(tList* list,void* data);
+const void* list_getCursor(tList* list);
+
+#endif
diff --git a/PR/src/include/pr.h b/PR/src/include/pr.h
index 398048b..f248d18 100644
--- a/PR/src/include/pr.h
+++ b/PR/src/include/pr.h
@@ -55,6 +55,7 @@ typedef struct tTag {
 	char* palette;
 	char* type;
 	char* value;
+	char* index;
 	char* version;
 	char* number;
 }tTag;
diff --git a/PR/src/include/tree.h b/PR/src/include/tree.h
index 6c0a1d5..a493c21 100644
--- a/PR/src/include/tree.h
+++ b/PR/src/include/tree.h
@@ -39,7 +39,7 @@ resources.h: Princed Resources : Resource Handler headers
 #define RES_XML_UNKNOWN_PATH  "%s/unknown/%s/"
 #define RES_XML_UNKNOWN_FILES "%s%02d.%s"
 #define RES_XML_UNKNOWN_START "<?xml version=\"1.0\" ?>\n<resources version=\"generated\">\n <folder name=\"unknown\" path=\"%s\" file=\"%s\" palette=\"%d\">\n"
-#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
+#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" index=\"%s\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
 #define RES_XML_UNKNOWN_END   " </folder>\n</resources>\n"
 
 /* File extensions */
@@ -123,7 +123,7 @@ int checkSum(const unsigned char* data,int size);
 void emptyTable(tResource* r[]);
 
 /* Resources extras */
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension);
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension,const char* indexName);
 void getUpperFolder(char* aux, char* vFiledat);
 
 const char* getExtDesc(int type);
diff --git a/PR/src/include/unknown.h b/PR/src/include/unknown.h
index 6c0a1d5..a493c21 100644
--- a/PR/src/include/unknown.h
+++ b/PR/src/include/unknown.h
@@ -39,7 +39,7 @@ resources.h: Princed Resources : Resource Handler headers
 #define RES_XML_UNKNOWN_PATH  "%s/unknown/%s/"
 #define RES_XML_UNKNOWN_FILES "%s%02d.%s"
 #define RES_XML_UNKNOWN_START "<?xml version=\"1.0\" ?>\n<resources version=\"generated\">\n <folder name=\"unknown\" path=\"%s\" file=\"%s\" palette=\"%d\">\n"
-#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
+#define RES_XML_UNKNOWN_ITEM  "  <item value=\"%d\" index=\"%s\" path=\""RES_XML_UNKNOWN_FILES"\" itemtype=\"%s\">Unknown %s %d</item>\n"
 #define RES_XML_UNKNOWN_END   " </folder>\n</resources>\n"
 
 /* File extensions */
@@ -123,7 +123,7 @@ int checkSum(const unsigned char* data,int size);
 void emptyTable(tResource* r[]);
 
 /* Resources extras */
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension);
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag,const char* backupExtension,const char* indexName);
 void getUpperFolder(char* aux, char* vFiledat);
 
 const char* getExtDesc(int type);
diff --git a/PR/src/lib/actions/export.c b/PR/src/lib/actions/export.c
index 837e840..253b616 100644
--- a/PR/src/lib/actions/export.c
+++ b/PR/src/lib/actions/export.c
@@ -106,7 +106,7 @@ int extract(const char* vFiledat,const char* vDirExt, tResource* r[], int option
 				if (hasFlag(raw_flag)) r[id]->type=0; /* If "extract as raw" is set, type is 0 */
 
 				/* get save file name (if unknown document it in the xml) */
-				getFileName(vFileext,vDirExt,r[id],(unsigned short)id,vFiledat,vDatFileName,optionflag,backupExtension);
+				getFileName(vFileext,vDirExt,r[id],(unsigned short)id,vFiledat,vDatFileName,optionflag,backupExtension,indexName);
 
 				switch (r[id]->type) {
 					case RES_TYPE_LEVEL:
@@ -174,7 +174,7 @@ int extract(const char* vFiledat,const char* vDirExt, tResource* r[], int option
 				}
 			} else {
 				/* if the dat file is unknown, add it in the xml */
-				getFileName(vFileext,vDirExt,r[id],(unsigned short)id,vFiledat,vDatFileName,optionflag,backupExtension);
+				getFileName(vFileext,vDirExt,r[id],(unsigned short)id,vFiledat,vDatFileName,optionflag,backupExtension,indexName);
 			}
 			/*freeAllocation(data);*/
 		}
diff --git a/PR/src/lib/actions/import.c b/PR/src/lib/actions/import.c
index ebfb23f..c70229b 100644
--- a/PR/src/lib/actions/import.c
+++ b/PR/src/lib/actions/import.c
@@ -111,7 +111,7 @@ int fullCompile(const char* vFiledat, const char* vDirExt, tResource* r[], int o
 	for (;id!=MAX_RES_COUNT;id++) {
 		if (r[id]!=NULL) {
 			if (hasFlag(raw_flag)) r[id]->type=0; /* compile from raw */
-			getFileName(vFileext,vDirExt,r[id],id,vFiledat,vDatFileName,optionflag,backupExtension);
+			getFileName(vFileext,vDirExt,r[id],id,vFiledat,vDatFileName,optionflag,backupExtension,"POP1");
 			/* the file is in the archive, so i'll add it to the main dat body */
 			if ((r[id]->size=((unsigned short)mLoadFileArray(vFileext,&data)))) {
 				mWriteInitResource(r+id);
@@ -181,7 +181,7 @@ int partialCompile(const char* vFiledat, const char* vDirExt, tResource* r[], in
 		mWriteInitResource(r+id);
 		if (r[id]&&isInThePartialList(r[id]->path,id)) { /* If the resource was specified */
 			if (hasFlag(raw_flag)) r[id]->type=0; /* compile from raw */
-			getFileName(vFileext,vDirExt,r[id],(unsigned short)id,vFiledat,vDatFileName,optionflag,backupExtension);
+			getFileName(vFileext,vDirExt,r[id],(unsigned short)id,vFiledat,vDatFileName,optionflag,backupExtension,"POP1");
 
 			/* the file is in the archive, so i'll add it to the main dat body */
 			if ((r[id]->size=((unsigned long)mLoadFileArray(vFileext,&data)))) {
diff --git a/PR/src/lib/layers/autodetect.c b/PR/src/lib/layers/autodetect.c
index caf3179..3cc79fd 100644
--- a/PR/src/lib/layers/autodetect.c
+++ b/PR/src/lib/layers/autodetect.c
@@ -272,7 +272,7 @@ int parseFile(const char* vFile, const char* datFile, tResource* r[]) {
 /* Resources output to xml functions. Private+abstract variable */
 static FILE* unknownXmlFile=NULL;
 
-void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count) {
+void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count,const char* indexName) {
 	/* Open file if not open */
 	if (unknownXmlFile==NULL) {
 		char xmlFile[MAX_FILENAME_SIZE];
@@ -290,7 +290,7 @@ void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char*
 
 	/* Write item */
 	fprintf(unknownXmlFile,RES_XML_UNKNOWN_ITEM,
-		id,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
+		id,indexName,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
 	); /* To the xml output */
 }
 
@@ -310,7 +310,7 @@ void endUnknownXml(int optionflag, const char* backupExtension) {
 |                   Resources extra functions                   |
 \***************************************************************/
 
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension) {
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension,const char* indexName) {
 	static const char* extarray[]=RES_FILE_EXTENSIONS;
 	int pos;
 
@@ -320,7 +320,7 @@ void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short
 
 		/* set filename */
 		sprintf(vFileext,RES_XML_UNKNOWN_PATH""RES_XML_UNKNOWN_FILES,vDirExt,vDatFileName,getExtDesc(pos),typeCount[pos],extarray[pos]);
-		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos]);
+		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos],indexName);
 	} else {
 		/* set filename */
 		sprintf(vFileext,"%s/%s",vDirExt,r->path);
diff --git a/PR/src/lib/layers/idlist.c b/PR/src/lib/layers/idlist.c
index caf3179..3cc79fd 100644
--- a/PR/src/lib/layers/idlist.c
+++ b/PR/src/lib/layers/idlist.c
@@ -272,7 +272,7 @@ int parseFile(const char* vFile, const char* datFile, tResource* r[]) {
 /* Resources output to xml functions. Private+abstract variable */
 static FILE* unknownXmlFile=NULL;
 
-void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count) {
+void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count,const char* indexName) {
 	/* Open file if not open */
 	if (unknownXmlFile==NULL) {
 		char xmlFile[MAX_FILENAME_SIZE];
@@ -290,7 +290,7 @@ void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char*
 
 	/* Write item */
 	fprintf(unknownXmlFile,RES_XML_UNKNOWN_ITEM,
-		id,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
+		id,indexName,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
 	); /* To the xml output */
 }
 
@@ -310,7 +310,7 @@ void endUnknownXml(int optionflag, const char* backupExtension) {
 |                   Resources extra functions                   |
 \***************************************************************/
 
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension) {
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension,const char* indexName) {
 	static const char* extarray[]=RES_FILE_EXTENSIONS;
 	int pos;
 
@@ -320,7 +320,7 @@ void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short
 
 		/* set filename */
 		sprintf(vFileext,RES_XML_UNKNOWN_PATH""RES_XML_UNKNOWN_FILES,vDirExt,vDatFileName,getExtDesc(pos),typeCount[pos],extarray[pos]);
-		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos]);
+		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos],indexName);
 	} else {
 		/* set filename */
 		sprintf(vFileext,"%s/%s",vDirExt,r->path);
diff --git a/PR/src/lib/layers/list.c b/PR/src/lib/layers/list.c
new file mode 100644
index 0000000..37e5504
--- /dev/null
+++ b/PR/src/lib/layers/list.c
@@ -0,0 +1,125 @@
+/*  Princed V3 - Prince of Persia Level Editor for PC Version
+    Copyright (C) 2003 Princed Development Team
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    The authors of this program may be contacted at http://forum.princed.com.ar
+*/
+
+/*
+list.c: Princed Resources : Ordered Read-Only list implementarion
+\xaf\xaf\xaf\xaf\xaf\xaf
+ Copyright 2005 Princed Development Team
+  Created: 04 Jun 2005
+
+  Author: Enrique Calot <ecalot.cod@princed.com.ar>
+  Version: 1.00 (2005-Jun-04)
+
+ Note:
+  DO NOT remove this copyright notice
+*/
+
+/* Defines */
+#include <stdlib.h>
+#include "list.h"
+
+tList list_create(int dataSize,int dataCmp(void*,void*)) {
+	tList r;
+	r.size=dataSize;
+	r.cmp=dataCmp;
+	r.cursor=NULL;
+	r.first=NULL;
+	return r;
+}
+
+void list_insert(tList *list,void* data) {
+	/* I will assume sequential access is very common,
+	 * so it is very possible that data is the next element.
+	 * I will check that and if not I'll start a sequential search */
+	tListNode *node; 
+	node=(tListNode*)malloc(sizeof(tListNode));
+	node->data=malloc(list->size);
+	memcpy(node->data,data,list->size);
+
+	if (!list->cursor) {
+		/* insert first */
+		list->first=node;
+		node->next=NULL;
+	} else {
+		/* if the data was lower, start searching from the beginning */
+		if (list->cmp(list->cursor->data/*>*/,data)==GT) list->cursor=list->first;
+		/* in case the first record is higher than the data, we will insert the data as the first */
+		if ((list->cursor==list->first) && (list->cmp(list->first->data/*>=*/,data)!=LT)) {
+			node->next=list->first;
+			list->first=node;
+		} else {
+			/* search until we find the first higher record or the end of the list */
+			while ((list->cursor->next) && (list->cmp(list->cursor->next->data/*>*/,data)!=GT)) 
+				list->cursor=list->cursor->next;
+
+			node->next=list->cursor->next;
+			list->cursor->next=node;
+		}
+	}
+
+	list->cursor=node;
+}
+
+void list_drop(tList *list) {
+	tListNode* aux;
+	list->cursor=list->first;
+	while (list->cursor) {
+		aux=list->cursor->next;
+		free(list->cursor->data);
+		free(list->cursor);
+		list->cursor=aux;
+	}
+	list->first=NULL;
+}
+
+void list_nextCursor(tList* list) {
+	if (list->cursor) list->cursor=list->cursor->next;
+} 
+
+void list_firstCursor(tList* list) {
+	list->cursor=list->first;	
+} 
+
+int list_moveCursor(tList* list,void* data) {
+	if (!list->cursor) {
+		return 0;
+	} else {
+		/* if the data was lower, start searching from the beginning */
+		if (list->cmp(list->cursor->data/*>*/,data)==GT) list->cursor=list->first;
+		/* in case the first record is higher than the data, we will move the cursor to the first and return 0 */
+		if ((list->cursor==list->first) && (list->cmp(list->first->data/*>=*/,data)!=LT)) {
+			list->cursor=list->first;
+			return 0;
+		} else {
+			/* search until we find the first higher record or the end of the list */
+			while ((list->cursor->next) && (list->cmp(list->cursor->next->data/*>*/,data)!=GT)) 
+				list->cursor=list->cursor->next;
+			/* if the prior to the first higher record is equal to data, we've found it, if not 0 will be returned;
+			 * of course the cursor will be set to the prior to the first higher record in both cases */
+			return (list->cmp(list->cursor->data/*>*/,data)==EQ);
+		}
+	}
+} 
+
+const void* list_getCursor(tList* list) {
+	if (!list->cursor) return NULL;
+	return list->cursor->data;
+} 
+
diff --git a/PR/src/lib/layers/reslist.c b/PR/src/lib/layers/reslist.c
new file mode 100644
index 0000000..198d88f
--- /dev/null
+++ b/PR/src/lib/layers/reslist.c
@@ -0,0 +1,81 @@
+/*  Princed V3 - Prince of Persia Level Editor for PC Version
+    Copyright (C) 2003 Princed Development Team
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    The authors of this program may be contacted at http://forum.princed.com.ar
+*/
+
+/*
+reslist.c: Princed Resources : Ordered Read-Only list implementarion
+\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf
+ Copyright 2005 Princed Development Team
+  Created: 04 Jun 2005
+
+  Author: Enrique Calot <ecalot.cod@princed.com.ar>
+  Version: 1.00 (2005-Jun-04)
+
+ Note:
+  DO NOT remove this copyright notice
+*/
+
+/* Defines */
+#include "list.h"
+
+/* app test */
+
+int dataCmp(void* a,void* b) {
+	int ap,bp;
+	ap=*((int*)a);
+	bp=*((int*)b);
+
+	if (ap>bp) return GT;
+	if (ap<bp) return LT;
+	return EQ;	
+}
+
+
+int main(int a, char** b) {
+	tList lista;
+	const int* value;
+	int k;
+	int i;
+
+	lista=list_create(sizeof(int),dataCmp);
+
+	for (i=1;i<a;i++) {
+		k=atoi(b[i]);
+		list_insert(&lista,&k);
+	}
+
+	list_firstCursor(&lista);
+	while (value=list_getCursor(&lista)) {
+		printf("value: %d\n",*value);
+		list_nextCursor(&lista);
+	}
+
+	list_firstCursor(&lista);
+	k=100;
+	i=list_moveCursor(&lista,&k);
+	if (value=list_getCursor(&lista)) 
+		printf("value prior 100: %d %d\n",*value,i);
+	
+
+	printf("listo\n");
+	list_drop(&lista);
+	return 0;
+}
+
+
diff --git a/PR/src/lib/xml/parse.c b/PR/src/lib/xml/parse.c
index f8660a2..14dbbfb 100644
--- a/PR/src/lib/xml/parse.c
+++ b/PR/src/lib/xml/parse.c
@@ -86,6 +86,7 @@ tTag* getTagStructure() {
 	t->palette=NULL;
 	t->type=NULL;
 	t->value=NULL;
+	t->index=NULL;
 	t->version=NULL;
 	t->number=NULL;
 
@@ -105,6 +106,7 @@ void freeTagStructure(tTag* t) {
 	freeAllocation(t->palette);
 	freeAllocation(t->type);
 	freeAllocation(t->value);
+	freeAllocation(t->index);
 	freeAllocation(t->version);
 	freeAllocation(t->number);
 	free(t);
@@ -131,6 +133,7 @@ int attribFill(char* attr,char* val, tTag* t) {
 	FillAttr(t->palette,"palette");
 	FillAttr(t->type,"type");
 	FillAttr(t->value,"value");
+	FillAttr(t->value,"index");
 	FillAttr(t->version,"version");
 	FillAttr(t->number,"levelnumber"); /* levelnumber is a number alias */
 	FillAttr(t->number,"number");
@@ -363,6 +366,7 @@ tTag* makeTree(char** p,char* name, int* error,tTag* father) {
 		TotalInheritance(palette);
 		TotalInheritance(itemtype);
 		TotalInheritance(file);
+		TotalInheritance(index);
 		/* PartialConcatInheritance(tag->path,father->path,tag->value); */
 		if ((tag->value==NULL)||(tag->path!=NULL)) {
 			/* Make sure paths do exist */
diff --git a/PR/src/lib/xml/tree.c b/PR/src/lib/xml/tree.c
index caf3179..3cc79fd 100644
--- a/PR/src/lib/xml/tree.c
+++ b/PR/src/lib/xml/tree.c
@@ -272,7 +272,7 @@ int parseFile(const char* vFile, const char* datFile, tResource* r[]) {
 /* Resources output to xml functions. Private+abstract variable */
 static FILE* unknownXmlFile=NULL;
 
-void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count) {
+void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count,const char* indexName) {
 	/* Open file if not open */
 	if (unknownXmlFile==NULL) {
 		char xmlFile[MAX_FILENAME_SIZE];
@@ -290,7 +290,7 @@ void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char*
 
 	/* Write item */
 	fprintf(unknownXmlFile,RES_XML_UNKNOWN_ITEM,
-		id,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
+		id,indexName,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
 	); /* To the xml output */
 }
 
@@ -310,7 +310,7 @@ void endUnknownXml(int optionflag, const char* backupExtension) {
 |                   Resources extra functions                   |
 \***************************************************************/
 
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension) {
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension,const char* indexName) {
 	static const char* extarray[]=RES_FILE_EXTENSIONS;
 	int pos;
 
@@ -320,7 +320,7 @@ void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short
 
 		/* set filename */
 		sprintf(vFileext,RES_XML_UNKNOWN_PATH""RES_XML_UNKNOWN_FILES,vDirExt,vDatFileName,getExtDesc(pos),typeCount[pos],extarray[pos]);
-		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos]);
+		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos],indexName);
 	} else {
 		/* set filename */
 		sprintf(vFileext,"%s/%s",vDirExt,r->path);
diff --git a/PR/src/lib/xml/unknown.c b/PR/src/lib/xml/unknown.c
index caf3179..3cc79fd 100644
--- a/PR/src/lib/xml/unknown.c
+++ b/PR/src/lib/xml/unknown.c
@@ -272,7 +272,7 @@ int parseFile(const char* vFile, const char* datFile, tResource* r[]) {
 /* Resources output to xml functions. Private+abstract variable */
 static FILE* unknownXmlFile=NULL;
 
-void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count) {
+void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char* ext,char type,const char* vDirExt,unsigned short pal,const char* vFiledat,int optionflag,int count,const char* indexName) {
 	/* Open file if not open */
 	if (unknownXmlFile==NULL) {
 		char xmlFile[MAX_FILENAME_SIZE];
@@ -290,7 +290,7 @@ void AddToUnknownXml(const char* vFiledatWithPath,unsigned short id,const char*
 
 	/* Write item */
 	fprintf(unknownXmlFile,RES_XML_UNKNOWN_ITEM,
-		id,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
+		id,indexName,getExtDesc(type),count,ext,getExtDesc(type),getExtDesc(type),count
 	); /* To the xml output */
 }
 
@@ -310,7 +310,7 @@ void endUnknownXml(int optionflag, const char* backupExtension) {
 |                   Resources extra functions                   |
 \***************************************************************/
 
-void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension) {
+void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short id,const char* vFiledat, const char* vDatFileName,int optionflag, const char* backupExtension,const char* indexName) {
 	static const char* extarray[]=RES_FILE_EXTENSIONS;
 	int pos;
 
@@ -320,7 +320,7 @@ void getFileName(char* vFileext,const char* vDirExt,tResource* r,unsigned short
 
 		/* set filename */
 		sprintf(vFileext,RES_XML_UNKNOWN_PATH""RES_XML_UNKNOWN_FILES,vDirExt,vDatFileName,getExtDesc(pos),typeCount[pos],extarray[pos]);
-		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos]);
+		AddToUnknownXml(vDatFileName,id,extarray[pos],r->type,vDirExt,r->palette,vFiledat,optionflag,typeCount[pos],indexName);
 	} else {
 		/* set filename */
 		sprintf(vFileext,"%s/%s",vDirExt,r->path);
diff --git a/PR/src/xml/resources.xml b/PR/src/xml/resources.xml
index 24d2e08..d7e046e 100644
--- a/PR/src/xml/resources.xml
+++ b/PR/src/xml/resources.xml
@@ -37,13 +37,14 @@ resources.xml: Princed Resources : Resource tree
   Version: 0.7.7 (2004-Feb-28)
   Version: 0.8.1 (2004-Mar-11)
   Version: 0.8.2 (2005-Mar-26)
-  
+  Version: 1.0.0 (2005-Jun-04)
+
  Note:
   DO NOT remove this copyright notice
 -->
 
-<resources version="0.8">
- <folder name="binary" file="title.dat" path="title">
+<resources version="1.0">
+ <folder index="pop1" name="binary" file="title.dat" path="title">
   <folder path="texts" itemtype="image" palette="monochrome">
    <item value="42" path="in the absence.bmp">Text in the absence (42)</item>
    <item value="43" path="marry jaffar.bmp">Text marry jaffar (43)</item>
@@ -64,7 +65,7 @@ resources.xml: Princed Resources : Resource tree
   </folder>
  </folder>
 
- <folder itemtype="image" name="vga dungeon enviornment" file="vdungeon.dat" path="vdungeon" palette="200">
+ <folder itemtype="image" index="pop1" name="vga dungeon enviornment" file="vdungeon.dat" path="vdungeon" palette="200">
   <folder itemtype="palette" name="palette" path="palette">
    <item value="200" path="dungeon.pal">Dungeon Palette</item> 
   </folder>
@@ -308,7 +309,7 @@ resources.xml: Princed Resources : Resource tree
   
  </folder>
 
- <folder itemtype="image" name="vga palace enviornment" file="vpalace.dat" path="vpalace" palette="200">
+ <folder itemtype="image" index="pop1" name="vga palace enviornment" file="vpalace.dat" path="vpalace" palette="200">
   <folder path="palettes" name="palettes" itemtype="palette">
    <item value="200" path="palace.pal">Main palace palette</item>
    <item value="360" path="wall.pal">Wall palette for res 361</item>
@@ -593,7 +594,7 @@ resources.xml: Princed Resources : Resource tree
   </folder>
  </folder>
 
- <folder name="binary" file="pv.dat" path="pv" palette="800" itemtype="image">
+ <folder index="pop1" name="binary" file="pv.dat" path="pv" palette="800" itemtype="image">
   <folder path="jaffar" palette="850">
    <item value="850" path="palette.pal" itemtype="palette">Unknown Resource number 850</item>
    <folder path="walking">
@@ -717,7 +718,7 @@ resources.xml: Princed Resources : Resource tree
   </folder>
  </folder>
 
- <folder name="binary" file="prince.dat" path="prince" palette="150">
+ <folder index="pop1" name="binary" file="prince.dat" path="prince" palette="150">
   <item value="150" path="main.pal" itemtype="palette">Unknown Resource number 150</item>
 
   <folder name="fire animation" path="fire" itemtype="image" palette="150">
@@ -805,7 +806,7 @@ resources.xml: Princed Resources : Resource tree
  </folder>
 
 
- <folder name="binary" file="kid.dat" path="kid" palette="400" itemtype="image">
+ <folder index="pop1" name="binary" file="kid.dat" path="kid" palette="400" itemtype="image">
   <item value="400" path="kid.pal" itemtype="palette">Resource number 400</item>
   <folder path="running">
    <item value="401" path="frame01.bmp">Image frame01 (401)</item>
@@ -1068,7 +1069,7 @@ resources.xml: Princed Resources : Resource tree
   </folder>
  </folder>
 
- <folder name="midi sound" file="midisnd1.dat" path="midisnd1" itemtype="midi">
+ <folder index="pop1" name="midi sound" file="midisnd1.dat" path="midisnd1" itemtype="midi">
   <item value="10024" path="death 1.mid">Unknown Resource number 10024</item>
   <item value="10025" path="presentation.mid">Unknown Resource number 10025</item>
   <item value="10026" path="arrived to princess.mid">Unknown Resource number 10026</item>
@@ -1087,7 +1088,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="10043" path="guard death 2.mid">Unknown Resource number 10043</item>
  </folder>
 
- <folder name="midi sound 2" file="midisnd2.dat" path="midisnd2" itemtype="midi">
+ <folder index="pop1" name="midi sound 2" file="midisnd2.dat" path="midisnd2" itemtype="midi">
   <item value="10050" path="princess waiting 3.mid">Unknown Resource number 10050</item>
   <item value="10052" path="story3.mid">Unknown Resource number 10052</item>
   <item value="10053" path="story2 jaffar and clock apprearing.mid">Unknown Resource number 10053</item>
@@ -1096,7 +1097,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="10056" path="winning theme.mid">Unknown Resource number 10056</item>
  </folder>
 
- <folder name="digital sound" file="digisnd1.dat" path="digisnd1" itemtype="wave">
+ <folder index="pop1" name="digital sound" file="digisnd1.dat" path="digisnd1" itemtype="wave">
   <item value="10000" path="prince crashing into the floor.wav">crash with the flood</item>
   <item value="10002" path="tile crashing into the floor.wav">Unknown Resource number 10002</item>
   <item value="10003" path="door tile pressed 1.wav">Unknown Resource number 10003</item>
@@ -1118,7 +1119,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="10022" path="door gate closing slow 2.wav">Unknown Resource number 10022</item>
   <item value="10023" path="running 2.wav">Unknown Resource number 10023</item>
  </folder>
- <folder name="binary" file="digisnd2.dat" path="digisnd2" itemtype="wave">
+ <folder index="pop1" name="binary" file="digisnd2.dat" path="digisnd2" itemtype="wave">
   <item value="10044" path="skel alive.wav">Unknown Resource number 10044</item>
   <item value="10045" path="mirror.wav">Unknown Resource number 10045</item>
   <item value="10046" path="something chopped.wav">Unknown Resource number 10046</item>
@@ -1127,7 +1128,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="10049" path="spikes.wav">Unknown Resource number 10049</item>
   <item value="10051" path="res10051.wav">Unknown Resource number 10051</item>
  </folder>
- <folder name="binary" file="digisnd3.dat" path="digisnd3" itemtype="wave">
+ <folder index="pop1" name="binary" file="digisnd3.dat" path="digisnd3" itemtype="wave">
   <item value="10001" path="falling.wav">Unknown Resource number 10001</item>
   <item value="10014" path="res10014.wav">Unknown Resource number 10014</item>
   <item value="10015" path="res10015.bin" itemtype="binary">Unknown Resource number 10015</item>
@@ -1135,7 +1136,7 @@ resources.xml: Princed Resources : Resource tree
  </folder>
 
  <!-- not processed -->
- <folder name="binary" file="ibm_snd1.dat" path="ibm_snd1" itemtype="pcspeaker">
+ <folder index="pop1" name="binary" file="ibm_snd1.dat" path="ibm_snd1" itemtype="pcspeaker">
   <item value="10000" path="snd00.pcs">Unknown Resource number 10000</item>
   <item value="10001" path="snd01.bin" itemtype="binary">Unknown Resource number 10001</item>
   <item value="10002" path="snd02.pcs">Unknown Resource number 10002</item>
@@ -1181,7 +1182,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="10042" path="snd42.bin" itemtype="binary">Unknown Resource number 10042</item>
   <item value="10043" path="snd43.pcs">Unknown Resource number 10043</item>
  </folder>
- <folder name="binary" file="ibm_snd2.dat" path="ibm_snd2" itemtype="pcspeaker">
+ <folder index="pop1" name="binary" file="ibm_snd2.dat" path="ibm_snd2" itemtype="pcspeaker">
   <item value="10044" path="snd44.pcs">Unknown Resource number 10044</item>
   <item value="10045" path="snd45.pcs">Unknown Resource number 10045</item>
   <item value="10046" path="snd46.pcs">Unknown Resource number 10046</item>
@@ -1199,7 +1200,7 @@ resources.xml: Princed Resources : Resource tree
 
  <!-- guards -->
 
- <folder name="binary" file="skel.dat" path="skel" palette="750">
+ <folder index="pop1" name="binary" file="skel.dat" path="skel" palette="750">
   <item value="750" path="res750.pal" itemtype="palette">Unknown Resource number 750</item>
   <item value="751" path="res751.bin" itemtype="binary">Unknown Resource number 751</item>
   <item value="752" path="res752.bin" itemtype="binary">Unknown Resource number 752</item>
@@ -1231,7 +1232,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="778" path="chopped.bmp" itemtype="image">Unknown Resource number 778</item>
  </folder>
 
- <folder name="binary" file="vizier.dat" path="vizier" palette="750">
+ <folder index="pop1" name="binary" file="vizier.dat" path="vizier" palette="750">
   <item value="750" path="res750.pal" itemtype="palette">Unknown Resource number 750</item>
   <item value="751" path="hit points.bmp" itemtype="image">Unknown Resource number 751</item>
   <item value="752" path="splash.bmp" itemtype="image">Unknown Resource number 752</item>
@@ -1269,7 +1270,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="784" path="res784.bmp" itemtype="image">Unknown Resource number 784</item>
  </folder>
 
- <folder name="binary" file="shadow.dat" path="shadow" palette="750">
+ <folder index="pop1" name="binary" file="shadow.dat" path="shadow" palette="750">
   <item value="750" path="res750.pal" itemtype="palette">Unknown Resource number 750</item>
   <item value="751" path="hit points.bmp" itemtype="image">Unknown Resource number 751</item>
   <item value="752" path="splash.bmp" itemtype="image">Unknown Resource number 752</item>
@@ -1305,7 +1306,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="782" path="res782.bin" itemtype="binary">Unknown Resource number 782</item>
  </folder>
 
- <folder name="binary" file="fat.dat" path="fat" palette="750">
+ <folder index="pop1" name="binary" file="fat.dat" path="fat" palette="750">
   <item value="750" path="res750.pal" itemtype="palette">Unknown Resource number 750</item>
   <item value="751" path="hit points.bmp" itemtype="image">Unknown Resource number 751</item>
   <item value="752" path="splash.bmp" itemtype="image">Unknown Resource number 752</item>
@@ -1342,7 +1343,7 @@ resources.xml: Princed Resources : Resource tree
   <item value="783" path="res783.bmp" itemtype="image">Unknown Resource number 783</item>
   <item value="784" path="res784.bmp" itemtype="image">Unknown Resource number 784</item>
  </folder>
- <folder name="binary" file="guard.dat" path="guards" palette="0">
+ <folder index="pop1" name="binary" file="guard.dat" path="guards" palette="0">
   <item value="751" path="hit points.bmp" itemtype="image">Unknown Resource number 751</item>
   <item value="752" path="splash.bmp" itemtype="image">Unknown Resource number 752</item>
   <item value="753" path="res753.bmp" itemtype="image">Unknown Resource number 753</item>
@@ -1378,14 +1379,14 @@ resources.xml: Princed Resources : Resource tree
   <item value="783" path="res783.bmp" itemtype="image">Unknown Resource number 783</item>
   <item value="784" path="res784.bmp" itemtype="image">Unknown Resource number 784</item>
  </folder>
- <folder name="binary" file="guard1.dat" path="guards" palette="750">
+ <folder index="pop1" name="binary" file="guard1.dat" path="guards" palette="750">
   <item value="750" path="palette1.pal" itemtype="palette">Unknown Resource number 750</item>
  </folder>
- <folder name="binary" file="guard2.dat" path="guards" palette="750">
+ <folder index="pop1" name="binary" file="guard2.dat" path="guards" palette="750">
   <item value="750" path="palette2.pal" itemtype="palette">Unknown Resource number 750</item>
  </folder>
 
- <folder name="binary" file="levels.dat" itemtype="level" path="levels">
+ <folder index="pop1" name="binary" file="levels.dat" itemtype="level" path="levels">
   <item value="2000" number="0" path="demo.plv">Demo level</item>
   <item value="2001" number="1" path="level1.plv">Level 1</item>
   <item value="2002" number="2" path="level2.plv">Level 2</item>
@@ -1404,13 +1405,178 @@ resources.xml: Princed Resources : Resource tree
   <item value="2015" number="15" path="potions.plv">Potions level</item>
  </folder>
 
+ <folder index="pahs" name="the pop2 bird guard" file="bird.dat" itemtype="image" path="bird" palette="750">
+  <item value="750" index="mark" path="binary01.bin" itemtype="binary">Unknown binary 1</item>
+  <item value="750" index="clap" path="binary02.bin" itemtype="binary">Unknown binary 2</item>
+  <item value="750" index="slap" path="bird.pal" itemtype="palette">The bird palette</item>
+  <item value="751" path="image01.bmp" itemtype="image">Unknown image 1</item>
+  <item value="752" path="image02.bmp" itemtype="image">Unknown image 2</item>
+  <item value="753" path="image03.bmp" itemtype="image">Unknown image 3</item>
+  <item value="754" path="image04.bmp" itemtype="image">Unknown image 4</item>
+  <item value="755" path="image05.bmp" itemtype="image">Unknown image 5</item>
+  <item value="756" path="image06.bmp" itemtype="image">Unknown image 6</item>
+  <item value="757" path="image07.bmp" itemtype="image">Unknown image 7</item>
+  <item value="758" path="image08.bmp" itemtype="image">Unknown image 8</item>
+  <item value="759" path="image09.bmp" itemtype="image">Unknown image 9</item>
+  <item value="760" path="image10.bmp" itemtype="image">Unknown image 10</item>
+  <item value="761" path="image11.bmp" itemtype="image">Unknown image 11</item>
+  <item value="762" path="image12.bmp" itemtype="image">Unknown image 12</item>
+  <item value="763" path="image13.bmp" itemtype="image">Unknown image 13</item>
+  <item value="764" path="image14.bmp" itemtype="image">Unknown image 14</item>
+  <item value="765" path="image15.bmp" itemtype="image">Unknown image 15</item>
+  <item value="766" path="image16.bmp" itemtype="image">Unknown image 16</item>
+  <item value="767" path="image17.bmp" itemtype="image">Unknown image 17</item>
+  <item value="768" path="image18.bmp" itemtype="image">Unknown image 18</item>
+  <item value="769" path="image19.bmp" itemtype="image">Unknown image 19</item>
+  <item value="770" path="image20.bmp" itemtype="image">Unknown image 20</item>
+  <item value="771" path="image21.bmp" itemtype="image">Unknown image 21</item>
+  <item value="772" path="image22.bmp" itemtype="image">Unknown image 22</item>
+  <item value="773" path="image23.bmp" itemtype="image">Unknown image 23</item>
+  <item value="774" path="image24.bmp" itemtype="image">Unknown image 24</item>
+  <item value="775" path="image25.bmp" itemtype="image">Unknown image 25</item>
+  <item value="776" path="image26.bmp" itemtype="image">Unknown image 26</item>
+  <item value="777" path="image27.bmp" itemtype="image">Unknown image 27</item>
+  <item value="778" path="image28.bmp" itemtype="image">Unknown image 28</item>
+  <item value="779" path="image29.bmp" itemtype="image">Unknown image 29</item>
+  <item value="780" path="image30.bmp" itemtype="image">Unknown image 30</item>
+  <item value="781" path="image31.bmp" itemtype="image">Unknown image 31</item>
+  <item value="782" path="image32.bmp" itemtype="image">Unknown image 32</item>
+  <item value="783" path="image33.bmp" itemtype="image">Unknown image 33</item>
+  <item value="784" path="image34.bmp" itemtype="image">Unknown image 34</item>
+  <item value="785" path="image35.bmp" itemtype="image">Unknown image 35</item>
+  <item value="786" path="image36.bmp" itemtype="image">Unknown image 36</item>
+  <item value="787" path="image37.bmp" itemtype="image">Unknown image 37</item>
+  <item value="788" path="image38.bmp" itemtype="image">Unknown image 38</item>
+  <item value="789" path="image39.bmp" itemtype="image">Unknown image 39</item>
+  <item value="790" path="image40.bmp" itemtype="image">Unknown image 40</item>
+  <item value="791" path="pcspeaker01.pcs" itemtype="pcspeaker">Unknown pcspeaker 1</item>
+  <item value="792" path="pcspeaker02.pcs" itemtype="pcspeaker">Unknown pcspeaker 2</item>
+  <item value="793" path="pcspeaker03.pcs" itemtype="pcspeaker">Unknown pcspeaker 3</item>
+  <item value="794" path="pcspeaker04.pcs" itemtype="pcspeaker">Unknown pcspeaker 4</item>
+  <item value="795" path="pcspeaker05.pcs" itemtype="pcspeaker">Unknown pcspeaker 5</item>
+  <item value="796" path="pcspeaker06.pcs" itemtype="pcspeaker">Unknown pcspeaker 6</item>
+  <item value="797" path="pcspeaker07.pcs" itemtype="pcspeaker">Unknown pcspeaker 7</item>
+  <item value="798" path="pcspeaker08.pcs" itemtype="pcspeaker">Unknown pcspeaker 8</item>
+  <item value="799" path="pcspeaker09.pcs" itemtype="pcspeaker">Unknown pcspeaker 9</item>
+  <item value="800" path="pcspeaker10.pcs" itemtype="pcspeaker">Unknown pcspeaker 10</item>
+  <item value="801" path="pcspeaker11.pcs" itemtype="pcspeaker">Unknown pcspeaker 11</item>
+  <item value="802" path="pcspeaker12.pcs" itemtype="pcspeaker">Unknown pcspeaker 12</item>
+  <item value="803" path="pcspeaker13.pcs" itemtype="pcspeaker">Unknown pcspeaker 13</item>
+  <item value="804" path="pcspeaker14.pcs" itemtype="pcspeaker">Unknown pcspeaker 14</item>
+  <item value="805" path="pcspeaker15.pcs" itemtype="pcspeaker">Unknown pcspeaker 15</item>
+  <item value="806" path="pcspeaker16.pcs" itemtype="pcspeaker">Unknown pcspeaker 16</item>
+  <item value="807" path="pcspeaker17.pcs" itemtype="pcspeaker">Unknown pcspeaker 17</item>
+  <item value="808" path="pcspeaker18.pcs" itemtype="pcspeaker">Unknown pcspeaker 18</item>
+  <item value="809" path="pcspeaker19.pcs" itemtype="pcspeaker">Unknown pcspeaker 19</item>
+  <item value="810" path="pcspeaker20.pcs" itemtype="pcspeaker">Unknown pcspeaker 20</item>
+  <item value="811" path="pcspeaker21.pcs" itemtype="pcspeaker">Unknown pcspeaker 21</item>
+  <item value="812" path="pcspeaker22.pcs" itemtype="pcspeaker">Unknown pcspeaker 22</item>
+  <item value="813" path="pcspeaker23.pcs" itemtype="pcspeaker">Unknown pcspeaker 23</item>
+  <item value="814" path="pcspeaker24.pcs" itemtype="pcspeaker">Unknown pcspeaker 24</item>
+  <item value="815" path="pcspeaker25.pcs" itemtype="pcspeaker">Unknown pcspeaker 25</item>
+  <item value="816" path="pcspeaker26.pcs" itemtype="pcspeaker">Unknown pcspeaker 26</item>
+  <item value="817" path="pcspeaker27.pcs" itemtype="pcspeaker">Unknown pcspeaker 27</item>
+  <item value="818" path="pcspeaker28.pcs" itemtype="pcspeaker">Unknown pcspeaker 28</item>
+  <item value="819" path="pcspeaker29.pcs" itemtype="pcspeaker">Unknown pcspeaker 29</item>
+  <item value="820" path="pcspeaker30.pcs" itemtype="pcspeaker">Unknown pcspeaker 30</item>
+  <item value="821" path="pcspeaker31.pcs" itemtype="pcspeaker">Unknown pcspeaker 31</item>
+  <item value="822" path="pcspeaker32.pcs" itemtype="pcspeaker">Unknown pcspeaker 32</item>
+  <item value="823" path="pcspeaker33.pcs" itemtype="pcspeaker">Unknown pcspeaker 33</item>
+  <item value="824" path="pcspeaker34.pcs" itemtype="pcspeaker">Unknown pcspeaker 34</item>
+  <item value="825" path="pcspeaker35.pcs" itemtype="pcspeaker">Unknown pcspeaker 35</item>
+  <item value="826" path="pcspeaker36.pcs" itemtype="pcspeaker">Unknown pcspeaker 36</item>
+  <item value="827" path="pcspeaker37.pcs" itemtype="pcspeaker">Unknown pcspeaker 37</item>
+  <item value="828" path="pcspeaker38.pcs" itemtype="pcspeaker">Unknown pcspeaker 38</item>
+  <item value="829" path="pcspeaker39.pcs" itemtype="pcspeaker">Unknown pcspeaker 39</item>
+  <item value="830" path="pcspeaker40.pcs" itemtype="pcspeaker">Unknown pcspeaker 40</item>
+  <item value="831" path="pcspeaker41.pcs" itemtype="pcspeaker">Unknown pcspeaker 41</item>
+  <item value="832" path="pcspeaker42.pcs" itemtype="pcspeaker">Unknown pcspeaker 42</item>
+  <item value="833" path="pcspeaker43.pcs" itemtype="pcspeaker">Unknown pcspeaker 43</item>
+  <item value="834" path="pcspeaker44.pcs" itemtype="pcspeaker">Unknown pcspeaker 44</item>
+  <item value="835" path="pcspeaker45.pcs" itemtype="pcspeaker">Unknown pcspeaker 45</item>
+  <item value="836" path="pcspeaker46.pcs" itemtype="pcspeaker">Unknown pcspeaker 46</item>
+  <item value="837" path="pcspeaker47.pcs" itemtype="pcspeaker">Unknown pcspeaker 47</item>
+  <item value="838" path="pcspeaker48.pcs" itemtype="pcspeaker">Unknown pcspeaker 48</item>
+  <item value="839" path="pcspeaker49.pcs" itemtype="pcspeaker">Unknown pcspeaker 49</item>
+  <item value="840" path="pcspeaker50.pcs" itemtype="pcspeaker">Unknown pcspeaker 50</item>
+  <item value="841" path="pcspeaker51.pcs" itemtype="pcspeaker">Unknown pcspeaker 51</item>
+  <item value="842" path="pcspeaker52.pcs" itemtype="pcspeaker">Unknown pcspeaker 52</item>
+  <item value="843" path="pcspeaker53.pcs" itemtype="pcspeaker">Unknown pcspeaker 53</item>
+  <item value="844" path="pcspeaker54.pcs" itemtype="pcspeaker">Unknown pcspeaker 54</item>
+  <item value="845" path="pcspeaker55.pcs" itemtype="pcspeaker">Unknown pcspeaker 55</item>
+  <item value="846" path="pcspeaker56.pcs" itemtype="pcspeaker">Unknown pcspeaker 56</item>
+  <item value="847" path="pcspeaker57.pcs" itemtype="pcspeaker">Unknown pcspeaker 57</item>
+  <item value="848" path="pcspeaker58.pcs" itemtype="pcspeaker">Unknown pcspeaker 58</item>
+  <item value="849" path="pcspeaker59.pcs" itemtype="pcspeaker">Unknown pcspeaker 59</item>
+  <item value="891" path="image41.bmp" itemtype="image">Unknown image 41</item>
+  <item value="892" path="image42.bmp" itemtype="image">Unknown image 42</item>
+  <item value="893" path="image43.bmp" itemtype="image">Unknown image 43</item>
+  <item value="894" path="image44.bmp" itemtype="image">Unknown image 44</item>
+  <item value="895" path="image45.bmp" itemtype="image">Unknown image 45</item>
+  <item value="896" path="image46.bmp" itemtype="image">Unknown image 46</item>
+  <item value="897" path="image47.bmp" itemtype="image">Unknown image 47</item>
+  <item value="898" path="image48.bmp" itemtype="image">Unknown image 48</item>
+  <item value="899" path="image49.bmp" itemtype="image">Unknown image 49</item>
+  <item value="900" path="image50.bmp" itemtype="image">Unknown image 50</item>
+  <item value="901" path="image51.bmp" itemtype="image">Unknown image 51</item>
+  <item value="902" path="image52.bmp" itemtype="image">Unknown image 52</item>
+  <item value="903" path="image53.bmp" itemtype="image">Unknown image 53</item>
+  <item value="904" path="image54.bmp" itemtype="image">Unknown image 54</item>
+  <item value="905" path="image55.bmp" itemtype="image">Unknown image 55</item>
+  <item value="906" path="image56.bmp" itemtype="image">Unknown image 56</item>
+  <item value="907" path="image57.bmp" itemtype="image">Unknown image 57</item>
+  <item value="908" path="image58.bmp" itemtype="image">Unknown image 58</item>
+  <item value="909" path="image59.bmp" itemtype="image">Unknown image 59</item>
+  <item value="910" path="image60.bmp" itemtype="image">Unknown image 60</item>
+  <item value="911" path="image61.bmp" itemtype="image">Unknown image 61</item>
+  <item value="912" path="image62.bmp" itemtype="image">Unknown image 62</item>
+  <item value="913" path="image63.bmp" itemtype="image">Unknown image 63</item>
+  <item value="914" path="image64.bmp" itemtype="image">Unknown image 64</item>
+  <item value="915" path="image65.bmp" itemtype="image">Unknown image 65</item>
+  <item value="916" path="image66.bmp" itemtype="image">Unknown image 66</item>
+  <item value="917" path="image67.bmp" itemtype="image">Unknown image 67</item>
+  <item value="918" path="image68.bmp" itemtype="image">Unknown image 68</item>
+  <item value="919" path="image69.bmp" itemtype="image">Unknown image 69</item>
+  <item value="920" path="image70.bmp" itemtype="image">Unknown image 70</item>
+  <item value="921" path="image71.bmp" itemtype="image">Unknown image 71</item>
+  <item value="922" path="image72.bmp" itemtype="image">Unknown image 72</item>
+  <item value="923" path="image73.bmp" itemtype="image">Unknown image 73</item>
+  <item value="924" path="image74.bmp" itemtype="image">Unknown image 74</item>
+  <item value="925" path="image75.bmp" itemtype="image">Unknown image 75</item>
+  <item value="926" path="image76.bmp" itemtype="image">Unknown image 76</item>
+  <item value="927" path="image77.bmp" itemtype="image">Unknown image 77</item>
+  <item value="928" path="image78.bmp" itemtype="image">Unknown image 78</item>
+  <item value="929" path="image79.bmp" itemtype="image">Unknown image 79</item>
+  <item value="930" path="image80.bmp" itemtype="image">Unknown image 80</item>
+  <item value="931" path="image81.bmp" itemtype="image">Unknown image 81</item>
+  <item value="932" path="image82.bmp" itemtype="image">Unknown image 82</item>
+  <item value="933" path="image83.bmp" itemtype="image">Unknown image 83</item>
+  <item value="934" path="image84.bmp" itemtype="image">Unknown image 84</item>
+  <item value="935" path="image85.bmp" itemtype="image">Unknown image 85</item>
+  <item value="936" path="image86.bmp" itemtype="image">Unknown image 86</item>
+  <item value="937" path="image87.bmp" itemtype="image">Unknown image 87</item>
+  <item value="938" path="image88.bmp" itemtype="image">Unknown image 88</item>
+  <item value="939" path="image89.bmp" itemtype="image">Unknown image 89</item>
+  <item value="940" path="image90.bmp" itemtype="image">Unknown image 90</item>
+  <item value="941" path="image91.bmp" itemtype="image">Unknown image 91</item>
+  <item value="942" path="image92.bmp" itemtype="image">Unknown image 92</item>
+  <item value="943" path="image93.bmp" itemtype="image">Unknown image 93</item>
+  <item value="944" path="image94.bmp" itemtype="image">Unknown image 94</item>
+  <item value="945" path="image95.bmp" itemtype="image">Unknown image 95</item>
+  <item value="946" path="image96.bmp" itemtype="image">Unknown image 96</item>
+  <item value="947" path="image97.bmp" itemtype="image">Unknown image 97</item>
+  <item value="948" path="image98.bmp" itemtype="image">Unknown image 98</item>
+  <item value="949" path="image99.bmp" itemtype="image">Unknown image 99</item>
+  <item value="750" path="binary04.bin" itemtype="binary">Unknown binary 4</item>
+ </folder>
+
 </resources>
 
 <!--
 File Format:
 
 Attributes:
- itemtypes:
+ resources:
   o version: the version of the file (mandatory)
  folder:
   o type (inheritable): the type of the folder
@@ -1445,6 +1611,7 @@ Attributes:
   o file (inheritable): the file where the item is located
  item:
   o value: the item ID (mandatory)
+  o index: the index name (mandatory)
   o file: see itemtype file (mandatory but may be inherited from a folder)
   o itemtype: see folder itemtype. May be inherited, omissions means autodetect
   o palette: see folder palette. Mandatory for image types but may be inherited,