--- a/hedgewars/uFLData.pas Wed Oct 01 01:20:05 2014 +0400
+++ b/hedgewars/uFLData.pas Thu Oct 02 00:48:14 2014 +0400
@@ -9,13 +9,49 @@
uses uPhysFSLayer;
function getThemesList: PPChar; cdecl;
+var list, res, tmp: PPChar;
+ i, size: Longword;
begin
- getThemesList:= pfsEnumerateFiles('Themes')
+ list:= pfsEnumerateFiles('Themes');
+ size:= 0;
+ tmp:= list;
+ while tmp^ <> nil do
+ begin
+ inc(size);
+ inc(tmp)
+ end;
+
+ res:= GetMem((3 + size) * sizeof(PChar));
+ res^:= PChar(list);
+ inc(res);
+ res^:= PChar(res + size + 2);
+ inc(res);
+
+ getThemesList:= res;
+
+ for i:= 1 to size do
+ begin
+ if pfsExists('/Themes/' + shortstring(list^) + '/icon.png') then
+ begin
+ res^:= list^;
+ inc(res)
+ end;
+
+ inc(list)
+ end;
+
+ res^:= nil
end;
procedure freeThemesList(list: PPChar); cdecl;
+var listEnd: PPChar;
begin
- pfsFreeList(list)
+ dec(list);
+ listEnd:= PPChar(list^);
+ dec(list);
+
+ pfsFreeList(PPChar(list^));
+ freeMem(list, (listEnd - list) * sizeof(PChar))
end;
function getThemeIcon(themeName: PChar; buffer: PChar; buflen: Longword): Longword; cdecl;