summaryrefslogtreecommitdiff
path: root/chapter24/src/test/java/com/seaofnodes
diff options
context:
space:
mode:
Diffstat (limited to 'chapter24/src/test/java/com/seaofnodes')
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/BrainFuckTest.java55
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/Chapter19Test.java83
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/Chapter20Test.java61
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/Chapter21Test.java235
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/Chapter22Test.java72
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/Chapter23Test.java148
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/Chapter24Test.java340
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/EvalArm64.java15
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/MergeSortTest.java44
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/TestArm64.java12
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/TestC.java17
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/TestRisc5.java12
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/and1.smp10
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/and2.smp16
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/and3.smp14
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/antiDep1.smp11
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/arg_count.smp6
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/array1.smp9
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/brain_fuck.smp46
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/echo.smp3
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/fib.smp11
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/helloWorld.smp3
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/jig.smp19
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/large.smp5344
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/loop2.smp10
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp12
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/no_stack_arg_count.smp6
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/or1.smp12
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/or2.smp23
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/person.smp9
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/print.smp8
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/ptrand.smp10
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/riscv_load.smp4
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_1.smp4
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_fold_away.smp5
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away.smp4
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away_2.smp4
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/sieve.smp31
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/sort.smp38
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_1.smp9
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_10x.c13
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_11x.c13
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_2.smp9
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_3.smp10
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_4.smp9
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_5.smp14
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_9x.c13
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/store_peep.smp3
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/progs/stringHash.smp30
49 files changed, 1006 insertions, 5883 deletions
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/BrainFuckTest.java b/chapter24/src/test/java/com/seaofnodes/simple/BrainFuckTest.java
index 1e1a1dc3..c1467c07 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/BrainFuckTest.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/BrainFuckTest.java
@@ -14,9 +14,58 @@ public class BrainFuckTest {
@Test public void testBrainFuck() throws IOException {
String brain_fuck = "Hello World!\n";
- TestC.run("brain_fuck", brain_fuck, 40);
+ String src =
+"""
+// -*- mode: java; -*-
+val brain_fuck = { ->
+ u8[] !program = new u8[106];program[0] = 43;program[1] = 43;program[2] = 43;program[3] = 43;program[4] = 43;program[5] = 43;program[6] = 43;program[7] = 43;program[8] = 91;program[9] = 62;program[10] = 43;program[11] = 43;program[12] = 43;program[13] = 43;program[14] = 91;program[15] = 62;program[16] = 43;program[17] = 43;program[18] = 62;program[19] = 43;program[20] = 43;program[21] = 43;program[22] = 62;program[23] = 43;program[24] = 43;program[25] = 43;program[26] = 62;program[27] = 43;program[28] = 60;program[29] = 60;program[30] = 60;program[31] = 60;program[32] = 45;program[33] = 93;program[34] = 62;program[35] = 43;program[36] = 62;program[37] = 43;program[38] = 62;program[39] = 45;program[40] = 62;program[41] = 62;program[42] = 43;program[43] = 91;program[44] = 60;program[45] = 93;program[46] = 60;program[47] = 45;program[48] = 93;program[49] = 62;program[50] = 62;program[51] = 46;program[52] = 62;program[53] = 45;program[54] = 45;program[55] = 45;program[56] = 46;program[57] = 43;program[58] = 43;program[59] = 43;program[60] = 43;program[61] = 43;program[62] = 43;program[63] = 43;program[64] = 46;program[65] = 46;program[66] = 43;program[67] = 43;program[68] = 43;program[69] = 46;program[70] = 62;program[71] = 62;program[72] = 46;program[73] = 60;program[74] = 45;program[75] = 46;program[76] = 60;program[77] = 46;program[78] = 43;program[79] = 43;program[80] = 43;program[81] = 46;program[82] = 45;program[83] = 45;program[84] = 45;program[85] = 45;program[86] = 45;program[87] = 45;program[88] = 46;program[89] = 45;program[90] = 45;program[91] = 45;program[92] = 45;program[93] = 45;program[94] = 45;program[95] = 45;program[96] = 45;program[97] = 46;program[98] = 62;program[99] = 62;program[100] = 43;program[101] = 46;program[102] = 62;program[103] = 43;program[104] = 43;program[105] = 46;
+ int d = 0;
+ u8[] !output = new u8[0];
+ u8[] !data = new u8[100];
- EvalRisc5 R5 = TestRisc5.build("brain_fuck", 0, 28, false);
+ for( int pc = 0; pc < program#; pc++ ) {
+ var command = program[pc];
+ if (command == 62) {
+ d++;
+ } else if (command == 60) {
+ d--;
+ } else if (command == 43) {
+ data[d]++;
+ } else if (command == 45) {
+ data[d]--;
+ } else if (command == 46) {
+ // Output a byte; increase the output array size
+ var old = output;
+ output = new u8[output# + 1];
+ for( int i = 0; i < old#; i++ )
+ output[i] = old[i];
+ output[old#] = data[d]; // Add the extra byte on the end
+ } else if (command == 44) {
+ data[d] = 42;
+ } else if (command == 91) {
+ if (data[d] == 0) {
+ for( int d = 1; d > 0; ) {
+ command = program[++pc];
+ if (command == 91) d++;
+ if (command == 93) d--;
+ }
+ }
+ } else if (command == 93) {
+ if (data[d]) {
+ for( int d = 1; d > 0; ) {
+ command = program[--pc];
+ if (command == 93) d++;
+ if (command == 91) d--;
+ }
+ }
+ }
+ }
+ return output;
+};
+""";
+ TestC.run(src,"brain_fuck", null, brain_fuck, 40);
+
+ EvalRisc5 R5 = TestRisc5.build("brain_fuck", src, 0, 28, false);
int trap = R5.step(100000);
assertEquals(0,trap);
int ptr = (int)R5.regs[riscv.A0];
@@ -24,7 +73,7 @@ public class BrainFuckTest {
for( int i=0; i<brain_fuck.length(); i++ )
assertEquals(brain_fuck.charAt(i), R5.ld1z(ptr+4+i));
- EvalArm64 A5 = TestArm64.build("brain_fuck", 0, 28, false);
+ EvalArm64 A5 = TestArm64.build("brain_fuck", src, 0, 28, false);
int trap_arm = A5.step(100000);
assertEquals(0,trap_arm);
assertEquals(0,trap);
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/Chapter19Test.java b/chapter24/src/test/java/com/seaofnodes/simple/Chapter19Test.java
index e2a155ce..19d0f501 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/Chapter19Test.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/Chapter19Test.java
@@ -23,7 +23,38 @@ return 0;
@Test
public void testString() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/stringHash.smp"));
+ String src =
+"""
+struct String {
+ u8[] cs;
+ int _hashCode;
+};
+
+// Compare two Strings
+val equals = { String self, String s ->
+ if( self == s ) return true;
+ if( self.cs# != s.cs# ) return false;
+ for( int i=0; i< self.cs#; i++ )
+ if( self.cs[i] != s.cs[i] )
+ return false;
+ return true;
+};
+
+// Return the String hashCode (cached, and never 0)
+val hashCode = { String self ->
+ self._hashCode
+ ? self._hashCode
+ : (self._hashCode = _hashCodeString(self));
+};
+
+val _hashCodeString = { String self ->
+ int hash=0;
+ for( int i=0; i< self.cs#; i++ )
+ hash = hash*31 + self.cs[i];
+ if( !hash ) hash = 123456789;
+ return hash;
+};
+""";
CodeGen code = new CodeGen(src).parse().opto().typeCheck().GCM().localSched();
assertEquals("Stop[ return Phi(Region,1,0,0,1); return Phi(Region,._hashCode,Phi(Region,123456789,Phi(Loop,0,(.[]+((Phi_hash<<5)-Phi_hash))))); ]", code._stop.toString());
//assertEquals("-4898613127354160978", Eval2.eval(code, 2));
@@ -292,8 +323,20 @@ return A[1];
@Test
public void testNewton() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp"))
- + "flt farg = arg; return test_sqrt(farg);";
+ String src =
+"""
+val test_sqrt = { flt x ->
+ flt epsilon = 1e-15;
+ flt guess = x;
+ while( 1 ) {
+ flt next = (x/guess + guess)/2;
+ if( guess-epsilon <= next & next <= guess+epsilon ) return guess;
+ //if( guess==next ) return guess;
+ guess = next;
+ }
+};
+flt farg = arg; return test_sqrt(farg);
+""";
CodeGen code = new CodeGen(src).driver(Phase.LocalSched,"x86_64_v2", "SystemV");
assertEquals("return Phi(Loop,(cvtf,arg),(mulf,(addf,(divf,cvtf,Phi_guess),Phi_guess),0.5f));", code.print());
};
@@ -301,7 +344,39 @@ return A[1];
@Test
public void sieveOfEratosthenes() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/sieve.smp"));
+ String src =
+"""
+val sieve = { int N ->
+ // The main Sieve array
+ bool[] !ary = new bool[N];
+ // The primes less than N
+ u32[] !primes = new u32[N>>1];
+ // Number of primes so far, searching at index p
+ int nprimes = 0, p=2;
+ // Find primes while p^2 < N
+ while( p*p < N ) {
+ // skip marked non-primes
+ while( ary[p] ) p++;
+ // p is now a prime
+ primes[nprimes++] = p;
+ // Mark out the rest non-primes
+ for( int i = p + p; i < ary#; i+= p )
+ ary[i] = true;
+ p++;
+ }
+
+ // Now just collect the remaining primes, no more marking
+ for( ; p < N; p++ )
+ if( !ary[p] )
+ primes[nprimes++] = p;
+
+ // Copy/shrink the result array
+ u32[] !rez = new u32[nprimes];
+ for( int j=0; j < nprimes; j++ )
+ rez[j] = primes[j];
+ return rez;
+};
+""";
CodeGen code = new CodeGen(src).driver(Phase.LocalSched,"x86_64_v2", "SystemV");
assertEquals("return []u32;", code.print());
//assertEquals("u32[ 2,3,5,7,11,13,17,19]",Eval2.eval(code, 20));
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/Chapter20Test.java b/chapter24/src/test/java/com/seaofnodes/simple/Chapter20Test.java
index dcea5c87..b04ba24c 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/Chapter20Test.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/Chapter20Test.java
@@ -73,8 +73,20 @@ return sqrt(arg) + sqrt(cast_int);
@Test
public void testNewtonFloat() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp"))
- + "flt farg = arg; return test_sqrt(farg) + test_sqrt(farg+2.0);";
+ String src =
+"""
+val test_sqrt = { flt x ->
+ flt epsilon = 1e-15;
+ flt guess = x;
+ while( 1 ) {
+ flt next = (x/guess + guess)/2;
+ if( guess-epsilon <= next & next <= guess+epsilon ) return guess;
+ //if( guess==next ) return guess;
+ guess = next;
+ }
+};
+flt farg = arg; return test_sqrt(farg) + test_sqrt(farg+2.0);
+""";
testCPU(src,"x86_64_v2", "SystemV",39,null);
testCPU(src,"riscv" , "SystemV",17,null);
testCPU(src,"arm" , "SystemV",18,null);
@@ -92,7 +104,17 @@ return sqrt(arg) + sqrt(cast_int);
@Test
public void testArray1() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/array1.smp"));
+ String src =
+"""
+int[] !ary = new int[arg];
+// Fill [0,1,2,3,4,...]
+for( int i=0; i<ary#; i++ )
+ ary[i] = i;
+// Fill [0,1,3,6,10,...]
+for( int i=0; i<ary#-1; i++ )
+ ary[i+1] += ary[i];
+return ary[1] * 1000 + ary[3]; // 1 * 1000 + 6
+""";
testCPU(src,"x86_64_v2", "SystemV",-1,"return .[];");
testCPU(src,"riscv" , "SystemV", 8,"return (add,.[],(mul,.[],1000));");
testCPU(src,"arm" , "SystemV", 5,"return (add,.[],(mul,.[],1000));");
@@ -101,7 +123,38 @@ return sqrt(arg) + sqrt(cast_int);
@Test
public void testString() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/stringHash.smp"));
+ String src =
+"""
+struct String {
+ u8[] cs;
+ int _hashCode;
+};
+
+// Compare two Strings
+val equals = { String self, String s ->
+ if( self == s ) return true;
+ if( self.cs# != s.cs# ) return false;
+ for( int i=0; i< self.cs#; i++ )
+ if( self.cs[i] != s.cs[i] )
+ return false;
+ return true;
+};
+
+// Return the String hashCode (cached, and never 0)
+val hashCode = { String self ->
+ self._hashCode
+ ? self._hashCode
+ : (self._hashCode = _hashCodeString(self));
+};
+
+val _hashCodeString = { String self ->
+ int hash=0;
+ for( int i=0; i< self.cs#; i++ )
+ hash = hash*31 + self.cs[i];
+ if( !hash ) hash = 123456789;
+ return hash;
+};
+""";
testCPU(src,"x86_64_v2", "SystemV", 9,null);
testCPU(src,"riscv" , "SystemV", 3,null);
testCPU(src,"arm" , "SystemV", 3,null);
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/Chapter21Test.java b/chapter24/src/test/java/com/seaofnodes/simple/Chapter21Test.java
index 7f4898e0..ec55735e 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/Chapter21Test.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/Chapter21Test.java
@@ -15,7 +15,25 @@ public class Chapter21Test {
@Test
public void testJig() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/jig.smp"));
+ String src =
+"""
+struct s0 {
+ bool v1;
+ i16 v2;
+ int v3;
+ i8 v4;
+ byte v5;
+};
+while(new s0.v3)
+ while(new s0.v5<<new s0.v4) {}
+if(0) {
+ if(0) {
+ flt !P5ZUD4=new s0.v2;
+ }
+ while(0) {}
+}
+return new s0.v1;
+""";
testCPU(src,"x86_64_v2", "Win64" ,-1,null);
testCPU(src,"riscv" , "SystemV",-1,null);
testCPU(src,"arm" , "SystemV",-1,null);
@@ -48,7 +66,17 @@ public class Chapter21Test {
@Test
public void testArray1() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/array1.smp"));
+ String src =
+"""
+int[] !ary = new int[arg];
+// Fill [0,1,2,3,4,...]
+for( int i=0; i<ary#; i++ )
+ ary[i] = i;
+// Fill [0,1,3,6,10,...]
+for( int i=0; i<ary#-1; i++ )
+ ary[i+1] += ary[i];
+return ary[1] * 1000 + ary[3]; // 1 * 1000 + 6
+""";
testCPU(src,"x86_64_v2", "SystemV",-1,"return .[];");
testCPU(src,"riscv" , "SystemV", 7,"return (add,.[],(mul,.[],1000));");
testCPU(src,"arm" , "SystemV", 5,"return (add,.[],(mul,.[],1000));");
@@ -56,7 +84,19 @@ public class Chapter21Test {
@Test
public void testAntiDeps1() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/antiDep1.smp"));
+ String src =
+"""
+struct S { int f; };
+var v0 = new S;
+S? v1;
+if (arg) v1 = new S;
+if (v1) {
+ v0.f = v1.f;
+} else {
+ v0.f = 2;
+}
+return v0;
+""";
testCPU(src,"x86_64_v2", "SystemV", 7,"return mov(mov(S));");
testCPU(src,"riscv" , "SystemV",10,"return mov(mov(S));");
testCPU(src,"arm" , "SystemV",10,"return mov(mov(S));");
@@ -64,18 +104,92 @@ public class Chapter21Test {
@Test
public void testString() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/stringHash.smp"));
+ String src =
+"""
+struct String {
+ u8[] cs;
+ int _hashCode;
+};
+
+// Compare two Strings
+val equals = { String self, String s ->
+ if( self == s ) return true;
+ if( self.cs# != s.cs# ) return false;
+ for( int i=0; i< self.cs#; i++ )
+ if( self.cs[i] != s.cs[i] )
+ return false;
+ return true;
+};
+
+// Return the String hashCode (cached, and never 0)
+val hashCode = { String self ->
+ self._hashCode
+ ? self._hashCode
+ : (self._hashCode = _hashCodeString(self));
+};
+
+val _hashCodeString = { String self ->
+ int hash=0;
+ for( int i=0; i< self.cs#; i++ )
+ hash = hash*31 + self.cs[i];
+ if( !hash ) hash = 123456789;
+ return hash;
+};
+""";
testCPU(src,"x86_64_v2", "SystemV", 9,null);
testCPU(src,"riscv" , "SystemV", 3,null);
testCPU(src,"arm" , "SystemV", 3,null);
}
@Test public void testStringExport() throws IOException {
- TestC.run("stringHash", 9);
+ String src =
+"""
+struct String {
+ u8[] cs;
+ int _hashCode;
+};
+
+// Compare two Strings
+val equals = { String self, String s ->
+ if( self == s ) return true;
+ if( self.cs# != s.cs# ) return false;
+ for( int i=0; i< self.cs#; i++ )
+ if( self.cs[i] != s.cs[i] )
+ return false;
+ return true;
+};
+
+// Return the String hashCode (cached, and never 0)
+val hashCode = { String self ->
+ self._hashCode
+ ? self._hashCode
+ : (self._hashCode = _hashCodeString(self));
+};
+
+val _hashCodeString = { String self ->
+ int hash=0;
+ for( int i=0; i< self.cs#; i++ )
+ hash = hash*31 + self.cs[i];
+ if( !hash ) hash = 123456789;
+ return hash;
+};
+""";
+ TestC.run(src, "stringHash",null, "", 9);
}
@Test public void testLoop2() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/loop2.smp"));
+ String src =
+"""
+int i = 0;
+while(true) {
+ i += 1;
+ if( i==0 ) continue;
+ if( i==1 ) continue;
+ if( i==2 ) break;
+ continue;
+}
+return i;
+""";
testCPU(src,"x86_64_v2", "Win64" ,0,"return (inc,Phi(Loop,0,inc));");
testCPU(src,"riscv" , "SystemV",0,"return ( Phi(Loop,0,addi) + #1 );");
testCPU(src,"arm" , "SystemV",0,"return (inc,Phi(Loop,0,inc));");
@@ -94,9 +208,22 @@ public class Chapter21Test {
8 2.828427 (4.44089e-16)
9 3.000000 (0)
""";
- TestC.run("newtonFloat",result,34);
+ String src =
+"""
+val test_sqrt = { flt x ->
+ flt epsilon = 1e-15;
+ flt guess = x;
+ while( 1 ) {
+ flt next = (x/guess + guess)/2;
+ if( guess-epsilon <= next & next <= guess+epsilon ) return guess;
+ //if( guess==next ) return guess;
+ guess = next;
+ }
+};
+""";
+ TestC.run(src, "newtonFloat", null, result, 34);
- EvalRisc5 R5 = TestRisc5.build("newtonFloat", 0, 10, false);
+ EvalRisc5 R5 = TestRisc5.build("newtonFloat",src, 0, 10, false);
R5.fregs[riscv.FA0 - riscv.F_OFFSET] = 3.0;
int trap_r5 = R5.step(1000);
assertEquals(0,trap_r5);
@@ -104,7 +231,7 @@ public class Chapter21Test {
assertEquals(1.732051,R5.fregs[riscv.FA0 - riscv.F_OFFSET], 0.00001);
// arm
- EvalArm64 A5 = TestArm64.build("newtonFloat", 0, 10, false);
+ EvalArm64 A5 = TestArm64.build("newtonFloat", src,0, 10, false);
A5.fregs[arm.D0 - arm.D_OFFSET] = 3.0;
int trap_arm = A5.step(1000);
assertEquals(0,trap_arm);
@@ -113,6 +240,39 @@ public class Chapter21Test {
@Test public void testSieve() throws IOException {
+ String src =
+"""
+val sieve = { int N ->
+ // The main Sieve array
+ bool[] !ary = new bool[N];
+ // The primes less than N
+ u32[] !primes = new u32[N>>1];
+ // Number of primes so far, searching at index p
+ int nprimes = 0, p=2;
+ // Find primes while p^2 < N
+ while( p*p < N ) {
+ // skip marked non-primes
+ while( ary[p] ) p++;
+ // p is now a prime
+ primes[nprimes++] = p;
+ // Mark out the rest non-primes
+ for( int i = p + p; i < ary#; i+= p )
+ ary[i] = true;
+ p++;
+ }
+
+ // Now just collect the remaining primes, no more marking
+ for( ; p < N; p++ )
+ if( !ary[p] )
+ primes[nprimes++] = p;
+
+ // Copy/shrink the result array
+ u32[] !rez = new u32[nprimes];
+ for( int j=0; j < nprimes; j++ )
+ rez[j] = primes[j];
+ return rez;
+};
+""";
// The primes
int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, };
SB sb = new SB().p(primes.length).p("[");
@@ -121,11 +281,11 @@ public class Chapter21Test {
String sprimes = sb.p("]").toString();
// Compile, link against native C; expect the above string of primes to be printed out by C
- TestC.run("sieve",sprimes, 257);
+ TestC.run(src, "sieve", null, sprimes, 257);
// Evaluate on RISC5 emulator; expect return of an array of primes in
// the simulated heap.
- EvalRisc5 R5 = TestRisc5.build("sieve", 100, 160, false);
+ EvalRisc5 R5 = TestRisc5.build("sieve", src, 100, 160, false);
int trap = R5.step(10000);
assertEquals(0,trap);
// Return register A0 holds sieve(100)
@@ -137,7 +297,7 @@ public class Chapter21Test {
// Evaluate on ARM5 emulator; expect return of an array of primes in
// the simulated heap.
- EvalArm64 A5 = TestArm64.build("sieve", 100, 160, false);
+ EvalArm64 A5 = TestArm64.build("sieve", src, 100, 160, false);
int trap_arm = A5.step(10000);
assertEquals(0, trap_arm);
int ary_arm = (int)A5.regs[arm.X0];
@@ -148,17 +308,30 @@ public class Chapter21Test {
}
@Test public void testFibExport() throws IOException {
+ String src =
+"""
+val fib = {int n ->
+ int f1=1;
+ int f2=1;
+ while( n-- > 1 ){
+ int temp = f1+f2;
+ f1=f2;
+ f2=temp;
+ }
+ return f2;
+};
+""";
String fib = "[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]";
- TestC.run("fib", fib, 24);
+ TestC.run(src, "fib", null, fib, 24);
- EvalRisc5 R5 = TestRisc5.build("fib", 9, 17, false);
+ EvalRisc5 R5 = TestRisc5.build("fib", src, 9, 17, false);
int trap = R5.step(100);
assertEquals(0,trap);
// Return register A0 holds fib(8)==55
assertEquals(55,R5.regs[riscv.A0]);
// arm
- EvalArm64 A5 = TestArm64.build("fib", 9, 17, false);
+ EvalArm64 A5 = TestArm64.build("fib", src, 9, 17, false);
int trap_arm = A5.step(100);
assertEquals(0,trap_arm);
// Return register X0 holds fib(8)==55
@@ -166,8 +339,19 @@ public class Chapter21Test {
}
@Test public void testPerson() throws IOException {
+ String src =
+ """
+ struct Person {
+ i32 age;
+ };
+
+ val fcn = { Person?[] ps, int x ->
+ if( ps[x] )
+ ps[x].age++;
+ };
+ """;
String person = "6\n";
- TestC.run("person", person, 0);
+ TestC.run(src, "person", null, person, 0);
// Memory layout starting at PS:
int ps = 1<<16; // Person array pointer starts at heap start
@@ -178,7 +362,7 @@ public class Chapter21Test {
int p1 = ps+4*8+1*8;
// P2 = { age } // sizeof=8
int p2 = ps+4*8+2*8;
- EvalRisc5 R5 = TestRisc5.build("person", ps, 0, false);
+ EvalRisc5 R5 = TestRisc5.build("person", src, ps, 0, false);
R5.regs[riscv.A1] = 1; // Index 1
R5.st8(ps,3); // Length
R5.st8(ps+1*8,p0);
@@ -194,7 +378,7 @@ public class Chapter21Test {
assertEquals(17+1,R5.ld8(p1));
assertEquals(60+0,R5.ld8(p2));
- EvalArm64 A5 = TestArm64.build("person", ps, 0, false);
+ EvalArm64 A5 = TestArm64.build("person", src, ps, 0, false);
A5.regs[arm.X1] = 1; // Index 1
A5.st8(ps, 3);
A5.st8(ps+1*8,p0);
@@ -214,12 +398,19 @@ public class Chapter21Test {
@Test public void testArgCount() throws IOException {
// Test passes more args than registers in Sys5, which is far far more
// than what Win64 allows - so Win64 gets a lot more spills here.
+ String src =
+"""
+val addAll = { int i0, flt f1, int i2, flt f3, int i4, flt f5, int i6, flt f7, int x8, flt f9, int i10, flt f11, int i12, flt f13, int i14, flt f15, int x16, flt f17 int x18, flt f19 ->
+ return
+ i0 + f1+ i2+ f3+ i4+ f5+ i6+ f7+ x8 +f9 +
+ i10+f11+i12+f13+i14+f15+x16+f17+x18+f19 ;
+};
+""";
String arg_count = "191.000000\n";
- TestC.run("arg_count", arg_count,
- TestC.CALL_CONVENTION.equals("Win64") ? 42 : 15);
+ TestC.run(src, "arg_count", null, arg_count, TestC.CALL_CONVENTION.equals("Win64") ? 42 : 15);
- EvalRisc5 R5 = TestRisc5.build("no_stack_arg_count", 0, 0, false);
+ EvalRisc5 R5 = TestRisc5.build("no_stack_arg_count", src, 0, 4, false);
// Todo: handle stack(imaginary stack in emulator)
// pass in float arguments
@@ -249,7 +440,7 @@ public class Chapter21Test {
assertEquals(22.8, result, 0.00001);
// arm
- EvalArm64 A5 = TestArm64.build("no_stack_arg_count", 0, 0, false);
+ EvalArm64 A5 = TestArm64.build("no_stack_arg_count", src, 0, 4, false);
A5.fregs[arm.D0 - arm.D_OFFSET] = 1.1;
A5.fregs[arm.D1 - arm.D_OFFSET] = 1.1;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/Chapter22Test.java b/chapter24/src/test/java/com/seaofnodes/simple/Chapter22Test.java
index 13322d3d..9e230bcd 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/Chapter22Test.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/Chapter22Test.java
@@ -13,10 +13,27 @@ import static org.junit.Assert.*;
public class Chapter22Test {
- @Test @Ignore
+ @Test
public void testJig() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/jig.smp"));
- //String src = Files.readString(Path.of("docs/examples/BubbleSort.smp"));
+ String src =
+ """
+ struct s0 {
+ bool v1;
+ i16 v2;
+ int v3;
+ i8 v4;
+ byte v5;
+ };
+ while(new s0.v3)
+ while(new s0.v5<<new s0.v4) {}
+ if(0) {
+ if(0) {
+ flt !P5ZUD4=new s0.v2;
+ }
+ while(0) {}
+ }
+ return new s0.v1;
+ """;
testCPU(src,"x86_64_v2", "Win64" ,-1,null);
testCPU(src,"riscv" , "SystemV",-1,null);
testCPU(src,"arm" , "SystemV",-1,null);
@@ -51,11 +68,11 @@ return 0;
assertEquals(56, testCPUSize(src, "arm","SystemV",4,"return 0;"));
// do assertEquals here
- EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away", 0, 4, false);
+ EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away", src,0, 4, false);
int trap = R5.step(100);
assertEquals(0,trap);
- EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away", 0, 4, false);
+ EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away", src, 0, 4, false);
trap = A5.step(100);
assertEquals(0,trap);
@@ -71,11 +88,11 @@ return 0;
return 0;
""";
- EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away_2", 0, 4, false);
+ EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away_2", src, 0, 4, false);
int trap = R5.step(100);
assertEquals(0,trap);
- EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away_2", 0, 4, false);
+ EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away_2", src, 0, 4, false);
int trap_arm = A5.step(100);
assertEquals(0,trap_arm);
@@ -95,11 +112,11 @@ p.age = (arg<<48)>>48;
return 0;
""";
- EvalRisc5 R5 = TestRisc5.build("sext_str_fold_away", 0, 5, false);
+ EvalRisc5 R5 = TestRisc5.build("sext_str_fold_away", src, 0, 5, false);
int trap = R5.step(100);
assertEquals(0,trap);
- EvalArm64 A5 = TestArm64.build("sext_str_fold_away", 0, 5, false);
+ EvalArm64 A5 = TestArm64.build("sext_str_fold_away", src, 0, 5, false);
int trap_arm = A5.step(100);
assertEquals(0,trap_arm);
@@ -112,8 +129,19 @@ return 0;
// Int now is changed to 4 bytes.
@Test public void testPerson() throws IOException {
+ String src =
+"""
+struct Person {
+ i32 age;
+};
+
+val fcn = { Person?[] ps, int x ->
+ if( ps[x] )
+ ps[x].age++;
+};
+""";
String person = "6\n";
- TestC.run("person", person, 0);
+ TestC.run(src, "person", null, person, 0);
// Memory layout starting at PS:
int ps = 1<<16; // Person array pointer starts at heap start
@@ -124,7 +152,7 @@ return 0;
int p1 = ps+4*8+1*8;
// P2 = { age } // sizeof=8
int p2 = ps+4*8+2*8;
- EvalRisc5 R5 = TestRisc5.build("person", ps, 0, false);
+ EvalRisc5 R5 = TestRisc5.build("person", src, ps, 0, false);
R5.regs[riscv.A1] = 1; // Index 1
R5.st8(ps,3); // Length
R5.st8(ps+1*8,p0);
@@ -140,7 +168,7 @@ return 0;
assertEquals(17+1,R5.ld8(p1));
assertEquals(60+0,R5.ld8(p2));
- EvalArm64 A5 = TestArm64.build("person", ps, 0, false);
+ EvalArm64 A5 = TestArm64.build("person", src, ps, 0, false);
A5.regs[arm.X1] = 1; // Index 1
A5.st8(ps, 3);
A5.st8(ps+1*8,p0);
@@ -179,18 +207,22 @@ return cc.cz;
@Test
public void testHelloWorld() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/helloWorld.smp"));
+ String src =
+"""
+sys.io.p("Hello, World!");
+return 0;
+""";
TestC.run(src,TestC.CALL_CONVENTION,null, null,null,"build/objs/helloWorld","","Hello, World!",0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("helloWorld", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("helloWorld", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Hello, World!",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("helloWorld", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("helloWorld", src,0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -220,17 +252,21 @@ return sum(is);
@Test @Ignore
public void testEcho() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/echo.smp"));
+ String src =
+"""
+// Echo stdin to stdout.
+return sys.io.p( sys.io.stdin() );
+""";
TestC.run(src,TestC.CALL_CONVENTION,null, null,null,"build/objs/echo","","",0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("echo", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("echo", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("echo", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("echo", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/Chapter23Test.java b/chapter24/src/test/java/com/seaofnodes/simple/Chapter23Test.java
index 267bb3e0..94e13a87 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/Chapter23Test.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/Chapter23Test.java
@@ -35,17 +35,32 @@ public class Chapter23Test {
@Test
public void testOr() throws IOException {
- TestC.runS("or1","Or",0);
+ String src =
+ """
+ int a = 1;
+ int b = 0;
+
+ if(a++ || b++ ) {
+ if(b == 0 && a == 2) {
+ sys.io.p("Or");
+ }
+ } else{
+ sys.io.p("And");
+ }
+ return 0;
+ """;
+
+ TestC.runSF("or1", src, null, "Or", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("or1", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("or1", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Or",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("or1", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("or1", src,0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -54,17 +69,29 @@ public class Chapter23Test {
@Test
public void testAnd() throws IOException {
- TestC.runS("and1","And",0);
+ String src =
+ """
+ int a = 1;
+ int b = 1;
+
+ if(a && b) {
+ sys.io.p("And");
+ } else {
+ sys.io.p("Or");
+ }
+ return 0;
+ """;
+ TestC.runSF("and1", src, null, "And", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("and1", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("and1", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("And",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("and1", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("and1", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -73,24 +100,38 @@ public class Chapter23Test {
@Test
public void testAndPtr() throws IOException {
+ // Todo: have one src here
String src =
-"""
-struct S { S? fld; };
-val ptr = arg == 1 ? null : new S{fld = arg==1 ? null : new S{fld = null;};};
-return ptr && ptr.fld ? "true" : "false";
- """;
+ """
+ struct S { S? fld; };
+ val ptr = arg == 1 ? null : new S{fld = arg==1 ? null : new S{fld = null;};};
+ return ptr && ptr.fld ? "true" : "false";
+ """;
+ String src2 =
+ """
+ struct S { S? fld; };
+
+ val ptr = arg == 1 ? null : new S{fld = arg==1 ? null : new S{fld = null;};};
+ if( ptr && ptr.fld ) {
+ sys.io.p("true");
+ } else {
+ sys.io.p("false");
+ }
+
+ return 0;
+ """;
CodeGen code = new CodeGen(src).parse().opto().typeCheck();
assertEquals("[97-117][ 116,114,117,101]", Eval2.eval(code, 0));
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("ptrand", 1, 8, false);
+ EvalRisc5 R5 = TestRisc5.build("ptrand",src2, 1, 8, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("false",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("ptrand", 1, 8, false);
+ EvalArm64 arm = TestArm64.build("ptrand", src2, 1, 8, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -100,37 +141,80 @@ return ptr && ptr.fld ? "true" : "false";
// conditional side effect
@Test
public void testCondSideEffAnd() throws IOException {
- TestC.runS("and2","Effected",0);
+ String src =
+ """
+ int a = 1;
+ int b = 1;
+
+ int x=1;
+ int y=1;
+ int z=0;
+
+ int g = x++ && y++ && z++;
+
+ if(x == 2 && y == 2 && z == 1 && g == 0) {
+ sys.io.p("Effected");
+ } else {
+ sys.io.p("Not effected");
+ }
+ return 0;
+ """;
+
+ TestC.runSF("and2", src, null, "Effected", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("and2", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("and2", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Effected",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("and2", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("and2", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
assertEquals("Effected",arm._stdout.toString());
}
-
@Test
public void testCondSideEffOr() throws IOException {
- TestC.runS("or2","Effected",0);
+ String src =
+ """
+ int a = 1;
+ int b = 1;
+
+ int x = -1;
+ int y=1;
+ int z= -1;
+
+ int g = x++ || y++ || z++;
+
+ int switch = 0;
+ if(x == 4 || y == 4 || z == 4) {
+ switch = -1;
+ } else {
+ switch = 1;
+ }
+ int cd = 1;
+ if((x == 0 && y == 1 && z==-1) && switch && g) {
+ sys.io.p("Effected");
+ } else {
+ sys.io.p("Not effected");
+ }
+ return 0;
+ """;
+ TestC.runSF("or2", src, null, "Effected", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("or2", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("or2", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Effected",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("or2", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("or2", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -140,23 +224,41 @@ return ptr && ptr.fld ? "true" : "false";
// test it with function calls
@Test
public void testFuncCall() throws IOException {
- TestC.runS("and3","Or",0);
+ String src =
+ """
+ // -*- mode: java; -*-
+ int a = 1;
+ int b = 1;
+
+ var sq = { int x ->
+ x*x;
+ };
+
+ if(a && sq(0)) {
+ sys.io.p("And");
+ } else {
+ sys.io.p("Or");
+ }
+ return 0;
+ """;
+ TestC.runSF("and3", src, null, "Or", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("and3", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("and3", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Or",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("and3", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("and3", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
assertEquals("Or",arm._stdout.toString());
}
+
@Test
public void testFRefFields() {
String src =
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/Chapter24Test.java b/chapter24/src/test/java/com/seaofnodes/simple/Chapter24Test.java
index dcb7216f..cf6290e4 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/Chapter24Test.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/Chapter24Test.java
@@ -7,6 +7,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import com.seaofnodes.simple.type.TypeInteger;
import org.junit.Test;
import static org.junit.Assert.*;
@@ -33,17 +34,32 @@ public class Chapter24Test {
@Test
public void testOr() throws IOException {
- TestC.runS("or1","Or",0);
+ String src =
+"""
+int a = 1;
+int b = 0;
+
+if(a++ || b++ ) {
+ if(b == 0 && a == 2) {
+ sys.io.p("Or");
+ }
+} else{
+ sys.io.p("And");
+}
+return 0;
+""";
+
+ TestC.runSF("or1", src, null, "Or", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("or1", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("or1", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Or",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("or1", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("or1", src,0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -52,17 +68,29 @@ public class Chapter24Test {
@Test
public void testAnd() throws IOException {
- TestC.runS("and1","And",0);
+ String src =
+"""
+int a = 1;
+int b = 1;
+
+if(a && b) {
+ sys.io.p("And");
+} else {
+ sys.io.p("Or");
+}
+return 0;
+""";
+ TestC.runSF("and1", src, null, "And", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("and1", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("and1", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("And",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("and1", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("and1", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -71,24 +99,38 @@ public class Chapter24Test {
@Test
public void testAndPtr() throws IOException {
+ // Todo: have one src here
String src =
"""
struct S { S? fld; };
val ptr = arg == 1 ? null : new S{fld = arg==1 ? null : new S{fld = null;};};
return ptr && ptr.fld ? "true" : "false";
""";
+ String src2 =
+"""
+struct S { S? fld; };
+
+val ptr = arg == 1 ? null : new S{fld = arg==1 ? null : new S{fld = null;};};
+if( ptr && ptr.fld ) {
+ sys.io.p("true");
+} else {
+ sys.io.p("false");
+}
+
+return 0;
+""";
CodeGen code = new CodeGen(src).parse().opto().typeCheck();
assertEquals("[97-117][ 116,114,117,101]", Eval2.eval(code, 0));
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("ptrand", 1, 8, false);
+ EvalRisc5 R5 = TestRisc5.build("ptrand",src2, 1, 8, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("false",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("ptrand", 1, 8, false);
+ EvalArm64 arm = TestArm64.build("ptrand", src2, 1, 8, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -98,17 +140,36 @@ return ptr && ptr.fld ? "true" : "false";
// conditional side effect
@Test
public void testCondSideEffAnd() throws IOException {
- TestC.runS("and2","Effected",0);
+ String src =
+"""
+int a = 1;
+int b = 1;
+
+int x=1;
+int y=1;
+int z=0;
+
+int g = x++ && y++ && z++;
+
+if(x == 2 && y == 2 && z == 1 && g == 0) {
+ sys.io.p("Effected");
+} else {
+ sys.io.p("Not effected");
+}
+return 0;
+""";
+
+ TestC.runSF("and2", src, null, "Effected", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("and2", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("and2", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Effected",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("and2", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("and2", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -118,17 +179,42 @@ return ptr && ptr.fld ? "true" : "false";
@Test
public void testCondSideEffOr() throws IOException {
- TestC.runS("or2","Effected",0);
+ String src =
+"""
+int a = 1;
+int b = 1;
+
+int x = -1;
+int y=1;
+int z= -1;
+
+int g = x++ || y++ || z++;
+
+int switch = 0;
+if(x == 4 || y == 4 || z == 4) {
+ switch = -1;
+} else {
+ switch = 1;
+}
+int cd = 1;
+if((x == 0 && y == 1 && z==-1) && switch && g) {
+ sys.io.p("Effected");
+} else {
+ sys.io.p("Not effected");
+}
+return 0;
+""";
+ TestC.runSF("or2", src, null, "Effected", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("or2", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("or2", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Effected",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("or2", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("or2", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -138,17 +224,34 @@ return ptr && ptr.fld ? "true" : "false";
// test it with function calls
@Test
public void testFuncCall() throws IOException {
- TestC.runS("and3","Or",0);
+ String src =
+"""
+// -*- mode: java; -*-
+int a = 1;
+int b = 1;
+
+var sq = { int x ->
+ x*x;
+};
+
+if(a && sq(0)) {
+ sys.io.p("And");
+} else {
+ sys.io.p("Or");
+}
+return 0;
+""";
+ TestC.runSF("and3", src, null, "Or", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("and3", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("and3", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Or",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("and3", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("and3", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -158,17 +261,29 @@ return ptr && ptr.fld ? "true" : "false";
// test it with function calls
@Test
public void testStack1() throws IOException {
- TestC.runS("stacked_r_1","In Range",0);
+ String src =
+"""
+int something_specific = 11;
+
+if (10 < something_specific < 20) {
+ sys.io.p("In Range");
+} else {
+ sys.io.p("Out of Range");
+}
+return 0;
+""";
+
+ TestC.runSF("stacked_r_1", src, null, "In Range", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("stacked_r_1", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_1", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("In Range",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("stacked_r_1", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("stacked_r_1", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -177,55 +292,92 @@ return ptr && ptr.fld ? "true" : "false";
@Test
public void testStack2() throws IOException {
- TestC.runS("stacked_r_2","In range",0);
+ String src =
+"""
+int score = 75;
+
+if (60 <= score < 90) {
+ sys.io.p("In Range");
+} else {
+sys.io.p("Out of range");
+}
+return 0;
+""";
+
+ TestC.runSF("stacked_r_2", src, null, "In Range", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("stacked_r_2", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_2", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
- assertEquals("In range",R5._stdout.toString());
+ assertEquals("In Range",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("stacked_r_2", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("stacked_r_2", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
- assertEquals("In range",arm._stdout.toString());
+ assertEquals("In Range",arm._stdout.toString());
}
@Test
public void testStack3() throws IOException {
- TestC.runS("stacked_r_3","In range",5);
+ String src =
+"""
+var sq = { int x ->
+ x*x;
+};
+
+int score = 5;
+
+val str = (sq(2) <= score < sq(3)) ? "In Range" : "Out of range";
+sys.io.p(str);
+return 0;
+""";
+
+ TestC.runSF("stacked_r_3", src, null, "In Range", 5);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("stacked_r_3", 0, 5, false);
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_3", src, 0, 5, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
- assertEquals("In range",R5._stdout.toString());
+ assertEquals("In Range",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("stacked_r_3", 0, 5, false);
+ EvalArm64 arm = TestArm64.build("stacked_r_3", src, 0, 5, false);
int trap_1 = arm.step(100);
assertEquals(0,trap_1);
assertEquals(0,arm.regs[0]);
- assertEquals("In range",arm._stdout.toString());
+ assertEquals("In Range",arm._stdout.toString());
}
@Test
public void testStack4() throws IOException {
- TestC.runS("stacked_r_4","Out of Range",0);
+ String src =
+"""
+int something_specific = 9;
+
+if (10 < something_specific < 20) {
+ sys.io.p("In Range");
+} else {
+ sys.io.p("Out of Range");
+}
+return 0;
+""";
+
+ TestC.runSF("stacked_r_4", src, null, "Out of Range", 0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("stacked_r_4", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_4", src,0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Out of Range",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("stacked_r_4", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("stacked_r_4", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -234,24 +386,136 @@ return ptr && ptr.fld ? "true" : "false";
@Test
public void testStack5() throws IOException {
- TestC.runS("stacked_r_5","In range",5);
+ String src =
+"""
+var sq = { int x ->
+ x*x;
+};
+
+int score = 5;
+
+if (sq(2) <= score < sq(3)) {
+sys.io.p("In Range");
+} else {
+sys.io.p("Out of range");
+}
+
+return 0;
+""";
+ TestC.runSF("stacked_r_5", src, null, "In Range", 5);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("stacked_r_5", 0, 7, false);
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_5", src, 0, 7, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
- assertEquals("In range",R5._stdout.toString());
+ assertEquals("In Range",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("stacked_r_5", 0, 7, false);
+ EvalArm64 arm = TestArm64.build("stacked_r_5", src, 0, 7, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
- assertEquals("In range",arm._stdout.toString());
+ assertEquals("In Range",arm._stdout.toString());
+ }
+
+
+ @Test
+ public void testStack6() {
+ try { new CodeGen(
+ """
+ return 0 < arg > 1;
+ """
+ ).parse(); fail(); }
+ catch( RuntimeException e ) { assertEquals("Mixing relational directions in a chained relational test",e.getMessage()); }
+ }
+
+ @Test
+ public void testStack9() throws IOException {
+ String stack9 = "1";
+ String src =
+"""
+var stack9 = { int x ->
+ (x < 1) == 1;
+};
+""";
+ String src2 =
+"""
+return (0 < 1) == 1;
+""";
+ TestC.run(src, "stacked_r_9x", null, stack9,0);
+
+ // Evaluate on RISC5 emulator
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_9", src2, 0, 0, false);
+ int trap = R5.step(100);
+ assertEquals(0,trap);
+ assertEquals(1,R5.regs[riscv.A0]);
+
+ // Evaluate on ARM emulator
+ EvalArm64 arm = TestArm64.build("stacked_r_9", src2, 0, 0, false);
+ trap = arm.step(100);
+ assertEquals(0,trap);
+ assertEquals(1,arm.regs[0]);
+ }
+
+ @Test
+ public void testStack10() throws IOException {
+ String stack10 = "1";
+ String src =
+"""
+var stack10 = { int x ->
+ (x < 1) == (1>x);
+};
+""";
+ String src2 =
+"""
+return (0 < 1) == (1>0);
+""";
+ TestC.run(src, "stacked_r_10x", null, stack10,0);
+
+ // Evaluate on RISC5 emulator
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_10", src2, 0, 0, false);
+ int trap = R5.step(100);
+ assertEquals(0,trap);
+ assertEquals(1,R5.regs[riscv.A0]);
+
+ // Evaluate on ARM emulator
+ EvalArm64 arm = TestArm64.build("stacked_r_10", src2,0, 0, false);
+ trap = arm.step(100);
+ assertEquals(0,trap);
+ assertEquals(1,arm.regs[0]);
+ }
+
+ @Test
+ public void testStack11() throws IOException {
+ String stack11 = "1";
+ String src =
+"""
+var stack11 = { int x ->
+ 0 < x < x+1 < 4;
+};
+""";
+ String src2 =
+"""
+return 0 < arg < arg+1 < 4;
+""";
+ TestC.run(src, "stacked_r_11x", null, stack11,0);
+
+ // Evaluate on RISC5 emulator
+ EvalRisc5 R5 = TestRisc5.build("stacked_r_11", src2, 1, 2, false);
+ int trap = R5.step(100);
+ assertEquals(0,trap);
+ assertEquals(1,R5.regs[riscv.A0]);
+
+ // Evaluate on ARM emulator
+ EvalArm64 arm = TestArm64.build("stacked_r_11", src2, 1, 2, false);
+ trap = arm.step(100);
+ assertEquals(0,trap);
+ assertEquals(1,arm.regs[0]);
}
+
@Test
public void testFRefFields() {
String src =
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/EvalArm64.java b/chapter24/src/test/java/com/seaofnodes/simple/EvalArm64.java
index 078bc9e8..9575d9fe 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/EvalArm64.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/EvalArm64.java
@@ -341,7 +341,6 @@ public class EvalArm64 {
regs[arm.X0] = _heap;
_heap += (int)size;
pc = (int)rval;
- rdid = -1;
}
if( pc == Encoding.SENTINEL_WRITE ) {
ByteArrayOutputStream baos = switch((int)regs[0]) {
@@ -352,17 +351,19 @@ public class EvalArm64 {
baos.write(_buf,(int)regs[1],(int)regs[2]);
regs[0] = regs[2];
pc = (int)rval;
- rdid = -1;
}
pc -= 4;
+ rdid = -1;
break;
}
case 0x9A: {
+ int encodedCond = (ir >> 12) & 0xF;
+ int decodedCond = encodedCond ^ 1;
// conditional select(csel)
int rm = (ir >> 16) & 0x1F;
int rn = (ir >> 5) & 0x1F;
- boolean cond = switch ((ir >> 12) & 0xF) {
+ boolean cond = switch (decodedCond) {
case 0x0 -> Z ; // eq
case 0x1 -> !Z ; // ne
case 0x2 -> C ; // cs
@@ -381,9 +382,11 @@ public class EvalArm64 {
case 0xF -> false ; // never
default -> throw Utils.TODO();
};
- int reg = cond ? rn : rm;
- rval = reg==31 ? 0 : regs[reg];
- if( cond ) rval++;
+// int reg = cond ? rn : rm;
+// rval = reg==31 ? 0 : regs[reg];
+// if( cond ) rval++;
+ if(cond) rval = 1;
+ else rval = 0;
break;
}
case 0x9B: { // mul
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/MergeSortTest.java b/chapter24/src/test/java/com/seaofnodes/simple/MergeSortTest.java
index 65eb525c..9c7c1360 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/MergeSortTest.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/MergeSortTest.java
@@ -13,15 +13,54 @@ import static org.junit.Assert.fail;
public class MergeSortTest {
@Test public void testMergeSort0() throws IOException {
+ // Test merge sort on a small array of primes
+ String src =
+"""
+ val merge_sort = { int[] a ->
+ int[] !b = new int[a#];
+ copy_array (a, 0, a#, b);
+ split_merge(a, 0, a#, b);
+ };
+
+ val split_merge = { int[] b, int begin, int end, int[] a ->
+ if (end - begin <= 1)
+ return 0;
+ int middle = (end + begin) / 2;
+ split_merge(a, begin, middle, b);
+ split_merge(a, middle, end, b);
+ merge(b, begin, middle, end, a);
+ return 0;
+ };
+
+ val merge = { int[] b, int begin, int middle, int end, int[] a ->
+ int i = begin, j = middle;
+
+ for (int k = begin; k < end; k++) {
+ // && and ||
+ bool cond = false;
+ if (i < middle) {
+ if (j >= end) cond = true;
+ else if (a[i] <= a[j]) cond = true;
+ }
+ if (cond) b[k] = a[i++];
+ else b[k] = a[j++];
+ }
+ };
+
+ val copy_array = { int[] a, int begin, int end, int[] b ->
+ for (int k = begin; k < end; k++)
+ b[k] = a[k];
+ };
+""";
int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, };
SB sb = new SB().p(primes.length).p("[");
for( int prime : primes )
sb.p(prime).p(", ");
String sprimes = sb.p("]").toString();
- TestC.run("sort", sprimes, 40);
+ TestC.run(src, "sort", null, sprimes, 40);
- EvalRisc5 R5 = TestRisc5.build("src/test/java/com/seaofnodes/simple/progs", "sort", "merge_sort", 0, 36, false);
+ EvalRisc5 R5 = TestRisc5.build("src/test/java/com/seaofnodes/simple/progs",src, "sort", "merge_sort", 0, 36, false);
// Allocate an array of primes, filled in reverse order
int ps = R5._heap;
R5._heap += (primes.length+1)*8; // 25 primes, and length
@@ -39,7 +78,6 @@ public class MergeSortTest {
assertEquals(primes[i], R5.ld8(ps+(i+1)*8));
// TODO: replace with ARM Eval
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/sort.smp"));
Chapter21Test.testCPU(src,"arm", "SystemV",36,null);
}
}
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/TestArm64.java b/chapter24/src/test/java/com/seaofnodes/simple/TestArm64.java
index 5d7d1361..a1c02ede 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/TestArm64.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/TestArm64.java
@@ -14,13 +14,19 @@ import static org.junit.Assert.assertEquals;
public class TestArm64 {
public static EvalArm64 build( String file, int arg, int spills, boolean print ) throws IOException {
- return build("src/test/java/com/seaofnodes/simple/progs",file, arg, spills, print);
+ String dir = "src/test/java/com/seaofnodes/simple/progs";
+ String src = Files.readString(Path.of(dir + "/"+file+".smp"));
+ return build(dir,src, file, arg, spills, print);
+ }
+
+ public static EvalArm64 build( String name, String src, int arg, int spills, boolean print ) throws IOException {
+ String dir = "src/test/java/com/seaofnodes/simple/progs";
+ return build(dir, src ,name, arg, spills, print);
}
// Compile and run a simple program
- public static EvalArm64 build( String dir, String file, int arg, int spills, boolean print ) throws IOException {
+ public static EvalArm64 build( String dir, String src, String file, int arg, int spills, boolean print ) throws IOException {
// Compile and export Simple
- String src = Files.readString(Path.of(dir+"/"+file+".smp"));
CodeGen code = new CodeGen(src).driver("arm", "SystemV",null);
if( print ) { code.print_as_hex(); System.out.print(code.asm()); }
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/TestC.java b/chapter24/src/test/java/com/seaofnodes/simple/TestC.java
index dbe9f02f..f1831929 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/TestC.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/TestC.java
@@ -40,14 +40,31 @@ public abstract class TestC {
String src = Files.readString(Path.of(sfile));
run(src,CALL_CONVENTION,arg, "",standalone? null: cfile,efile,"S",expected,spills);
}
+
+ // link with c and also inline
+ public static void run(String src, String file, TypeInteger arg, String expected, int spills) throws IOException {
+ String dir = "src/test/java/com/seaofnodes/simple/progs";
+ String cfile = dir+"/"+file+".c";
+ String efile = "build/objs/"+file;
+ run(src, CALL_CONVENTION, arg, "", cfile, efile, "S", expected, spills);
+ }
+
public static void run(String dir, String file, String expected, int spills ) throws IOException {
run(dir, file,null, expected, spills, false);
}
+ // Do not link with c file - no inline.
public static void runS(String file, String expected, int spills ) throws IOException {
run("src/test/java/com/seaofnodes/simple/progs", file, null, expected, spills, true);
}
+
+ // Do not link with c file - just inline with source.
+ public static void runSF(String name, String src, TypeInteger arg, String expected, int spills ) throws IOException {
+ String efile = "build/objs/"+name;
+ run(src,CALL_CONVENTION,arg, "",null,efile,"S",expected,spills);
+ }
+
public static void runS(String file, TypeInteger arg, String expected, int spills ) throws IOException {
run("src/test/java/com/seaofnodes/simple/progs", file, arg, expected, spills, true);
}
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/TestRisc5.java b/chapter24/src/test/java/com/seaofnodes/simple/TestRisc5.java
index 041ed833..a8f6817e 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/TestRisc5.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/TestRisc5.java
@@ -13,13 +13,19 @@ import static org.junit.Assert.*;
public abstract class TestRisc5 {
public static EvalRisc5 build( String file, int arg, int spills, boolean print ) throws IOException {
- return build("src/test/java/com/seaofnodes/simple/progs",file, null, arg, spills, print);
+ String dir = "src/test/java/com/seaofnodes/simple/progs";
+ String src = Files.readString(Path.of(dir + "/"+file+".smp"));
+ return build(dir,src, file, null, arg, spills, print);
+ }
+
+ public static EvalRisc5 build( String name, String src, int arg, int spills, boolean print ) throws IOException {
+ String dir = "src/test/java/com/seaofnodes/simple/progs";
+ return build(dir, src ,name, null, arg, spills, print);
}
// Compile and run a simple program
- public static EvalRisc5 build( String dir, String file, String main, int arg, int spills, boolean print ) throws IOException {
+ public static EvalRisc5 build( String dir, String src, String file, String main, int arg, int spills, boolean print ) throws IOException {
// Compile and export Simple
- String src = Files.readString(Path.of(dir+"/"+file+".smp"));
CodeGen code = new CodeGen(src).driver("riscv", "SystemV",null);
if( print ) { code.print_as_hex(); System.out.print(code.asm()); }
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/and1.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/and1.smp
deleted file mode 100644
index ef4c904f..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/and1.smp
+++ /dev/null
@@ -1,10 +0,0 @@
-// -*- mode: java; -*-
-int a = 1;
-int b = 1;
-
-if(a && b) {
- sys.io.p("And");
-} else {
- sys.io.p("Or");
-}
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/and2.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/and2.smp
deleted file mode 100644
index 2a463c94..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/and2.smp
+++ /dev/null
@@ -1,16 +0,0 @@
-// -*- mode: java; -*-
-int a = 1;
-int b = 1;
-
-int x=1;
-int y=1;
-int z=0;
-
-int g = x++ && y++ && z++;
-
-if(x == 2 && y == 2 && z == 1 && g == 0) {
- sys.io.p("Effected");
-} else {
- sys.io.p("Not effected");
-}
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/and3.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/and3.smp
deleted file mode 100644
index aadbdfed..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/and3.smp
+++ /dev/null
@@ -1,14 +0,0 @@
-// -*- mode: java; -*-
-int a = 1;
-int b = 1;
-
-var sq = { int x ->
- x*x;
-};
-
-if(a && sq(0)) {
- sys.io.p("And");
-} else {
- sys.io.p("Or");
-}
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/antiDep1.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/antiDep1.smp
deleted file mode 100644
index b18dfd16..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/antiDep1.smp
+++ /dev/null
@@ -1,11 +0,0 @@
-// -*- mode: java; -*-
-struct S { int f; };
-var v0 = new S;
-S? v1;
-if (arg) v1 = new S;
-if (v1) {
- v0.f = v1.f;
-} else {
- v0.f = 2;
-}
-return v0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/arg_count.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/arg_count.smp
deleted file mode 100644
index 6b6bc0ae..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/arg_count.smp
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- mode: java; -*-
-val addAll = { int i0, flt f1, int i2, flt f3, int i4, flt f5, int i6, flt f7, int x8, flt f9, int i10, flt f11, int i12, flt f13, int i14, flt f15, int x16, flt f17 int x18, flt f19 ->
- return
- i0 + f1+ i2+ f3+ i4+ f5+ i6+ f7+ x8 +f9 +
- i10+f11+i12+f13+i14+f15+x16+f17+x18+f19 ;
-};
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/array1.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/array1.smp
deleted file mode 100644
index 6b10f92c..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/array1.smp
+++ /dev/null
@@ -1,9 +0,0 @@
-// -*- mode: java; -*-
-int[] !ary = new int[arg];
-// Fill [0,1,2,3,4,...]
-for( int i=0; i<ary#; i++ )
- ary[i] = i;
-// Fill [0,1,3,6,10,...]
-for( int i=0; i<ary#-1; i++ )
- ary[i+1] += ary[i];
-return ary[1] * 1000 + ary[3]; // 1 * 1000 + 6
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/brain_fuck.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/brain_fuck.smp
deleted file mode 100644
index ed90cb84..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/brain_fuck.smp
+++ /dev/null
@@ -1,46 +0,0 @@
-// -*- mode: java; -*-
-val brain_fuck = { ->
- u8[] !program = new u8[106];program[0] = 43;program[1] = 43;program[2] = 43;program[3] = 43;program[4] = 43;program[5] = 43;program[6] = 43;program[7] = 43;program[8] = 91;program[9] = 62;program[10] = 43;program[11] = 43;program[12] = 43;program[13] = 43;program[14] = 91;program[15] = 62;program[16] = 43;program[17] = 43;program[18] = 62;program[19] = 43;program[20] = 43;program[21] = 43;program[22] = 62;program[23] = 43;program[24] = 43;program[25] = 43;program[26] = 62;program[27] = 43;program[28] = 60;program[29] = 60;program[30] = 60;program[31] = 60;program[32] = 45;program[33] = 93;program[34] = 62;program[35] = 43;program[36] = 62;program[37] = 43;program[38] = 62;program[39] = 45;program[40] = 62;program[41] = 62;program[42] = 43;program[43] = 91;program[44] = 60;program[45] = 93;program[46] = 60;program[47] = 45;program[48] = 93;program[49] = 62;program[50] = 62;program[51] = 46;program[52] = 62;program[53] = 45;program[54] = 45;program[55] = 45;program[56] = 46;program[57] = 43;program[58] = 43;program[59] = 43;program[60] = 43;program[61] = 43;program[62] = 43;program[63] = 43;program[64] = 46;program[65] = 46;program[66] = 43;program[67] = 43;program[68] = 43;program[69] = 46;program[70] = 62;program[71] = 62;program[72] = 46;program[73] = 60;program[74] = 45;program[75] = 46;program[76] = 60;program[77] = 46;program[78] = 43;program[79] = 43;program[80] = 43;program[81] = 46;program[82] = 45;program[83] = 45;program[84] = 45;program[85] = 45;program[86] = 45;program[87] = 45;program[88] = 46;program[89] = 45;program[90] = 45;program[91] = 45;program[92] = 45;program[93] = 45;program[94] = 45;program[95] = 45;program[96] = 45;program[97] = 46;program[98] = 62;program[99] = 62;program[100] = 43;program[101] = 46;program[102] = 62;program[103] = 43;program[104] = 43;program[105] = 46;
- int d = 0;
- u8[] !output = new u8[0];
- u8[] !data = new u8[100];
-
- for( int pc = 0; pc < program#; pc++ ) {
- var command = program[pc];
- if (command == 62) {
- d++;
- } else if (command == 60) {
- d--;
- } else if (command == 43) {
- data[d]++;
- } else if (command == 45) {
- data[d]--;
- } else if (command == 46) {
- // Output a byte; increase the output array size
- var old = output;
- output = new u8[output# + 1];
- for( int i = 0; i < old#; i++ )
- output[i] = old[i];
- output[old#] = data[d]; // Add the extra byte on the end
- } else if (command == 44) {
- data[d] = 42;
- } else if (command == 91) {
- if (data[d] == 0) {
- for( int d = 1; d > 0; ) {
- command = program[++pc];
- if (command == 91) d++;
- if (command == 93) d--;
- }
- }
- } else if (command == 93) {
- if (data[d]) {
- for( int d = 1; d > 0; ) {
- command = program[--pc];
- if (command == 93) d++;
- if (command == 91) d--;
- }
- }
- }
- }
- return output;
-};
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/echo.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/echo.smp
deleted file mode 100644
index 8eafd73b..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/echo.smp
+++ /dev/null
@@ -1,3 +0,0 @@
-// -*- mode: java; -*-
-// Echo stdin to stdout.
-return sys.io.p( sys.io.stdin() );
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/fib.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/fib.smp
deleted file mode 100644
index 1512541b..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/fib.smp
+++ /dev/null
@@ -1,11 +0,0 @@
-// -*- mode: java; -*-
-val fib = {int n ->
- int f1=1;
- int f2=1;
- while( n-- > 1 ){
- int temp = f1+f2;
- f1=f2;
- f2=temp;
- }
- return f2;
-}; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/helloWorld.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/helloWorld.smp
deleted file mode 100644
index 07ff935f..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/helloWorld.smp
+++ /dev/null
@@ -1,3 +0,0 @@
-// -*- mode: java; -*-
-sys.io.p("Hello, World!");
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/jig.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/jig.smp
deleted file mode 100644
index 001e8eae..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/jig.smp
+++ /dev/null
@@ -1,19 +0,0 @@
-// -*- mode: java; -*-
-//2298769344378917493
-//========= Reduced =========
-struct s0 {
- bool v1;
- i16 v2;
- int v3;
- i8 v4;
- byte v5;
-};
-while(new s0.v3)
- while(new s0.v5<<new s0.v4) {}
-if(0) {
- if(0) {
- flt !P5ZUD4=new s0.v2;
- }
- while(0) {}
-}
-return new s0.v1;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/large.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/large.smp
deleted file mode 100644
index 7f151f60..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/large.smp
+++ /dev/null
@@ -1,5344 +0,0 @@
-
-struct stbi_io_callbacks {
- { i64 u8[] int -> int } read = "C"; // fill 'data' with 'size' bytes. return number of bytes actually read
- { i64 int -> int } skip = "C"; // skip the next 'n' bytes, or 'unget' the last -n bytes if negative
- { i64 -> int } eof = "C"; // returns nonzero if we are at end of file/data
-};
-
-struct stbi__context {
- u32 img_x, img_y;
- int img_n, img_out_n;
-
- stbi_io_callbacks io;
- u8[]io_user_data;
-
- int read_from_callbacks;
- int buflen;
- u8[] buffer_start;
- int callback_already_read;
-
- u8[] img_buffer;
- int img_buffer_end;
- u8[] img_buffer_original;
- int img_buffer_original_end;
-};
-
-{ stbi__context -> u8 } stbi__get8 = "C";
-
-val sample = { stbi__context s, int pal_len ->
- var palette = new u8[1024];
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
- for (int i=0; i < pal_len; ++i) {
- palette[i*4+3] = 0;
-
- palette[i*4+0] = stbi__get8(s);
- palette[i*4+1] = stbi__get8(s);
- palette[i*4+2] = stbi__get8(s);
- palette[i*4+3] = 255;
- for (int j=0; j < pal_len; ++j) {
- palette[j*4+3] = 0;
-
- palette[j*4+0] = stbi__get8(s);
- palette[j*4+1] = stbi__get8(s);
- palette[j*4+2] = stbi__get8(s);
- palette[j*4+3] = 255;
- }
- }
-
- return palette;
-};
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/loop2.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/loop2.smp
deleted file mode 100644
index 01ec827e..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/loop2.smp
+++ /dev/null
@@ -1,10 +0,0 @@
-// -*- mode: java; -*-
-int i = 0;
-while(true) {
- i += 1;
- if( i==0 ) continue;
- if( i==1 ) continue;
- if( i==2 ) break;
- continue;
-}
-return i;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp
deleted file mode 100644
index be2dffec..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp
+++ /dev/null
@@ -1,12 +0,0 @@
-// -*- mode: java; -*-
-// Newtons approximation to the square root
-val test_sqrt = { flt x ->
- flt epsilon = 1e-15;
- flt guess = x;
- while( 1 ) {
- flt next = (x/guess + guess)/2;
- if( guess-epsilon <= next & next <= guess+epsilon ) return guess;
- //if( guess==next ) return guess;
- guess = next;
- }
-};
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/no_stack_arg_count.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/no_stack_arg_count.smp
deleted file mode 100644
index 20a05445..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/no_stack_arg_count.smp
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- mode: java; -*-
-val addAll = { int i0, flt f1, int i2, flt f3, int i4, flt f5, int i6, flt f7, int x8, flt f9, int i10, flt f11, int i12, flt f13, int i14, flt f15 ->
- return
- i0 + f1+ i2+ f3+ i4+ f5+ i6+ f7+ x8 +f9 +
- i10+f11+i12+f13+i14+f15;
-};
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/or1.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/or1.smp
deleted file mode 100644
index f5f526c3..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/or1.smp
+++ /dev/null
@@ -1,12 +0,0 @@
-// -*- mode: java; -*-
-int a = 1;
-int b = 0;
-
-if(a++ || b++ ) {
- if(b == 0 && a == 2) {
- sys.io.p("Or");
- }
-} else{
- sys.io.p("And");
-}
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/or2.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/or2.smp
deleted file mode 100644
index ac688b5a..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/or2.smp
+++ /dev/null
@@ -1,23 +0,0 @@
-// -*- mode: java; -*-
-int a = 1;
-int b = 1;
-
-int x = -1;
-int y=1;
-int z= -1;
-
-int g = x++ || y++ || z++;
-
-int switch = 0;
-if(x == 4 || y == 4 || z == 4) {
- switch = -1;
-} else {
- switch = 1;
-}
-int cd = 1;
-if((x == 0 && y == 1 && z==-1) && switch && g) {
- sys.io.p("Effected");
-} else {
- sys.io.p("Not effected");
-}
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/person.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/person.smp
deleted file mode 100644
index 507fb83b..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/person.smp
+++ /dev/null
@@ -1,9 +0,0 @@
-// -*-java-*-
-struct Person {
- i32 age;
-};
-
-val fcn = { Person?[] ps, int x ->
- if( ps[x] )
- ps[x].age++;
-}; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/print.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/print.smp
deleted file mode 100644
index 3bb86268..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/print.smp
+++ /dev/null
@@ -1,8 +0,0 @@
-int x = 1;
-
-int y = 2;
-if(x == 1) {
-y = 1;
-}
-
-return y; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/ptrand.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/ptrand.smp
deleted file mode 100644
index 9d7bce88..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/ptrand.smp
+++ /dev/null
@@ -1,10 +0,0 @@
-struct S { S? fld; };
-
-val ptr = arg == 1 ? null : new S{fld = arg==1 ? null : new S{fld = null;};};
-if( ptr && ptr.fld ) {
- sys.io.p("true");
-} else {
- sys.io.p("false");
-}
-
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/riscv_load.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/riscv_load.smp
deleted file mode 100644
index 67369feb..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/riscv_load.smp
+++ /dev/null
@@ -1,4 +0,0 @@
-struct Person { i32 age;};
-Person !p = new Person;
-p.age += arg;
-return p.age;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_1.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_1.smp
deleted file mode 100644
index cfb3fbcc..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_1.smp
+++ /dev/null
@@ -1,4 +0,0 @@
-struct Person {i64 age;}
-Person !p = new Person;
-p.age += arg;
-return p.age;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_fold_away.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_fold_away.smp
deleted file mode 100644
index 0cf70392..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_fold_away.smp
+++ /dev/null
@@ -1,5 +0,0 @@
-// Should fold away sign extend
-struct Person { i8 age;};
-Person !p = new Person;
-p.age = (arg<<48)>>48;
-return 0; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away.smp
deleted file mode 100644
index 48cc6409..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away.smp
+++ /dev/null
@@ -1,4 +0,0 @@
-struct Person { i32 age;};
-Person !p = new Person;
-p.age = (arg<<17)>>17;
-return 0; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away_2.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away_2.smp
deleted file mode 100644
index 3120429b..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/sext_str_not_fold_away_2.smp
+++ /dev/null
@@ -1,4 +0,0 @@
-struct Person { i32 age;};
-Person !p = new Person;
-p.age = (arg<<48)>>48;
-return 0; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/sieve.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/sieve.smp
deleted file mode 100644
index 569dbb96..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/sieve.smp
+++ /dev/null
@@ -1,31 +0,0 @@
-// -*- mode: java; -*-
-val sieve = { int N ->
- // The main Sieve array
- bool[] !ary = new bool[N];
- // The primes less than N
- u32[] !primes = new u32[N>>1];
- // Number of primes so far, searching at index p
- int nprimes = 0, p=2;
- // Find primes while p^2 < N
- while( p*p < N ) {
- // skip marked non-primes
- while( ary[p] ) p++;
- // p is now a prime
- primes[nprimes++] = p;
- // Mark out the rest non-primes
- for( int i = p + p; i < ary#; i+= p )
- ary[i] = true;
- p++;
- }
-
- // Now just collect the remaining primes, no more marking
- for( ; p < N; p++ )
- if( !ary[p] )
- primes[nprimes++] = p;
-
- // Copy/shrink the result array
- u32[] !rez = new u32[nprimes];
- for( int j=0; j < nprimes; j++ )
- rez[j] = primes[j];
- return rez;
-};
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/sort.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/sort.smp
deleted file mode 100644
index ae3f4f23..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/sort.smp
+++ /dev/null
@@ -1,38 +0,0 @@
-// -*- mode: java; -*-
-// based on the top-down version from https://en.wikipedia.org/wiki/Merge_sort
-
-val merge_sort = { int[] a ->
- int[] !b = new int[a#];
- copy_array (a, 0, a#, b);
- split_merge(a, 0, a#, b);
-};
-
-val split_merge = { int[] b, int begin, int end, int[] a ->
- if (end - begin <= 1)
- return 0;
- int middle = (end + begin) / 2;
- split_merge(a, begin, middle, b);
- split_merge(a, middle, end, b);
- merge(b, begin, middle, end, a);
- return 0;
-};
-
-val merge = { int[] b, int begin, int middle, int end, int[] a ->
- int i = begin, j = middle;
-
- for (int k = begin; k < end; k++) {
- // && and ||
- bool cond = false;
- if (i < middle) {
- if (j >= end) cond = true;
- else if (a[i] <= a[j]) cond = true;
- }
- if (cond) b[k] = a[i++];
- else b[k] = a[j++];
- }
-};
-
-val copy_array = { int[] a, int begin, int end, int[] b ->
- for (int k = begin; k < end; k++)
- b[k] = a[k];
-};
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_1.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_1.smp
deleted file mode 100644
index 43d7a5d1..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_1.smp
+++ /dev/null
@@ -1,9 +0,0 @@
-// -*- mode: java; -*-
-int something_specific = 11;
-
-if (10 < something_specific < 20) {
- sys.io.p("In Range");
-} else {
- sys.io.p("Out of Range");
-}
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_10x.c b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_10x.c
new file mode 100644
index 00000000..d44d5387
--- /dev/null
+++ b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_10x.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+__attribute__ ((CALL_CONV))
+extern int stack10(int x);
+
+int main() {
+int result = stack10(0);
+
+printf("%d", result);
+return 0;
+} \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_11x.c b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_11x.c
new file mode 100644
index 00000000..d71979d1
--- /dev/null
+++ b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_11x.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+__attribute__ ((CALL_CONV))
+extern int stack11(int x);
+
+int main() {
+int result = stack11(1);
+
+printf("%d", result);
+return 0;
+} \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_2.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_2.smp
deleted file mode 100644
index a867267e..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_2.smp
+++ /dev/null
@@ -1,9 +0,0 @@
-// -*- mode: java; -*-
-int score = 75;
-
-if (60 <= score < 90) {
- sys.io.p("In range");
-} else {
-sys.io.p("Out of range");
-}
-return 0; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_3.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_3.smp
deleted file mode 100644
index 27fe15ea..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_3.smp
+++ /dev/null
@@ -1,10 +0,0 @@
-// -*- mode: java; -*-
-var sq = { int x ->
- x*x;
-};
-
-int score = 5;
-
-val str = (sq(2) <= score < sq(3)) ? "In range" : "Out of range";
-sys.io.p(str);
-return 0;
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_4.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_4.smp
deleted file mode 100644
index 029245ed..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_4.smp
+++ /dev/null
@@ -1,9 +0,0 @@
-// -*- mode: java; -*-
-int something_specific = 9;
-
-if (10 < something_specific < 20) {
- sys.io.p("In Range");
-} else {
- sys.io.p("Out of Range");
-}
-return 0; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_5.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_5.smp
deleted file mode 100644
index 13a3dbff..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_5.smp
+++ /dev/null
@@ -1,14 +0,0 @@
-// -*- mode: java; -*-
-var sq = { int x ->
- x*x;
-};
-
-int score = 5;
-
-if (sq(2) <= score < sq(3)) {
-sys.io.p("In range");
-} else {
-sys.io.p("Out of range");
-}
-
-return 0; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_9x.c b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_9x.c
new file mode 100644
index 00000000..4f93ba24
--- /dev/null
+++ b/chapter24/src/test/java/com/seaofnodes/simple/progs/stacked_r_9x.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+__attribute__ ((CALL_CONV))
+extern int stack9(int x);
+
+int main() {
+int result = stack9(0);
+
+printf("%d", result);
+return 0;
+} \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/store_peep.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/store_peep.smp
deleted file mode 100644
index c3feddd5..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/store_peep.smp
+++ /dev/null
@@ -1,3 +0,0 @@
-i64 a = 123456789012345;
-i32 b = a; // truncate high order bits
-return b; \ No newline at end of file
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/progs/stringHash.smp b/chapter24/src/test/java/com/seaofnodes/simple/progs/stringHash.smp
deleted file mode 100644
index 3fa2174c..00000000
--- a/chapter24/src/test/java/com/seaofnodes/simple/progs/stringHash.smp
+++ /dev/null
@@ -1,30 +0,0 @@
-// -*- mode: java; -*-
-struct String {
- u8[] cs;
- int _hashCode;
-};
-
-// Compare two Strings
-val equals = { String self, String s ->
- if( self == s ) return true;
- if( self.cs# != s.cs# ) return false;
- for( int i=0; i< self.cs#; i++ )
- if( self.cs[i] != s.cs[i] )
- return false;
- return true;
-};
-
-// Return the String hashCode (cached, and never 0)
-val hashCode = { String self ->
- self._hashCode
- ? self._hashCode
- : (self._hashCode = _hashCodeString(self));
-};
-
-val _hashCodeString = { String self ->
- int hash=0;
- for( int i=0; i< self.cs#; i++ )
- hash = hash*31 + self.cs[i];
- if( !hash ) hash = 123456789;
- return hash;
-};