diff src/adplug/core/dmo.cxx @ 955:4709ce4e209e trunk

[svn] Run indent -ts4 -nut -bli0 -cdw on this messy lot. Upstream is not consistent with whitespace anyway, no loss there.
author chainsaw
date Sat, 14 Apr 2007 15:23:50 -0700
parents cae46214b8bf
children 224ebe9caaac
line wrap: on
line diff
--- a/src/adplug/core/dmo.cxx	Sat Apr 14 08:48:41 2007 -0700
+++ b/src/adplug/core/dmo.cxx	Sat Apr 14 15:23:50 2007 -0700
@@ -44,361 +44,401 @@
 
 /* -------- Public Methods -------------------------------- */
 
-CPlayer *CdmoLoader::factory(Copl *newopl)
+CPlayer *
+CdmoLoader::factory (Copl * newopl)
 {
-  return new CdmoLoader(newopl);
+  return new CdmoLoader (newopl);
 }
 
-bool CdmoLoader::load(VFSFile *fd, const CFileProvider &fp)
+bool
+CdmoLoader::load (VFSFile * fd, const CFileProvider & fp)
 {
-  int i,j;
+  int i, j;
   binistream *f;
-  std::string filename(fd->uri);
+  std::string filename (fd->uri);
 
   // check header
   dmo_unpacker *unpacker = new dmo_unpacker;
   unsigned char chkhdr[16];
 
-  f = fp.open(fd); if(!f) return false;
-  if(!fp.extension(filename, ".dmo")) return false;
-
-  f->readString((char *)chkhdr, 16);
+  f = fp.open (fd);
+  if (!f)
+    return false;
+  if (!fp.extension (filename, ".dmo"))
+    return false;
 
-  if (!unpacker->decrypt(chkhdr, 16))
-    {
-      delete unpacker;
-      fp.close(f);
-      return false;
-    }
+  f->readString ((char *) chkhdr, 16);
+
+  if (!unpacker->decrypt (chkhdr, 16))
+  {
+    delete unpacker;
+    fp.close (f);
+    return false;
+  }
 
   // get file size
-  long packed_length = fp.filesize(f);
-  f->seek(0);
+  long packed_length = fp.filesize (f);
+  f->seek (0);
 
-  unsigned char *packed_module = new unsigned char [packed_length];
+  unsigned char *packed_module = new unsigned char[packed_length];
 
   // load file
-  f->readString((char *)packed_module, packed_length);
-  fp.close(f);
+  f->readString ((char *) packed_module, packed_length);
+  fp.close (f);
 
   // decrypt
-  unpacker->decrypt(packed_module,packed_length);
+  unpacker->decrypt (packed_module, packed_length);
 
-  long unpacked_length = 0x2000 * ARRAY_AS_WORD(packed_module, 12);
-  unsigned char *module = new unsigned char [unpacked_length];
+  long unpacked_length = 0x2000 * ARRAY_AS_WORD (packed_module, 12);
+  unsigned char *module = new unsigned char[unpacked_length];
 
   // unpack
-  if (!unpacker->unpack(packed_module+12,module,unpacked_length))
-    {
-      delete unpacker;
-      delete [] packed_module;
-      delete [] module;
-      return false;
-    }
+  if (!unpacker->unpack (packed_module + 12, module, unpacked_length))
+  {
+    delete unpacker;
+    delete[]packed_module;
+    delete[]module;
+    return false;
+  }
 
   delete unpacker;
-  delete [] packed_module;
+  delete[]packed_module;
 
   // "TwinTeam" - signed ?
-  if (memcmp(module,"TwinTeam Module File""\x0D\x0A",22))
-    {
-      delete module;
-      return false;
-    }
+  if (memcmp (module, "TwinTeam Module File" "\x0D\x0A", 22))
+  {
+    delete module;
+    return false;
+  }
 
   // load header
-  binisstream	uf(module, unpacked_length);
-  uf.setFlag(binio::BigEndian, false); uf.setFlag(binio::FloatIEEE);
+  binisstream uf (module, unpacked_length);
+  uf.setFlag (binio::BigEndian, false);
+  uf.setFlag (binio::FloatIEEE);
 
-  memset(&header,0,sizeof(s3mheader));
+  memset (&header, 0, sizeof (s3mheader));
 
-  uf.ignore(22);				// ignore DMO header ID string
-  uf.readString(header.name, 28);
+  uf.ignore (22);               // ignore DMO header ID string
+  uf.readString (header.name, 28);
 
-  uf.ignore(2);				// _unk_1
-  header.ordnum  = uf.readInt(2);
-  header.insnum  = uf.readInt(2);
-  header.patnum  = uf.readInt(2);
-  uf.ignore(2);				// _unk_2
-  header.is      = uf.readInt(2);
-  header.it      = uf.readInt(2);
+  uf.ignore (2);                // _unk_1
+  header.ordnum = uf.readInt (2);
+  header.insnum = uf.readInt (2);
+  header.patnum = uf.readInt (2);
+  uf.ignore (2);                // _unk_2
+  header.is = uf.readInt (2);
+  header.it = uf.readInt (2);
 
-  memset(header.chanset,0xFF,32);
+  memset (header.chanset, 0xFF, 32);
 
-  for (i=0;i<9;i++)
+  for (i = 0; i < 9; i++)
     header.chanset[i] = 0x10 + i;
 
-  uf.ignore(32);				// ignore panning settings for all 32 channels
+  uf.ignore (32);               // ignore panning settings for all 32 channels
 
   // load orders
-  for(i = 0; i < 256; i++) orders[i] = uf.readInt(1);
+  for (i = 0; i < 256; i++)
+    orders[i] = uf.readInt (1);
 
   orders[header.ordnum] = 0xFF;
 
   // load pattern lengths
   unsigned short my_patlen[100];
-  for(i = 0; i < 100; i++) my_patlen[i] = uf.readInt(2);
+  for (i = 0; i < 100; i++)
+    my_patlen[i] = uf.readInt (2);
 
   // load instruments
   for (i = 0; i < header.insnum; i++)
-    {
-      memset(&inst[i],0,sizeof(s3minst));
+  {
+    memset (&inst[i], 0, sizeof (s3minst));
 
-      uf.readString(inst[i].name, 28);
+    uf.readString (inst[i].name, 28);
 
-      inst[i].volume = uf.readInt(1);
-      inst[i].dsk    = uf.readInt(1);
-      inst[i].c2spd  = uf.readInt(4);
-      inst[i].type   = uf.readInt(1);
-      inst[i].d00    = uf.readInt(1);
-      inst[i].d01    = uf.readInt(1);
-      inst[i].d02    = uf.readInt(1);
-      inst[i].d03    = uf.readInt(1);
-      inst[i].d04    = uf.readInt(1);
-      inst[i].d05    = uf.readInt(1);
-      inst[i].d06    = uf.readInt(1);
-      inst[i].d07    = uf.readInt(1);
-      inst[i].d08    = uf.readInt(1);
-      inst[i].d09    = uf.readInt(1);
-      inst[i].d0a    = uf.readInt(1);
-      /*
-       * Originally, riven sets d0b = d0a and ignores 1 byte in the
-       * stream, but i guess this was a typo, so i read it here.
-       */
-      inst[i].d0b    = uf.readInt(1);
-    }
+    inst[i].volume = uf.readInt (1);
+    inst[i].dsk = uf.readInt (1);
+    inst[i].c2spd = uf.readInt (4);
+    inst[i].type = uf.readInt (1);
+    inst[i].d00 = uf.readInt (1);
+    inst[i].d01 = uf.readInt (1);
+    inst[i].d02 = uf.readInt (1);
+    inst[i].d03 = uf.readInt (1);
+    inst[i].d04 = uf.readInt (1);
+    inst[i].d05 = uf.readInt (1);
+    inst[i].d06 = uf.readInt (1);
+    inst[i].d07 = uf.readInt (1);
+    inst[i].d08 = uf.readInt (1);
+    inst[i].d09 = uf.readInt (1);
+    inst[i].d0a = uf.readInt (1);
+    /*
+     * Originally, riven sets d0b = d0a and ignores 1 byte in the
+     * stream, but i guess this was a typo, so i read it here.
+     */
+    inst[i].d0b = uf.readInt (1);
+  }
 
   // load patterns
-  for (i = 0; i < header.patnum; i++) {
-    long cur_pos = uf.pos();
+  for (i = 0; i < header.patnum; i++)
+  {
+    long cur_pos = uf.pos ();
 
-    for (j = 0; j < 64; j++) {
-      while (1) {
-	unsigned char token = uf.readInt(1);
+    for (j = 0; j < 64; j++)
+    {
+      while (1)
+      {
+        unsigned char token = uf.readInt (1);
 
-	if (!token)
-	  break;
+        if (!token)
+          break;
 
-	unsigned char chan = token & 31;
+        unsigned char chan = token & 31;
 
-	// note + instrument ?
-	if (token & 32) {
-	  unsigned char bufbyte = uf.readInt(1);
+        // note + instrument ?
+        if (token & 32)
+        {
+          unsigned char bufbyte = uf.readInt (1);
 
-	  pattern[i][j][chan].note = bufbyte & 15;
-	  pattern[i][j][chan].oct = bufbyte >> 4;
-	  pattern[i][j][chan].instrument = uf.readInt(1);
-	}
+          pattern[i][j][chan].note = bufbyte & 15;
+          pattern[i][j][chan].oct = bufbyte >> 4;
+          pattern[i][j][chan].instrument = uf.readInt (1);
+        }
 
-	// volume ?
-	if (token & 64)
-	  pattern[i][j][chan].volume = uf.readInt(1);
+        // volume ?
+        if (token & 64)
+          pattern[i][j][chan].volume = uf.readInt (1);
 
-	// command ?
-	if (token & 128) {
-	  pattern[i][j][chan].command = uf.readInt(1);
-	  pattern[i][j][chan].info = uf.readInt(1);
-	}
+        // command ?
+        if (token & 128)
+        {
+          pattern[i][j][chan].command = uf.readInt (1);
+          pattern[i][j][chan].info = uf.readInt (1);
+        }
       }
     }
 
-    uf.seek(cur_pos + my_patlen[i]);
+    uf.seek (cur_pos + my_patlen[i]);
   }
 
-  delete [] module;
-  rewind(0);
+  delete[]module;
+  rewind (0);
   return true;
 }
 
-std::string CdmoLoader::gettype()
+std::string CdmoLoader::gettype ()
 {
-  return std::string("TwinTeam (packed S3M)");
+  return std::string ("TwinTeam (packed S3M)");
 }
 
-std::string CdmoLoader::getauthor()
+std::string CdmoLoader::getauthor ()
 {
   /*
-    All available .DMO modules written by one composer. And because all .DMO
-    stuff was lost due to hd crash (TwinTeam guys said this), there are
-    never(?) be another.
-  */
-  return std::string("Benjamin GERARDIN");
+     All available .DMO modules written by one composer. And because all .DMO
+     stuff was lost due to hd crash (TwinTeam guys said this), there are
+     never(?) be another.
+   */
+  return std::string ("Benjamin GERARDIN");
 }
 
 /* -------- Private Methods ------------------------------- */
 
-unsigned short CdmoLoader::dmo_unpacker::brand(unsigned short range)
+unsigned short
+CdmoLoader::dmo_unpacker::brand (unsigned short range)
 {
-  unsigned short ax,bx,cx,dx;
+  unsigned short
+    ax,
+    bx,
+    cx,
+    dx;
 
-  ax = LOWORD(bseed);
-  bx = HIWORD(bseed);
+  ax = LOWORD (bseed);
+  bx = HIWORD (bseed);
   cx = ax;
-  ax = LOWORD(cx * 0x8405);
-  dx = HIWORD(cx * 0x8405);
+  ax = LOWORD (cx * 0x8405);
+  dx = HIWORD (cx * 0x8405);
   cx <<= 3;
-  cx = (((HIBYTE(cx) + LOBYTE(cx)) & 0xFF) << 8) + LOBYTE(cx);
+  cx = (((HIBYTE (cx) + LOBYTE (cx)) & 0xFF) << 8) + LOBYTE (cx);
   dx += cx;
   dx += bx;
   bx <<= 2;
   dx += bx;
-  dx = (((HIBYTE(dx) + LOBYTE(bx)) & 0xFF) << 8) + LOBYTE(dx);
+  dx = (((HIBYTE (dx) + LOBYTE (bx)) & 0xFF) << 8) + LOBYTE (dx);
   bx <<= 5;
-  dx = (((HIBYTE(dx) + LOBYTE(bx)) & 0xFF) << 8) + LOBYTE(dx);
+  dx = (((HIBYTE (dx) + LOBYTE (bx)) & 0xFF) << 8) + LOBYTE (dx);
   ax += 1;
-  if (!ax) dx += 1;
+  if (!ax)
+    dx += 1;
 
   // leave it that way or amd64 might get it wrong
   bseed = dx;
   bseed <<= 16;
   bseed += ax;
 
-  return HIWORD(HIWORD(LOWORD(bseed) * range) + HIWORD(bseed) * range);
+  return HIWORD (HIWORD (LOWORD (bseed) * range) + HIWORD (bseed) * range);
 }
 
-bool CdmoLoader::dmo_unpacker::decrypt(unsigned char *buf, long len)
+bool
+CdmoLoader::dmo_unpacker::decrypt (unsigned char *buf, long len)
 {
-  unsigned long seed = 0;
-  int i;
-
-  bseed = ARRAY_AS_DWORD(buf, 0);
+  unsigned long
+    seed = 0;
+  int
+    i;
 
-  for (i=0; i < ARRAY_AS_WORD(buf, 4) + 1; i++)
-    seed += brand(0xffff);
+  bseed = ARRAY_AS_DWORD (buf, 0);
 
-  bseed = seed ^ ARRAY_AS_DWORD(buf, 6);
+  for (i = 0; i < ARRAY_AS_WORD (buf, 4) + 1; i++)
+    seed += brand (0xffff);
 
-  if (ARRAY_AS_WORD(buf, 10) != brand(0xffff))
+  bseed = seed ^ ARRAY_AS_DWORD (buf, 6);
+
+  if (ARRAY_AS_WORD (buf, 10) != brand (0xffff))
     return false;
 
-  for (i=0;i<(len-12);i++)
-    buf[12+i] ^= brand(0x100);
+  for (i = 0; i < (len - 12); i++)
+    buf[12 + i] ^= brand (0x100);
 
   buf[len - 2] = buf[len - 1] = 0;
 
   return true;
 }
 
-short CdmoLoader::dmo_unpacker::unpack_block(unsigned char *ibuf, long ilen, unsigned char *obuf)
+short
+CdmoLoader::dmo_unpacker::unpack_block (unsigned char *ibuf, long ilen,
+                                        unsigned char *obuf)
 {
-  unsigned char code,par1,par2;
-  unsigned short ax,bx,cx;
+  unsigned char
+    code,
+    par1,
+    par2;
+  unsigned short
+    ax,
+    bx,
+    cx;
 
-  unsigned char *ipos = ibuf;
-  unsigned char *opos = obuf;
+  unsigned char *
+    ipos = ibuf;
+  unsigned char *
+    opos = obuf;
 
   // LZ77 child
   while (ipos - ibuf < ilen)
-    {
-      code = *ipos++;
+  {
+    code = *ipos++;
 
-      // 00xxxxxx: copy (xxxxxx + 1) bytes
-      if ((code >> 6) == 0)
-	{
-	  cx = (code & 0x3F) + 1;
+    // 00xxxxxx: copy (xxxxxx + 1) bytes
+    if ((code >> 6) == 0)
+    {
+      cx = (code & 0x3F) + 1;
 
-	  if(opos + cx >= oend)
-	    return -1;
+      if (opos + cx >= oend)
+        return -1;
 
-	  for (int i=0;i<cx;i++)
-	    *opos++ = *ipos++;
+      for (int i = 0; i < cx; i++)
+        *opos++ = *ipos++;
 
-	  continue;
-	}
+      continue;
+    }
 
-      // 01xxxxxx xxxyyyyy: copy (Y + 3) bytes from (X + 1)
-      if ((code >> 6) == 1)
-	{
-	  par1 = *ipos++;
+    // 01xxxxxx xxxyyyyy: copy (Y + 3) bytes from (X + 1)
+    if ((code >> 6) == 1)
+    {
+      par1 = *ipos++;
 
-	  ax = ((code & 0x3F) << 3) + ((par1 & 0xE0) >> 5) + 1;
-	  cx = (par1 & 0x1F) + 3;
+      ax = ((code & 0x3F) << 3) + ((par1 & 0xE0) >> 5) + 1;
+      cx = (par1 & 0x1F) + 3;
 
-	  if(opos + cx >= oend)
-	    return -1;
+      if (opos + cx >= oend)
+        return -1;
 
-	  for(int i=0;i<cx;i++)
-	    *opos++ = *(opos - ax);
+      for (int i = 0; i < cx; i++)
+        *opos++ = *(opos - ax);
 
-	  continue;
-	}
+      continue;
+    }
 
-      // 10xxxxxx xyyyzzzz: copy (Y + 3) bytes from (X + 1); copy Z bytes
-      if ((code >> 6) == 2)
-	{
-	  int i;
+    // 10xxxxxx xyyyzzzz: copy (Y + 3) bytes from (X + 1); copy Z bytes
+    if ((code >> 6) == 2)
+    {
+      int
+        i;
 
-	  par1 = *ipos++;
+      par1 = *ipos++;
 
-	  ax = ((code & 0x3F) << 1) + (par1 >> 7) + 1;
-	  cx = ((par1 & 0x70) >> 4) + 3;
-	  bx = par1 & 0x0F;
+      ax = ((code & 0x3F) << 1) + (par1 >> 7) + 1;
+      cx = ((par1 & 0x70) >> 4) + 3;
+      bx = par1 & 0x0F;
 
-	  if(opos + bx + cx >= oend)
-	    return -1;
+      if (opos + bx + cx >= oend)
+        return -1;
 
-	  for(i=0;i<cx;i++)
-	    *opos++ = *(opos - ax);
+      for (i = 0; i < cx; i++)
+        *opos++ = *(opos - ax);
 
-	  for (i=0;i<bx;i++)
-	    *opos++ = *ipos++;
+      for (i = 0; i < bx; i++)
+        *opos++ = *ipos++;
 
-	  continue;
-	}
+      continue;
+    }
 
-      // 11xxxxxx xxxxxxxy yyyyzzzz: copy (Y + 4) from X; copy Z bytes
-      if ((code >> 6) == 3)
-	{
-	  int i;
+    // 11xxxxxx xxxxxxxy yyyyzzzz: copy (Y + 4) from X; copy Z bytes
+    if ((code >> 6) == 3)
+    {
+      int
+        i;
 
-	  par1 = *ipos++;
-	  par2 = *ipos++;
+      par1 = *ipos++;
+      par2 = *ipos++;
 
-	  bx = ((code & 0x3F) << 7) + (par1 >> 1);
-	  cx = ((par1 & 0x01) << 4) + (par2 >> 4) + 4;
-	  ax = par2 & 0x0F;
+      bx = ((code & 0x3F) << 7) + (par1 >> 1);
+      cx = ((par1 & 0x01) << 4) + (par2 >> 4) + 4;
+      ax = par2 & 0x0F;
 
-	  if(opos + ax + cx >= oend)
-	    return -1;
+      if (opos + ax + cx >= oend)
+        return -1;
 
-	  for(i=0;i<cx;i++)
-	    *opos++ = *(opos - bx);
+      for (i = 0; i < cx; i++)
+        *opos++ = *(opos - bx);
 
-	  for (i=0;i<ax;i++)
-	    *opos++ = *ipos++;
+      for (i = 0; i < ax; i++)
+        *opos++ = *ipos++;
 
-	  continue;
-	}
+      continue;
     }
+  }
 
   return opos - obuf;
 }
 
-long CdmoLoader::dmo_unpacker::unpack(unsigned char *ibuf, unsigned char *obuf,
-				      unsigned long outputsize)
+long
+CdmoLoader::dmo_unpacker::unpack (unsigned char *ibuf, unsigned char *obuf,
+                                  unsigned long outputsize)
 {
-  long olen = 0;
-  unsigned short block_count = CHARP_AS_WORD(ibuf);
+  long
+    olen = 0;
+  unsigned short
+    block_count = CHARP_AS_WORD (ibuf);
 
   ibuf += 2;
-  unsigned char *block_length = ibuf;
+  unsigned char *
+    block_length = ibuf;
   ibuf += 2 * block_count;
 
   oend = obuf + outputsize;
 
-  for (int i=0;i<block_count;i++)
-    {
-      unsigned short bul = CHARP_AS_WORD(ibuf);
-
-      if(unpack_block(ibuf + 2,CHARP_AS_WORD(block_length) - 2,obuf) != bul)
-	return 0;
+  for (int i = 0; i < block_count; i++)
+  {
+    unsigned short
+      bul = CHARP_AS_WORD (ibuf);
 
-      obuf += bul;
-      olen += bul;
+    if (unpack_block (ibuf + 2, CHARP_AS_WORD (block_length) - 2, obuf) !=
+        bul)
+      return 0;
 
-      ibuf += CHARP_AS_WORD(block_length);
-      block_length += 2;
-    }
+    obuf += bul;
+    olen += bul;
+
+    ibuf += CHARP_AS_WORD (block_length);
+    block_length += 2;
+  }
 
   return olen;
 }