summaryrefslogtreecommitdiff
path: root/games/egl/files/patch-shared__shared.c
diff options
context:
space:
mode:
Diffstat (limited to 'games/egl/files/patch-shared__shared.c')
-rw-r--r--games/egl/files/patch-shared__shared.c115
1 files changed, 115 insertions, 0 deletions
diff --git a/games/egl/files/patch-shared__shared.c b/games/egl/files/patch-shared__shared.c
new file mode 100644
index 000000000000..6f538ea38cac
--- /dev/null
+++ b/games/egl/files/patch-shared__shared.c
@@ -0,0 +1,115 @@
+--- ./shared/shared.c.orig Tue May 23 20:05:59 2006
++++ ./shared/shared.c Tue May 23 20:06:00 2006
+@@ -539,3 +539,112 @@
+ dest--;
+ }
+ }
++
++/*
++==============================================================================
++
++ BYTE ORDER FUNCTIONS
++
++==============================================================================
++*/
++
++qBool bigendien;
++
++/*
++ * Can't just use function pointers, or DLL linkage can mess up when qcommon
++ * is included in multiple places.
++ */
++
++int16 (*_LittleShort) (int16 l);
++int32 (*_LittleLong) (int32 l);
++float (*_LittleFloat) (float l);
++int16 (*_BigShort) (int16 l);
++int32 (*_BigLong) (int32 l);
++float (*_BigFloat) (float l);
++
++int16 LittleShort (int16 l) { return _LittleShort(l); }
++int32 LittleLong (int32 l) { return _LittleLong(l); }
++float LittleFloat (float l) { return _LittleFloat(l); }
++int16 BigShort (int16 l) { return _BigShort(l); }
++int32 BigLong (int32 l) { return _BigLong(l); }
++float BigFloat (float l) { return _BigFloat(l); }
++
++int16 ShortNoSwap (int16 l) { return l; }
++int32 LongNoSwap (int32 l) { return l; }
++float FloatNoSwap (float f) { return f; }
++
++int16 ShortSwap (int16 s)
++{
++ union {
++ byte b[2];
++ int16 s;
++ } in, out;
++
++ in.s = s;
++
++ out.b[0] = in.b[1];
++ out.b[1] = in.b[0];
++
++ return out.s;
++}
++
++int32 LongSwap (int32 l)
++{
++ union {
++ byte b[4];
++ int l;
++ } in, out;
++
++ in.l = l;
++
++ out.b[0] = in.b[3];
++ out.b[1] = in.b[2];
++ out.b[2] = in.b[1];
++ out.b[3] = in.b[0];
++
++ return out.l;
++}
++
++float FloatSwap (float f)
++{
++ union {
++ byte b[4];
++ float f;
++ } in, out;
++
++ in.f = f;
++
++ out.b[0] = in.b[3];
++ out.b[1] = in.b[2];
++ out.b[2] = in.b[1];
++ out.b[3] = in.b[0];
++
++ return out.f;
++}
++
++/*
++ * Swap_Init
++ * Set the byte swapping variables in a portable manner.
++ */
++void Swap_Init (void)
++{
++ byte swaptest[2] = {1, 0};
++
++ if (*(int16 *)swaptest == 1) {
++ bigendien = qFalse;
++ _LittleShort = ShortNoSwap;
++ _LittleLong = LongNoSwap;
++ _LittleFloat = FloatNoSwap;
++ _BigShort = ShortSwap;
++ _BigLong = LongSwap;
++ _BigFloat = FloatSwap;
++ } else {
++ bigendien = qTrue;
++ _LittleShort = ShortSwap;
++ _LittleLong = LongSwap;
++ _LittleFloat = FloatSwap;
++ _BigShort = ShortNoSwap;
++ _BigLong = LongNoSwap;
++ _BigFloat = FloatNoSwap;
++ }
++}