# HG changeset patch
# User koda
# Date 1325811064 -3600
# Node ID a2f39cb9af62f18939f2790fd25e61fd64fee692
# Parent  4531a2b141ba1de137da5d485a1758b6d88cfe49
fix a couple of loose ends: sdl_mixer is informed of that OGG is provided by Tremor with its own macro, there is no more a segfault on Tremor cleanup, added new event type and timestamp entry for SDL, removed spurious characters from the japanese translation, uSound errors now are output with SDLTry, uSound doesn't need sound preloading any more

diff -r 4531a2b141ba -r a2f39cb9af62 hedgewars/SDLh.pas
--- a/hedgewars/SDLh.pas	Wed Jan 04 02:06:44 2012 +0100
+++ b/hedgewars/SDLh.pas	Fri Jan 06 01:51:04 2012 +0100
@@ -148,6 +148,7 @@
     SDL_DOLLARRECORD      = $801;
     SDL_MULTIGESTURE      = $802;
     SDL_CLIPBOARDUPDATE   = $900;
+    SDL_DROPFILE          = $1000;
     SDL_USEREVENT         = $8000;
     SDL_LASTEVENT         = $FFFF;
     // no compatibility events $7000
@@ -443,6 +444,7 @@
 
     TSDL_WindowEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         windowID: LongWord;
         event: Byte;
         padding1, padding2, padding3: Byte;
@@ -452,6 +454,7 @@
     // available in sdl12 but not exposed
     TSDL_TextEditingEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         windowID: LongWord;
         text: array[0..31] of Byte;
         start, lenght: LongInt;
@@ -460,12 +463,14 @@
     // available in sdl12 but not exposed
     TSDL_TextInputEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         windowID: LongWord;
         text: array[0..31] of Byte;
         end;
 
     TSDL_TouchFingerEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         windowId: LongWord;
         touchId: Int64;
         fingerId: Int64;
@@ -477,6 +482,7 @@
 
     TSDL_TouchButtonEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         windowId: LongWord;
         touchId: Int64;
         state, button, padding1, padding2: Byte;
@@ -484,6 +490,7 @@
 
     TSDL_MultiGestureEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         windowId: LongWord;
         touchId: Int64;
         dTheta, dDist, x, y: Single;
@@ -492,6 +499,7 @@
 
     TSDL_DollarGestureEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         windowId: LongWord;
         touchId: Int64;
         gesturedId: Int64;
@@ -499,8 +507,15 @@
         error: Single;
         end;
 
+    TSDL_DropEvent = record
+        type_: LongWord;
+        timestamp: LongWord;
+        filename: PChar;
+        end;
+
     TSDL_SysWMEvent = record
         type_: LongWord;
+        timestamp: LongWord;
         msg: Pointer;
         end;
 {$ELSE}
@@ -526,6 +541,7 @@
     TSDL_KeyboardEvent = record
 {$IFDEF SDL13}
         type_: LongWord;
+        timestamp: LongWord;
         windowID: LongWord;
         state, repeat_, padding2, padding3: Byte;
 {$ELSE}
@@ -537,6 +553,7 @@
     TSDL_MouseMotionEvent = record
 {$IFDEF SDL13}
         type_: LongWord;
+        timestamp: LongWord;
         windowID: LongWord;
         state, padding1, padding2, padding3: Byte;
         x, y, z, xrel, yrel : LongInt;
@@ -549,6 +566,7 @@
     TSDL_MouseButtonEvent = record
 {$IFDEF SDL13}
         type_: LongWord;
+        timestamp: LongWord;
         windowID: LongWord;
         buttonm, state, padding1, padding2: Byte;
         x, y: LongInt;
@@ -561,6 +579,7 @@
     TSDL_MouseWheelEvent = record
         type_: LongWord;
 {$IFDEF SDL13}
+        timestamp: LongWord;
         windowID: LongWord;
 {$ELSE}
         which: Byte;
@@ -569,7 +588,12 @@
         end;
 
     TSDL_JoyAxisEvent = record
-        type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
+{$IFDEF SDL13}
+        type_: LongWord;
+        timestamp: LongWord;
+{$ELSE}
+        type_: Byte;
+{$ENDIF}
         which: Byte;
         axis: Byte;
 {$IFDEF SDL13}
@@ -581,7 +605,12 @@
         end;
 
     TSDL_JoyBallEvent = record
-        type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
+{$IFDEF SDL13}
+        type_: LongWord;
+        timestamp: LongWord;
+{$ELSE}
+        type_: Byte;
+{$ENDIF}
         which: Byte;
         ball: Byte;
 {$IFDEF SDL13}
