For each link given as http://, verify that the site is accessible over https:// and, if so, switch to it. These domains were converted: * llvm.org * clang.llvm.org * en.cppreference.com * www.dxx-rebirth.com * www.libsdl.org * www.scons.org
102 lines
3.1 KiB
C++
102 lines
3.1 KiB
C++
/*
|
|
* This file is part of the DXX-Rebirth project <https://www.dxx-rebirth.com/>.
|
|
* It is copyright by its individual contributors, as recorded in the
|
|
* project's Git history. See COPYING.txt at the top level for license
|
|
* terms and a link to the Git history.
|
|
*/
|
|
//THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
|
|
//SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
|
|
//END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
|
|
//ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
|
|
//IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
|
|
//SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
|
|
//FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
|
|
//CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
|
|
//AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
|
|
//COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|
//
|
|
// $Source: /cvsroot/dxx-rebirth/d1x-rebirth/main/snddecom.c,v $
|
|
// $Revision: 1.1.1.1 $
|
|
// $Author: zicodxx $
|
|
// $Date: 2006/03/17 19:43:28 $
|
|
//
|
|
// Routines for compressing digital sounds.
|
|
//
|
|
// $Log: snddecom.c,v $
|
|
// Revision 1.1.1.1 2006/03/17 19:43:28 zicodxx
|
|
// initial import
|
|
//
|
|
// Revision 1.1.1.1 1999/06/14 22:11:34 donut
|
|
// Import of d1x 1.37 source.
|
|
//
|
|
// Revision 2.0 1995/02/27 11:29:36 john
|
|
// New version 2.0, which has no anonymous unions, builds with
|
|
// Watcom 10.0, and doesn't require parsing BITMAPS.TBL.
|
|
//
|
|
// Revision 1.2 1994/11/30 14:08:46 john
|
|
// First version.
|
|
// Revision 1.1 1994/11/29 14:33:51 john
|
|
// Initial revision
|
|
//
|
|
|
|
#include "dxxsconf.h"
|
|
#include "snddecom.h"
|
|
#include "compiler-array.h"
|
|
|
|
const array<int, 16> index_table{{
|
|
-1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8
|
|
}};
|
|
const array<int, 89> step_table{{
|
|
7, 8, 9, 10, 11, 12, 13, 14,
|
|
16, 17, 19, 21, 23, 25, 28,
|
|
31, 34, 37, 41, 45, 50, 55,
|
|
60, 66, 73, 80, 88, 97, 107,
|
|
118, 130, 143, 157, 173, 190, 209,
|
|
230, 253, 279, 307, 337, 371, 408,
|
|
449, 494, 544, 598, 658, 724, 796,
|
|
876, 963,1060,1166,1282,1411,1552,
|
|
1707,1878,
|
|
2066,2272,2499,2749,3024,3327,3660,4026,
|
|
4428,4871,5358,5894,6484,7132,7845,8630,
|
|
9493,10442,11487,12635,13899,15289,16818,
|
|
18500,20350,22385,24623,27086,29794,32767
|
|
}};
|
|
|
|
void sound_decompress(unsigned char *data, int size, unsigned char *outp) {
|
|
int newtoken = 1;
|
|
int predicted = 0, index = 0, step = 7;
|
|
int code, diff, out;
|
|
while (size) {
|
|
if (newtoken)
|
|
code = (*data) & 15;
|
|
else {
|
|
code = (*(data++)) >> 4;
|
|
size--;
|
|
}
|
|
newtoken ^= 1;
|
|
diff = 0;
|
|
if (code & 4)
|
|
diff += step;
|
|
if (code & 2)
|
|
diff += (step >> 1);
|
|
if (code & 1)
|
|
diff += (step >> 2);
|
|
diff += (step >> 3);
|
|
if (code & 8)
|
|
diff = -diff;
|
|
out = predicted + diff;
|
|
if (out > 32767)
|
|
out = 32767;
|
|
if (out < -32768)
|
|
out = -32768;
|
|
predicted = out;
|
|
*(outp++) = ((out >> 8) & 255) ^ 0x80;
|
|
index += index_table[code];
|
|
if (index < 0)
|
|
index = 0;
|
|
if (index > 88)
|
|
index = 88;
|
|
step = step_table[index];
|
|
}
|
|
}
|