@@ -593,7 +622,12 @@
         end;
 
     TSDL_JoyHatEvent = record
-        type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
+{$IFDEF SDL13}
+        type_: LongWord;
+        timestamp: LongWord;
+{$ELSE}
+        type_: Byte;
+{$ENDIF}
         which: Byte;
         hat: Byte;
         value: Byte;
@@ -603,7 +637,12 @@
         end;
 
     TSDL_JoyButtonEvent = record
-        type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
+{$IFDEF SDL13}
+        type_: LongWord;
+        timestamp: LongWord;
+{$ELSE}
+        type_: Byte;
+{$ENDIF}
         which: Byte;
         button: Byte;
         state: Byte;
@@ -613,12 +652,18 @@
         end;
 
     TSDL_QuitEvent = record
-        type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
+{$IFDEF SDL13}
+        type_: LongWord;
+        timestamp: LongWord;
+{$ELSE}
+        type_: Byte;
+{$ENDIF}
         end;
 
     TSDL_UserEvent = record
 {$IFDEF SDL13}
         type_: LongWord;
+        timestamp: LongWord;
         windowID: LongWord;
 {$ELSE}
         type_: Byte;
@@ -656,6 +701,7 @@
             SDL_TOUCHBUTTONDOWN: (tbutton: TSDL_TouchButtonEvent);
             SDL_MULTIGESTURE: (mgesture: TSDL_MultiGestureEvent);
             SDL_DOLLARGESTURE: (dgesture: TSDL_DollarGestureEvent);
+            SDL_DROPFILE: (drop: TSDL_DropEvent);
             SDL_ALLEVENTS: (foo: shortstring);
 {$ELSE}
         case Byte of
diff -r 4531a2b141ba -r a2f39cb9af62 hedgewars/uSound.pas
--- a/hedgewars/uSound.pas	Wed Jan 04 02:06:44 2012 +0100
+++ b/hedgewars/uSound.pas	Fri Jan 06 01:51:04 2012 +0100
@@ -217,7 +217,6 @@
 procedure SoundLoad;
 var i: TSound;
     t: Longword;
-    s:shortstring;
 begin
     if not isSoundEnabled then exit;
 
@@ -229,10 +228,11 @@
             for i:= Low(TSound) to High(TSound) do
                 voicepacks[t].chunks[i]:= nil;
 
-    // preload all the big sound files (>32k) that would otherwise lockup the game
     for i:= Low(TSound) to High(TSound) do
     begin
         defVoicepack^.chunks[i]:= nil;
+        (* this is not necessary when SDL_mixer is compiled with USE_OGG_TREMOR
+        // preload all the big sound files (>32k) that would otherwise lockup the game
         if (i in [sndBeeWater, sndBee, sndCake, sndHellishImpact1, sndHellish, sndHomerun,
                   sndMolotov, sndMortar, sndRideOfTheValkyries, sndYoohoo])
             and (Soundz[i].Path <> ptVoices) and (Soundz[i].FileName <> '') then
@@ -241,9 +241,9 @@
             if not FileExists(s) then s:= Pathz[Soundz[i].Path] + '/' + Soundz[i].FileName;
             WriteToConsole(msgLoading + s + ' ');
             defVoicepack^.chunks[i]:= Mix_LoadWAV_RW(SDL_RWFromFile(Str2PChar(s), 'rb'), 1);
-            TryDo(defVoicepack^.chunks[i] <> nil, msgFailed, true);
+            SDLTry(defVoicepack^.chunks[i] <> nil, true);
             WriteLnToConsole(msgOK);
-        end;
+        end;*)
     end;
 
 end;
@@ -295,7 +295,7 @@
             if not FileExists(s) then s:= Pathz[Soundz[snd].Path] + '/' + Soundz[snd].FileName;
             WriteToConsole(msgLoading + s + ' ');
             defVoicepack^.chunks[snd]:= Mix_LoadWAV_RW(SDL_RWFromFile(Str2PChar(s), 'rb'), 1);
-            TryDo(defVoicepack^.chunks[snd] <> nil, msgFailed, true);
+            SDLTry(defVoicepack^.chunks[snd] <> nil, true);
             WriteLnToConsole(msgOK);
             end;
         lastChan[snd]:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], 0, -1)
@@ -387,7 +387,7 @@
             if not FileExists(s) then s:= Pathz[Soundz[snd].Path] + '/' + Soundz[snd].FileName;
             WriteToConsole(msgLoading + s + ' ');
             defVoicepack^.chunks[snd]:= Mix_LoadWAV_RW(SDL_RWFromFile(Str2PChar(s), 'rb'), 1);
-            TryDo(defVoicepack^.chunks[snd] <> nil, msgFailed, true);
+            SDLTry(defVoicepack^.chunks[snd] <> nil, true);
             WriteLnToConsole(msgOK);
         end;
         if fadems > 0 then
@@ -435,7 +435,7 @@
     WriteToConsole(msgLoading + s + ' ');
 
     Mus:= Mix_LoadMUS(Str2PChar(s));
-    TryDo(Mus <> nil, msgFailed, false);
+    SDLTry(Mus <> nil, false);
     WriteLnToConsole(msgOK);
 
     SDLTry(Mix_FadeInMusic(Mus, -1, 3000) <> -1, false)
diff -r 4531a2b141ba -r a2f39cb9af62 misc/libtremor/tremor/vorbisfile.c
--- a/misc/libtremor/tremor/vorbisfile.c	Wed Jan 04 02:06:44 2012 +0100
+++ b/misc/libtremor/tremor/vorbisfile.c	Fri Jan 06 01:51:04 2012 +0100
@@ -739,7 +739,8 @@
     if(vf->offsets)_ogg_free(vf->offsets);
     ogg_sync_destroy(vf->oy);
 
-    if(vf->datasource)(vf->callbacks.close_func)(vf->datasource);
+    if(vf->datasource && vf->callbacks.close_func)
+      (vf->callbacks.close_func)(vf->datasource);
     memset(vf,0,sizeof(*vf));
   }
 #ifdef DEBUG_LEAKS
diff -r 4531a2b141ba -r a2f39cb9af62 project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Wed Jan 04 02:06:44 2012 +0100
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Fri Jan 06 01:51:04 2012 +0100
@@ -1208,10 +1208,10 @@
 		9283015C0F10E48900CC5A3C /* Pascal Sources */ = {
 			isa = PBXGroup;
 			children = (
+				61798892114AA56300BA94A9 /* inc */,
 				61D08D7114AEA7FE0007C078 /* uGearsHedgehog.pas */,
 				61D08D7214AEA7FE0007C078 /* uGearsList.pas */,
 				61D08D7314AEA7FE0007C078 /* uGearsUtils.pas */,
-				61798892114AA56300BA94A9 /* inc */,
 				61177C00148B8BB100686905 /* uLandGenMaze.pas */,
 				61177C01148B8BB100686905 /* uLandOutline.pas */,
 				611D7A4F142FDCD3006E0798 /* uTouch.pas */,
diff -r 4531a2b141ba -r a2f39cb9af62 project_files/HedgewarsMobile/Locale/Japanese.lproj/About.strings
--- a/project_files/HedgewarsMobile/Locale/Japanese.lproj/About.strings	Wed Jan 04 02:06:44 2012 +0100
+++ b/project_files/HedgewarsMobile/Locale/Japanese.lproj/About.strings	Fri Jan 06 01:51:04 2012 +0100
@@ -1,4 +1,4 @@
-yt/* code credit */
+/* code credit */
 "Engine, frontend, net server" = "エンジン、フロントエンド、ネットサーバー";
 "Many desktop frontend improvements" = "多くのデスクトップフロントエンドの改善";
 "Many engine and desktop frontend improvements" = "多くのエンジンとデスクトップフロントエンドの改善";
diff -r 4531a2b141ba -r a2f39cb9af62 project_files/HedgewarsMobile/Locale/Japanese.lproj/Localizable.strings
--- a/project_files/HedgewarsMobile/Locale/Japanese.lproj/Localizable.strings	Wed Jan 04 02:06:44 2012 +0100
+++ b/project_files/HedgewarsMobile/Locale/Japanese.lproj/Localizable.strings	Fri Jan 06 01:51:04 2012 +0100
@@ -1,4 +1,4 @@
-yt/* No comment provided by engineer. */
+/* No comment provided by engineer. */
 "A monitor has been disconnected while playing and this has ended the match! You need to restart the game if you wish to use the second display again." = "モニターの接続が切断され、マッチを終了してしまいました!二番目のディスプレーをまた使用したい場合はゲームをリスタートしなければいけません。";
 
 /* from the scheme panel
diff -r 4531a2b141ba -r a2f39cb9af62 project_files/HedgewarsMobile/Locale/Japanese.lproj/Scheme.strings
--- a/project_files/HedgewarsMobile/Locale/Japanese.lproj/Scheme.strings	Wed Jan 04 02:06:44 2012 +0100
+++ b/project_files/HedgewarsMobile/Locale/Japanese.lproj/Scheme.strings	Fri Jan 06 01:51:04 2012 +0100
@@ -1,4 +1,4 @@
-yt/* game mod description */
+/* game mod description */
 "Land can not be destroyed" = "土地は破壊することができません";
 
 /* game mod title */