You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1826 lines
71 KiB
1826 lines
71 KiB
//==========================================================================;
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
|
// PURPOSE.
|
|
//
|
|
// Copyright (c) 1993-1999 Microsoft Corporation
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// g711.c
|
|
//
|
|
// Description:
|
|
// This file contains encode and decode routines for
|
|
// CCITT Rec. G.711 (A-law and u-law).
|
|
//
|
|
//==========================================================================;
|
|
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
#include <mmsystem.h>
|
|
#include <mmreg.h>
|
|
#include <msacm.h>
|
|
#include <msacmdrv.h>
|
|
|
|
#include "codec.h"
|
|
#include "g711.h"
|
|
|
|
#include "debug.h"
|
|
|
|
|
|
typedef BYTE HUGE *HPBYTE;
|
|
typedef WORD HUGE *HPWORD;
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
extern const SHORT BCODE AlawToPcmTable[256];
|
|
extern const SHORT BCODE UlawToPcmTable[256];
|
|
extern const BYTE BCODE AlawToUlawTable[256];
|
|
extern const BYTE BCODE UlawToAlawTable[256];
|
|
|
|
|
|
//==========================================================================;
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//==========================================================================;
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// LRESULT FNGLOBAL AlawToUlaw
|
|
//
|
|
// Description:
|
|
// This function handles the ACMDM_STREAM_CONVERT message when
|
|
// converting from A-law to u-law. This is the whole purpose
|
|
// of writing an ACM driver--to convert data. This message
|
|
// is sent after a stream has been opened (the driver receives and
|
|
// succeeds the ACMDM_STREAM_OPEN message).
|
|
//
|
|
// Arguments:
|
|
// LPACMDRVSTREAMINSTANCE padsi: Pointer to instance data for the
|
|
// conversion stream. This structure was allocated by the ACM and
|
|
// filled with the most common instance data needed for conversions.
|
|
// The information in this structure is exactly the same as it was
|
|
// during the ACMDM_STREAM_OPEN message--so it is not necessary
|
|
// to re-verify the information referenced by this structure.
|
|
//
|
|
// LPACMDRVSTREAMHEADER padsh: Pointer to stream header structure
|
|
// that defines the source data and destination buffer to convert.
|
|
//
|
|
// Return (LRESULT):
|
|
// The return value is zero (MMSYSERR_NOERROR) if this function
|
|
// succeeds with no errors. The return value is a non-zero error code
|
|
// if the function fails.
|
|
//
|
|
//
|
|
// History:
|
|
// 08/01/93 Created.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
LRESULT FNGLOBAL AlawToUlaw
|
|
(
|
|
LPACMDRVSTREAMINSTANCE padsi,
|
|
LPACMDRVSTREAMHEADER padsh
|
|
)
|
|
{
|
|
HPBYTE hpbSrc, hpbDst;
|
|
DWORD cb;
|
|
DWORD i;
|
|
PSTREAMINSTANCE psi;
|
|
|
|
psi = (PSTREAMINSTANCE)padsi->dwDriver;
|
|
|
|
cb = padsh->cbSrcLength;
|
|
cb = G711_BYTESTOSAMPLES(padsi->pwfxSrc, cb);
|
|
cb = G711_SAMPLESTOBYTES(padsi->pwfxSrc, cb);
|
|
padsh->cbSrcLengthUsed = cb;
|
|
|
|
if (cb > padsh->cbDstLength) return (ACMERR_NOTPOSSIBLE);
|
|
|
|
hpbSrc = (HPBYTE) padsh->pbSrc;
|
|
hpbDst = (HPBYTE) padsh->pbDst;
|
|
|
|
for (i=cb; i>0; i--)
|
|
*(hpbDst++) = AlawToUlawTable[*(hpbSrc++)];
|
|
|
|
//
|
|
// because the actual length of the converted data may not be the
|
|
// exact same amount as the estimate we gave in codecQueryBufferSize,
|
|
// we need to fill in the actual length we used for the destination
|
|
// buffer.
|
|
//
|
|
padsh->cbDstLengthUsed = cb;
|
|
|
|
return (MMSYSERR_NOERROR);
|
|
|
|
} // AlawToUlaw()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// LRESULT FNGLOBAL UlawToAlaw
|
|
//
|
|
// Description:
|
|
// This function handles the ACMDM_STREAM_CONVERT message when
|
|
// converting from u-law to A-law. This is the whole purpose
|
|
// of writing an ACM driver--to convert data. This message
|
|
// is sent after a stream has been opened (the driver receives and
|
|
// succeeds the ACMDM_STREAM_OPEN message).
|
|
//
|
|
// Arguments:
|
|
// LPACMDRVSTREAMINSTANCE padsi: Pointer to instance data for the
|
|
// conversion stream. This structure was allocated by the ACM and
|
|
// filled with the most common instance data needed for conversions.
|
|
// The information in this structure is exactly the same as it was
|
|
// during the ACMDM_STREAM_OPEN message--so it is not necessary
|
|
// to re-verify the information referenced by this structure.
|
|
//
|
|
// LPACMDRVSTREAMHEADER padsh: Pointer to stream header structure
|
|
// that defines the source data and destination buffer to convert.
|
|
//
|
|
// Return (LRESULT):
|
|
// The return value is zero (MMSYSERR_NOERROR) if this function
|
|
// succeeds with no errors. The return value is a non-zero error code
|
|
// if the function fails.
|
|
//
|
|
//
|
|
// History:
|
|
// 08/01/93 Created.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
LRESULT FNGLOBAL UlawToAlaw
|
|
(
|
|
LPACMDRVSTREAMINSTANCE padsi,
|
|
LPACMDRVSTREAMHEADER padsh
|
|
)
|
|
{
|
|
HPBYTE hpbSrc, hpbDst;
|
|
DWORD cb;
|
|
DWORD i;
|
|
PSTREAMINSTANCE psi;
|
|
|
|
psi = (PSTREAMINSTANCE)padsi->dwDriver;
|
|
|
|
cb = padsh->cbSrcLength;
|
|
cb = G711_BYTESTOSAMPLES(padsi->pwfxSrc, cb);
|
|
cb = G711_SAMPLESTOBYTES(padsi->pwfxSrc, cb);
|
|
padsh->cbSrcLengthUsed = cb;
|
|
|
|
if (cb > padsh->cbDstLength) return (ACMERR_NOTPOSSIBLE);
|
|
|
|
hpbSrc = (HPBYTE) padsh->pbSrc;
|
|
hpbDst = (HPBYTE) padsh->pbDst;
|
|
|
|
for (i=cb; i>0; i--)
|
|
*(hpbDst++) = UlawToAlawTable[*(hpbSrc++)];
|
|
|
|
//
|
|
// because the actual length of the converted data may not be the
|
|
// exact same amount as the estimate we gave in codecQueryBufferSize,
|
|
// we need to fill in the actual length we used for the destination
|
|
// buffer.
|
|
//
|
|
padsh->cbDstLengthUsed = cb;
|
|
|
|
return (MMSYSERR_NOERROR);
|
|
|
|
} // UlawToAlaw()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// LRESULT FNGLOBAL AlawToPcm
|
|
//
|
|
// Description:
|
|
// This function handles the ACMDM_STREAM_CONVERT message when
|
|
// converting from A-law to PCM. This is the whole purpose
|
|
// of writing an ACM driver--to convert data. This message
|
|
// is sent after a stream has been opened (the driver receives and
|
|
// succeeds the ACMDM_STREAM_OPEN message).
|
|
//
|
|
// Arguments:
|
|
// LPACMDRVSTREAMINSTANCE padsi: Pointer to instance data for the
|
|
// conversion stream. This structure was allocated by the ACM and
|
|
// filled with the most common instance data needed for conversions.
|
|
// The information in this structure is exactly the same as it was
|
|
// during the ACMDM_STREAM_OPEN message--so it is not necessary
|
|
// to re-verify the information referenced by this structure.
|
|
//
|
|
// LPACMDRVSTREAMHEADER padsh: Pointer to stream header structure
|
|
// that defines the source data and destination buffer to convert.
|
|
//
|
|
// Return (LRESULT):
|
|
// The return value is zero (MMSYSERR_NOERROR) if this function
|
|
// succeeds with no errors. The return value is a non-zero error code
|
|
// if the function fails.
|
|
//
|
|
//
|
|
// History:
|
|
// 07/28/93 Created.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
LRESULT FNGLOBAL AlawToPcm
|
|
(
|
|
LPACMDRVSTREAMINSTANCE padsi,
|
|
LPACMDRVSTREAMHEADER padsh
|
|
)
|
|
{
|
|
HPWORD hpwDst;
|
|
HPBYTE hpbSrc;
|
|
DWORD cb;
|
|
DWORD cSamples;
|
|
DWORD i;
|
|
PSTREAMINSTANCE psi;
|
|
|
|
psi = (PSTREAMINSTANCE)padsi->dwDriver;
|
|
|
|
cb = padsh->cbSrcLength;
|
|
cSamples = G711_BYTESTOSAMPLES(padsi->pwfxSrc, cb);
|
|
|
|
cb = PCM_SAMPLESTOBYTES((LPPCMWAVEFORMAT)padsi->pwfxDst, cSamples);
|
|
if (cb > padsh->cbDstLength) return (ACMERR_NOTPOSSIBLE);
|
|
|
|
cb = G711_SAMPLESTOBYTES(padsi->pwfxSrc, cSamples);
|
|
padsh->cbSrcLengthUsed = cb;
|
|
|
|
hpbSrc = (HPBYTE) padsh->pbSrc;
|
|
hpwDst = (HPWORD) padsh->pbDst;
|
|
|
|
for ( i=cb; i>0; i--)
|
|
*(hpwDst++) = AlawToPcmTable[*(hpbSrc++)];
|
|
|
|
//
|
|
// because the actual length of the converted data may not be the
|
|
// exact same amount as the estimate we gave in codecQueryBufferSize,
|
|
// we need to fill in the actual length we used for the destination
|
|
// buffer.
|
|
//
|
|
padsh->cbDstLengthUsed = (DWORD)(((HPBYTE)hpwDst) - (HPBYTE)padsh->pbDst);
|
|
|
|
return (MMSYSERR_NOERROR);
|
|
|
|
} // AlawToPcm()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// LRESULT FNGLOBAL PcmToAlaw
|
|
//
|
|
// Description:
|
|
// This function handles the ACMDM_STREAM_CONVERT message when
|
|
// converting from PCM to A-law. This is the whole purpose
|
|
// of writing an ACM driver--to convert data. This message
|
|
// is sent after a stream has been opened (the driver receives and
|
|
// succeeds the ACMDM_STREAM_OPEN message).
|
|
//
|
|
// Arguments:
|
|
// LPACMDRVSTREAMINSTANCE padsi: Pointer to instance data for the
|
|
// conversion stream. This structure was allocated by the ACM and
|
|
// filled with the most common instance data needed for conversions.
|
|
// The information in this structure is exactly the same as it was
|
|
// during the ACMDM_STREAM_OPEN message--so it is not necessary
|
|
// to re-verify the information referenced by this structure.
|
|
//
|
|
// LPACMDRVSTREAMHEADER padsh: Pointer to stream header structure
|
|
// that defines the source data and destination buffer to convert.
|
|
//
|
|
// Return (LRESULT):
|
|
// The return value is zero (MMSYSERR_NOERROR) if this function
|
|
// succeeds with no errors. The return value is a non-zero error code
|
|
// if the function fails.
|
|
//
|
|
//
|
|
// History:
|
|
// 07/28/93 Created.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
LRESULT FNGLOBAL PcmToAlaw
|
|
(
|
|
LPACMDRVSTREAMINSTANCE padsi,
|
|
LPACMDRVSTREAMHEADER padsh
|
|
)
|
|
{
|
|
HPBYTE hpbDst;
|
|
HPWORD hpwSrc;
|
|
DWORD cb;
|
|
DWORD cSamples;
|
|
DWORD i;
|
|
|
|
signed short int wSample;
|
|
BYTE alaw;
|
|
PSTREAMINSTANCE psi;
|
|
|
|
psi = (PSTREAMINSTANCE)padsi->dwDriver;
|
|
|
|
cb = padsh->cbSrcLength;
|
|
cSamples = PCM_BYTESTOSAMPLES((LPPCMWAVEFORMAT)padsi->pwfxSrc, cb);
|
|
|
|
cb = G711_SAMPLESTOBYTES(padsi->pwfxDst, cSamples);
|
|
if (cb > padsh->cbDstLength) return (ACMERR_NOTPOSSIBLE);
|
|
|
|
cb = PCM_SAMPLESTOBYTES((LPPCMWAVEFORMAT)padsi->pwfxSrc, cSamples);
|
|
padsh->cbSrcLengthUsed = cb;
|
|
|
|
// hpwSrc, hpdDst will walk thru src and dst buffers
|
|
hpbDst = (HPBYTE) padsh->pbDst;
|
|
hpwSrc = (HPWORD) padsh->pbSrc;
|
|
|
|
//
|
|
//
|
|
// Compression from 16-bit PCM
|
|
//
|
|
//
|
|
|
|
// Walk thru the source buffer. Since the source buffer has 16-bit PCM we
|
|
// need to convert cb/2 samples.
|
|
for (i=cb/2; i>0; i--)
|
|
{
|
|
|
|
// Get a signed 16-bit PCM sample from the src buffer
|
|
wSample = (signed short int) *(hpwSrc++);
|
|
|
|
// We'll init our A-law value per the sign of the PCM sample. A-law
|
|
// characters have the MSB=1 for positive PCM data. Also, we'll
|
|
// convert our signed 16-bit PCM value to it's absolute value and
|
|
// then work on that to get the rest of the A-law character bits.
|
|
if (wSample < 0)
|
|
{
|
|
alaw = 0x00;
|
|
wSample = -wSample;
|
|
if (wSample < 0) wSample = 0x7FFF;
|
|
}
|
|
else
|
|
{
|
|
alaw = 0x80;
|
|
}
|
|
|
|
// Now we test the PCM sample amplitude and create the A-law character.
|
|
// Study the CCITT A-law for more detail.
|
|
|
|
if (wSample >= 2048)
|
|
// 2048 <= wSample < 32768
|
|
{
|
|
if (wSample >= 8192)
|
|
// 8192 <= wSample < 32768
|
|
{
|
|
if (wSample >= 16384)
|
|
// 16384 <= wSample < 32768
|
|
{
|
|
alaw |= 0x70 | ((wSample >> 10) & 0x0F);
|
|
}
|
|
|
|
else
|
|
// 8192 <= wSample < 16384
|
|
{
|
|
alaw |= 0x60 | ((wSample >> 9) & 0x0F);
|
|
}
|
|
}
|
|
else
|
|
// 2048 <= wSample < 8192
|
|
{
|
|
|
|
if (wSample >= 4096)
|
|
// 4096 <= wSample < 8192
|
|
{
|
|
alaw |= 0x50 | ((wSample >> 8) & 0x0F);
|
|
}
|
|
|
|
else
|
|
// 2048 <= wSample < 4096
|
|
{
|
|
alaw |= 0x40 | ((wSample >> 7) & 0x0F);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
// 0 <= wSample < 2048
|
|
{
|
|
if (wSample >= 512)
|
|
// 512 <= wSample < 2048
|
|
{
|
|
|
|
if (wSample >= 1024)
|
|
// 1024 <= wSample < 2048
|
|
{
|
|
alaw |= 0x30 | ((wSample >> 6) & 0x0F);
|
|
}
|
|
|
|
else
|
|
// 512 <= wSample < 1024
|
|
{
|
|
alaw |= 0x20 | ((wSample >> 5) & 0x0F);
|
|
}
|
|
}
|
|
else
|
|
// 0 <= wSample < 512
|
|
{
|
|
alaw |= 0x00 | ((wSample >> 4) & 0x1F);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
*(hpbDst++) = alaw ^ 0x55; // Invert even bits
|
|
} // end for
|
|
|
|
//
|
|
// because the actual length of the converted data may not be the
|
|
// exact same amount as the estimate we gave in codecQueryBufferSize,
|
|
// we need to fill in the actual length we used for the destination
|
|
// buffer.
|
|
//
|
|
padsh->cbDstLengthUsed = (DWORD)(hpbDst - (HPBYTE)padsh->pbDst);
|
|
|
|
return (MMSYSERR_NOERROR);
|
|
|
|
} // PcmToAlaw()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// LRESULT FNGLOBAL UlawToPcm
|
|
//
|
|
// Description:
|
|
// This function handles the ACMDM_STREAM_CONVERT message when
|
|
// converting from u-law to PCM. This is the whole purpose
|
|
// of writing an ACM driver--to convert data. This message
|
|
// is sent after a stream has been opened (the driver receives and
|
|
// succeeds the ACMDM_STREAM_OPEN message).
|
|
//
|
|
// Arguments:
|
|
// LPACMDRVSTREAMINSTANCE padsi: Pointer to instance data for the
|
|
// conversion stream. This structure was allocated by the ACM and
|
|
// filled with the most common instance data needed for conversions.
|
|
// The information in this structure is exactly the same as it was
|
|
// during the ACMDM_STREAM_OPEN message--so it is not necessary
|
|
// to re-verify the information referenced by this structure.
|
|
//
|
|
// LPACMDRVSTREAMHEADER padsh: Pointer to stream header structure
|
|
// that defines the source data and destination buffer to convert.
|
|
//
|
|
// Return (LRESULT):
|
|
// The return value is zero (MMSYSERR_NOERROR) if this function
|
|
// succeeds with no errors. The return value is a non-zero error code
|
|
// if the function fails.
|
|
//
|
|
//
|
|
// History:
|
|
// 08/01/93 Created.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
LRESULT FNGLOBAL UlawToPcm
|
|
(
|
|
LPACMDRVSTREAMINSTANCE padsi,
|
|
LPACMDRVSTREAMHEADER padsh
|
|
)
|
|
{
|
|
HPBYTE hpbSrc;
|
|
HPWORD hpwDst;
|
|
DWORD cb;
|
|
DWORD cSamples;
|
|
DWORD i;
|
|
PSTREAMINSTANCE psi;
|
|
|
|
psi = (PSTREAMINSTANCE)padsi->dwDriver;
|
|
|
|
cb = padsh->cbSrcLength;
|
|
cSamples = G711_BYTESTOSAMPLES(padsi->pwfxSrc, cb);
|
|
|
|
cb = PCM_SAMPLESTOBYTES((LPPCMWAVEFORMAT)padsi->pwfxDst, cSamples);
|
|
if (cb > padsh->cbDstLength) return (ACMERR_NOTPOSSIBLE);
|
|
|
|
cb = G711_SAMPLESTOBYTES(padsi->pwfxSrc, cSamples);
|
|
padsh->cbSrcLengthUsed = cb;
|
|
|
|
hpbSrc = (HPBYTE) padsh->pbSrc;
|
|
hpwDst = (HPWORD) padsh->pbDst;
|
|
|
|
for ( i=cb; i>0; i--)
|
|
*(hpwDst++) = UlawToPcmTable[*(hpbSrc++)];
|
|
|
|
//
|
|
// because the actual length of the converted data may not be the
|
|
// exact same amount as the estimate we gave in codecQueryBufferSize,
|
|
// we need to fill in the actual length we used for the destination
|
|
// buffer.
|
|
//
|
|
padsh->cbDstLengthUsed = (DWORD)(((HPBYTE)hpwDst) - (HPBYTE)padsh->pbDst);
|
|
|
|
return (MMSYSERR_NOERROR);
|
|
|
|
} // UlawToPcm()
|
|
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// LRESULT FNGLOBAL PcmToUlaw
|
|
//
|
|
// Description:
|
|
// This function handles the ACMDM_STREAM_CONVERT message when
|
|
// converting from PCM to u-law. This is the whole purpose
|
|
// of writing an ACM driver--to convert data. This message
|
|
// is sent after a stream has been opened (the driver receives and
|
|
// succeeds the ACMDM_STREAM_OPEN message).
|
|
//
|
|
// Arguments:
|
|
// LPACMDRVSTREAMINSTANCE padsi: Pointer to instance data for the
|
|
// conversion stream. This structure was allocated by the ACM and
|
|
// filled with the most common instance data needed for conversions.
|
|
// The information in this structure is exactly the same as it was
|
|
// during the ACMDM_STREAM_OPEN message--so it is not necessary
|
|
// to re-verify the information referenced by this structure.
|
|
//
|
|
// LPACMDRVSTREAMHEADER padsh: Pointer to stream header structure
|
|
// that defines the source data and destination buffer to convert.
|
|
//
|
|
// Return (LRESULT):
|
|
// The return value is zero (MMSYSERR_NOERROR) if this function
|
|
// succeeds with no errors. The return value is a non-zero error code
|
|
// if the function fails.
|
|
//
|
|
//
|
|
// History:
|
|
// 08/01/93 Created.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
LRESULT FNGLOBAL PcmToUlaw
|
|
(
|
|
LPACMDRVSTREAMINSTANCE padsi,
|
|
LPACMDRVSTREAMHEADER padsh
|
|
)
|
|
{
|
|
|
|
HPWORD hpwSrc;
|
|
HPBYTE hpbDst;
|
|
DWORD cb;
|
|
DWORD cSamples;
|
|
DWORD i;
|
|
|
|
signed short int wSample;
|
|
BYTE ulaw;
|
|
PSTREAMINSTANCE psi;
|
|
|
|
psi = (PSTREAMINSTANCE)padsi->dwDriver;
|
|
|
|
//
|
|
// For now we are using a straight-forward/brute-force method
|
|
// for converting from 16-bit PCM to u-law. This can probably
|
|
// be made more efficient if some thought is put into it...
|
|
//
|
|
|
|
cb = padsh->cbSrcLength;
|
|
cSamples = PCM_BYTESTOSAMPLES((LPPCMWAVEFORMAT)padsi->pwfxSrc, cb);
|
|
|
|
cb = G711_SAMPLESTOBYTES(padsi->pwfxDst, cSamples);
|
|
if (cb > padsh->cbDstLength) return (ACMERR_NOTPOSSIBLE);
|
|
|
|
cb = PCM_SAMPLESTOBYTES((LPPCMWAVEFORMAT)padsi->pwfxSrc, cSamples);
|
|
padsh->cbSrcLengthUsed = cb;
|
|
|
|
// hpwSrc and hpbDst will walk thru the src and dst buffers
|
|
hpwSrc = (HPWORD) padsh->pbSrc;
|
|
hpbDst = (HPBYTE) padsh->pbDst;
|
|
|
|
//
|
|
//
|
|
// Handle compression from 16-bit PCM
|
|
//
|
|
//
|
|
|
|
// Walk thru the source buffer. Since the source buffer has 16-bit PCM we
|
|
// need to convert cb/2 samples.
|
|
for (i=cb/2; i>0; i--)
|
|
{
|
|
|
|
// Get a signed 16-bit PCM sample from the src buffer
|
|
wSample = (signed short int) *(hpwSrc++);
|
|
|
|
// We'll init our u-law value per the sign of the PCM sample. u-law
|
|
// characters have the MSB=1 for positive PCM data. Also, we'll
|
|
// convert our signed 16-bit PCM value to it's absolute value and
|
|
// then work on that to get the rest of the u-law character bits.
|
|
if (wSample < 0)
|
|
{
|
|
ulaw = 0x00;
|
|
wSample = -wSample;
|
|
if (wSample < 0) wSample = 0x7FFF;
|
|
}
|
|
else
|
|
{
|
|
ulaw = 0x80;
|
|
}
|
|
|
|
// For now, let's shift this 16-bit value
|
|
// so that it is within the range defined
|
|
// by CCITT u-law.
|
|
wSample = wSample >> 2;
|
|
|
|
// Now we test the PCM sample amplitude and create the u-law character.
|
|
// Study the CCITT u-law for more details.
|
|
if (wSample >= 8159)
|
|
goto Gotulaw;
|
|
if (wSample >= 4063)
|
|
{
|
|
ulaw |= 0x00 + 15-((wSample-4063)/256);
|
|
goto Gotulaw;
|
|
}
|
|
if (wSample >= 2015)
|
|
{
|
|
ulaw |= 0x10 + 15-((wSample-2015)/128);
|
|
goto Gotulaw;
|
|
}
|
|
if (wSample >= 991)
|
|
{
|
|
ulaw |= 0x20 + 15-((wSample-991)/64);
|
|
goto Gotulaw;
|
|
}
|
|
if (wSample >= 479)
|
|
{
|
|
ulaw |= 0x30 + 15-((wSample-479)/32);
|
|
goto Gotulaw;
|
|
}
|
|
if (wSample >= 223)
|
|
{
|
|
ulaw |= 0x40 + 15-((wSample-223)/16);
|
|
goto Gotulaw;
|
|
}
|
|
if (wSample >= 95)
|
|
{
|
|
ulaw |= 0x50 + 15-((wSample-95)/8);
|
|
goto Gotulaw;
|
|
}
|
|
if (wSample >= 31)
|
|
{
|
|
ulaw |= 0x60 + 15-((wSample-31)/4);
|
|
goto Gotulaw;
|
|
}
|
|
ulaw |= 0x70 + 15-((wSample)/2);
|
|
|
|
Gotulaw:
|
|
*(hpbDst++) = ulaw;
|
|
}
|
|
|
|
|
|
//
|
|
// because the actual length of the converted data may not be the
|
|
// exact same amount as the estimate we gave in codecQueryBufferSize,
|
|
// we need to fill in the actual length we used for the destination
|
|
// buffer.
|
|
//
|
|
padsh->cbDstLengthUsed = (DWORD)(hpbDst - (HPBYTE) padsh->pbDst);
|
|
|
|
return (MMSYSERR_NOERROR);
|
|
|
|
} // PcmToUlaw()
|
|
|
|
|
|
//==========================================================================;
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//==========================================================================;
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// Name:
|
|
// AlawToPcmTable
|
|
//
|
|
//
|
|
// Description:
|
|
// this array maps A-law characters to 16-bit PCM
|
|
//
|
|
//
|
|
// Arguments:
|
|
// the index into the array is an A-law character
|
|
//
|
|
// Return:
|
|
// an element of the array is a 16-bit PCM value
|
|
//
|
|
// Notes:
|
|
//
|
|
//
|
|
// History:
|
|
// 07/28/93 Created.
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
const SHORT BCODE AlawToPcmTable[256] =
|
|
{
|
|
-5504, // y[00]= -688
|
|
-5248, // y[01]= -656
|
|
-6016, // y[02]= -752
|
|
-5760, // y[03]= -720
|
|
-4480, // y[04]= -560
|
|
-4224, // y[05]= -528
|
|
-4992, // y[06]= -624
|
|
-4736, // y[07]= -592
|
|
-7552, // y[08]= -944
|
|
-7296, // y[09]= -912
|
|
-8064, // y[0a]= -1008
|
|
-7808, // y[0b]= -976
|
|
-6528, // y[0c]= -816
|
|
-6272, // y[0d]= -784
|
|
-7040, // y[0e]= -880
|
|
-6784, // y[0f]= -848
|
|
-2752, // y[10]= -344
|
|
-2624, // y[11]= -328
|
|
-3008, // y[12]= -376
|
|
-2880, // y[13]= -360
|
|
-2240, // y[14]= -280
|
|
-2112, // y[15]= -264
|
|
-2496, // y[16]= -312
|
|
-2368, // y[17]= -296
|
|
-3776, // y[18]= -472
|
|
-3648, // y[19]= -456
|
|
-4032, // y[1a]= -504
|
|
-3904, // y[1b]= -488
|
|
-3264, // y[1c]= -408
|
|
-3136, // y[1d]= -392
|
|
-3520, // y[1e]= -440
|
|
-3392, // y[1f]= -424
|
|
-22016, // y[20]= -2752
|
|
-20992, // y[21]= -2624
|
|
-24064, // y[22]= -3008
|
|
-23040, // y[23]= -2880
|
|
-17920, // y[24]= -2240
|
|
-16896, // y[25]= -2112
|
|
-19968, // y[26]= -2496
|
|
-18944, // y[27]= -2368
|
|
-30208, // y[28]= -3776
|
|
-29184, // y[29]= -3648
|
|
-32256, // y[2a]= -4032
|
|
-31232, // y[2b]= -3904
|
|
-26112, // y[2c]= -3264
|
|
-25088, // y[2d]= -3136
|
|
-28160, // y[2e]= -3520
|
|
-27136, // y[2f]= -3392
|
|
-11008, // y[30]= -1376
|
|
-10496, // y[31]= -1312
|
|
-12032, // y[32]= -1504
|
|
-11520, // y[33]= -1440
|
|
-8960, // y[34]= -1120
|
|
-8448, // y[35]= -1056
|
|
-9984, // y[36]= -1248
|
|
-9472, // y[37]= -1184
|
|
-15104, // y[38]= -1888
|
|
-14592, // y[39]= -1824
|
|
-16128, // y[3a]= -2016
|
|
-15616, // y[3b]= -1952
|
|
-13056, // y[3c]= -1632
|
|
-12544, // y[3d]= -1568
|
|
-14080, // y[3e]= -1760
|
|
-13568, // y[3f]= -1696
|
|
-344, // y[40]= -43
|
|
-328, // y[41]= -41
|
|
-376, // y[42]= -47
|
|
-360, // y[43]= -45
|
|
-280, // y[44]= -35
|
|
-264, // y[45]= -33
|
|
-312, // y[46]= -39
|
|
-296, // y[47]= -37
|
|
-472, // y[48]= -59
|
|
-456, // y[49]= -57
|
|
-504, // y[4a]= -63
|
|
-488, // y[4b]= -61
|
|
-408, // y[4c]= -51
|
|
-392, // y[4d]= -49
|
|
-440, // y[4e]= -55
|
|
-424, // y[4f]= -53
|
|
-88, // y[50]= -11
|
|
-72, // y[51]= -9
|
|
-120, // y[52]= -15
|
|
-104, // y[53]= -13
|
|
-24, // y[54]= -3
|
|
-8, // y[55]= -1
|
|
-56, // y[56]= -7
|
|
-40, // y[57]= -5
|
|
-216, // y[58]= -27
|
|
-200, // y[59]= -25
|
|
-248, // y[5a]= -31
|
|
-232, // y[5b]= -29
|
|
-152, // y[5c]= -19
|
|
-136, // y[5d]= -17
|
|
-184, // y[5e]= -23
|
|
-168, // y[5f]= -21
|
|
-1376, // y[60]= -172
|
|
-1312, // y[61]= -164
|
|
-1504, // y[62]= -188
|
|
-1440, // y[63]= -180
|
|
-1120, // y[64]= -140
|
|
-1056, // y[65]= -132
|
|
-1248, // y[66]= -156
|
|
-1184, // y[67]= -148
|
|
-1888, // y[68]= -236
|
|
-1824, // y[69]= -228
|
|
-2016, // y[6a]= -252
|
|
-1952, // y[6b]= -244
|
|
-1632, // y[6c]= -204
|
|
-1568, // y[6d]= -196
|
|
-1760, // y[6e]= -220
|
|
-1696, // y[6f]= -212
|
|
-688, // y[70]= -86
|
|
-656, // y[71]= -82
|
|
-752, // y[72]= -94
|
|
-720, // y[73]= -90
|
|
-560, // y[74]= -70
|
|
-528, // y[75]= -66
|
|
-624, // y[76]= -78
|
|
-592, // y[77]= -74
|
|
-944, // y[78]= -118
|
|
-912, // y[79]= -114
|
|
-1008, // y[7a]= -126
|
|
-976, // y[7b]= -122
|
|
-816, // y[7c]= -102
|
|
-784, // y[7d]= -98
|
|
-880, // y[7e]= -110
|
|
-848, // y[7f]= -106
|
|
5504, // y[80]= 688
|
|
5248, // y[81]= 656
|
|
6016, // y[82]= 752
|
|
5760, // y[83]= 720
|
|
4480, // y[84]= 560
|
|
4224, // y[85]= 528
|
|
4992, // y[86]= 624
|
|
4736, // y[87]= 592
|
|
7552, // y[88]= 944
|
|
7296, // y[89]= 912
|
|
8064, // y[8a]= 1008
|
|
7808, // y[8b]= 976
|
|
6528, // y[8c]= 816
|
|
6272, // y[8d]= 784
|
|
7040, // y[8e]= 880
|
|
6784, // y[8f]= 848
|
|
2752, // y[90]= 344
|
|
2624, // y[91]= 328
|
|
3008, // y[92]= 376
|
|
2880, // y[93]= 360
|
|
2240, // y[94]= 280
|
|
2112, // y[95]= 264
|
|
2496, // y[96]= 312
|
|
2368, // y[97]= 296
|
|
3776, // y[98]= 472
|
|
3648, // y[99]= 456
|
|
4032, // y[9a]= 504
|
|
3904, // y[9b]= 488
|
|
3264, // y[9c]= 408
|
|
3136, // y[9d]= 392
|
|
3520, // y[9e]= 440
|
|
3392, // y[9f]= 424
|
|
22016, // y[a0]= 2752
|
|
20992, // y[a1]= 2624
|
|
24064, // y[a2]= 3008
|
|
23040, // y[a3]= 2880
|
|
17920, // y[a4]= 2240
|
|
16896, // y[a5]= 2112
|
|
19968, // y[a6]= 2496
|
|
18944, // y[a7]= 2368
|
|
30208, // y[a8]= 3776
|
|
29184, // y[a9]= 3648
|
|
32256, // y[aa]= 4032
|
|
31232, // y[ab]= 3904
|
|
26112, // y[ac]= 3264
|
|
25088, // y[ad]= 3136
|
|
28160, // y[ae]= 3520
|
|
27136, // y[af]= 3392
|
|
11008, // y[b0]= 1376
|
|
10496, // y[b1]= 1312
|
|
12032, // y[b2]= 1504
|
|
11520, // y[b3]= 1440
|
|
8960, // y[b4]= 1120
|
|
8448, // y[b5]= 1056
|
|
9984, // y[b6]= 1248
|
|
9472, // y[b7]= 1184
|
|
15104, // y[b8]= 1888
|
|
14592, // y[b9]= 1824
|
|
16128, // y[ba]= 2016
|
|
15616, // y[bb]= 1952
|
|
13056, // y[bc]= 1632
|
|
12544, // y[bd]= 1568
|
|
14080, // y[be]= 1760
|
|
13568, // y[bf]= 1696
|
|
344, // y[c0]= 43
|
|
328, // y[c1]= 41
|
|
376, // y[c2]= 47
|
|
360, // y[c3]= 45
|
|
280, // y[c4]= 35
|
|
264, // y[c5]= 33
|
|
312, // y[c6]= 39
|
|
296, // y[c7]= 37
|
|
472, // y[c8]= 59
|
|
456, // y[c9]= 57
|
|
504, // y[ca]= 63
|
|
488, // y[cb]= 61
|
|
408, // y[cc]= 51
|
|
392, // y[cd]= 49
|
|
440, // y[ce]= 55
|
|
424, // y[cf]= 53
|
|
88, // y[d0]= 11
|
|
72, // y[d1]= 9
|
|
120, // y[d2]= 15
|
|
104, // y[d3]= 13
|
|
24, // y[d4]= 3
|
|
8, // y[d5]= 1
|
|
56, // y[d6]= 7
|
|
40, // y[d7]= 5
|
|
216, // y[d8]= 27
|
|
200, // y[d9]= 25
|
|
248, // y[da]= 31
|
|
232, // y[db]= 29
|
|
152, // y[dc]= 19
|
|
136, // y[dd]= 17
|
|
184, // y[de]= 23
|
|
168, // y[df]= 21
|
|
1376, // y[e0]= 172
|
|
1312, // y[e1]= 164
|
|
1504, // y[e2]= 188
|
|
1440, // y[e3]= 180
|
|
1120, // y[e4]= 140
|
|
1056, // y[e5]= 132
|
|
1248, // y[e6]= 156
|
|
1184, // y[e7]= 148
|
|
1888, // y[e8]= 236
|
|
1824, // y[e9]= 228
|
|
2016, // y[ea]= 252
|
|
1952, // y[eb]= 244
|
|
1632, // y[ec]= 204
|
|
1568, // y[ed]= 196
|
|
1760, // y[ee]= 220
|
|
1696, // y[ef]= 212
|
|
688, // y[f0]= 86
|
|
656, // y[f1]= 82
|
|
752, // y[f2]= 94
|
|
720, // y[f3]= 90
|
|
560, // y[f4]= 70
|
|
528, // y[f5]= 66
|
|
624, // y[f6]= 78
|
|
592, // y[f7]= 74
|
|
944, // y[f8]= 118
|
|
912, // y[f9]= 114
|
|
1008, // y[fa]= 126
|
|
976, // y[fb]= 122
|
|
816, // y[fc]= 102
|
|
784, // y[fd]= 98
|
|
880, // y[fe]= 110
|
|
848 // y[ff]= 106
|
|
};
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// Name:
|
|
// UlawToPcmTable
|
|
//
|
|
//
|
|
// Description:
|
|
// this array maps u-law characters to 16-bit PCM
|
|
//
|
|
// Arguments:
|
|
// the index into the array is a u-law character
|
|
//
|
|
// Return:
|
|
// an element of the array is a 16-bit PCM value
|
|
//
|
|
// Notes:
|
|
//
|
|
//
|
|
// History:
|
|
// 07/28/93 Created.
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
const SHORT BCODE UlawToPcmTable[256] =
|
|
{
|
|
-32124, // y[00]= -8031
|
|
-31100, // y[01]= -7775
|
|
-30076, // y[02]= -7519
|
|
-29052, // y[03]= -7263
|
|
-28028, // y[04]= -7007
|
|
-27004, // y[05]= -6751
|
|
-25980, // y[06]= -6495
|
|
-24956, // y[07]= -6239
|
|
-23932, // y[08]= -5983
|
|
-22908, // y[09]= -5727
|
|
-21884, // y[0a]= -5471
|
|
-20860, // y[0b]= -5215
|
|
-19836, // y[0c]= -4959
|
|
-18812, // y[0d]= -4703
|
|
-17788, // y[0e]= -4447
|
|
-16764, // y[0f]= -4191
|
|
-15996, // y[10]= -3999
|
|
-15484, // y[11]= -3871
|
|
-14972, // y[12]= -3743
|
|
-14460, // y[13]= -3615
|
|
-13948, // y[14]= -3487
|
|
-13436, // y[15]= -3359
|
|
-12924, // y[16]= -3231
|
|
-12412, // y[17]= -3103
|
|
-11900, // y[18]= -2975
|
|
-11388, // y[19]= -2847
|
|
-10876, // y[1a]= -2719
|
|
-10364, // y[1b]= -2591
|
|
-9852, // y[1c]= -2463
|
|
-9340, // y[1d]= -2335
|
|
-8828, // y[1e]= -2207
|
|
-8316, // y[1f]= -2079
|
|
-7932, // y[20]= -1983
|
|
-7676, // y[21]= -1919
|
|
-7420, // y[22]= -1855
|
|
-7164, // y[23]= -1791
|
|
-6908, // y[24]= -1727
|
|
-6652, // y[25]= -1663
|
|
-6396, // y[26]= -1599
|
|
-6140, // y[27]= -1535
|
|
-5884, // y[28]= -1471
|
|
-5628, // y[29]= -1407
|
|
-5372, // y[2a]= -1343
|
|
-5116, // y[2b]= -1279
|
|
-4860, // y[2c]= -1215
|
|
-4604, // y[2d]= -1151
|
|
-4348, // y[2e]= -1087
|
|
-4092, // y[2f]= -1023
|
|
-3900, // y[30]= -975
|
|
-3772, // y[31]= -943
|
|
-3644, // y[32]= -911
|
|
-3516, // y[33]= -879
|
|
-3388, // y[34]= -847
|
|
-3260, // y[35]= -815
|
|
-3132, // y[36]= -783
|
|
-3004, // y[37]= -751
|
|
-2876, // y[38]= -719
|
|
-2748, // y[39]= -687
|
|
-2620, // y[3a]= -655
|
|
-2492, // y[3b]= -623
|
|
-2364, // y[3c]= -591
|
|
-2236, // y[3d]= -559
|
|
-2108, // y[3e]= -527
|
|
-1980, // y[3f]= -495
|
|
-1884, // y[40]= -471
|
|
-1820, // y[41]= -455
|
|
-1756, // y[42]= -439
|
|
-1692, // y[43]= -423
|
|
-1628, // y[44]= -407
|
|
-1564, // y[45]= -391
|
|
-1500, // y[46]= -375
|
|
-1436, // y[47]= -359
|
|
-1372, // y[48]= -343
|
|
-1308, // y[49]= -327
|
|
-1244, // y[4a]= -311
|
|
-1180, // y[4b]= -295
|
|
-1116, // y[4c]= -279
|
|
-1052, // y[4d]= -263
|
|
-988, // y[4e]= -247
|
|
-924, // y[4f]= -231
|
|
-876, // y[50]= -219
|
|
-844, // y[51]= -211
|
|
-812, // y[52]= -203
|
|
-780, // y[53]= -195
|
|
-748, // y[54]= -187
|
|
-716, // y[55]= -179
|
|
-684, // y[56]= -171
|
|
-652, // y[57]= -163
|
|
-620, // y[58]= -155
|
|
-588, // y[59]= -147
|
|
-556, // y[5a]= -139
|
|
-524, // y[5b]= -131
|
|
-492, // y[5c]= -123
|
|
-460, // y[5d]= -115
|
|
-428, // y[5e]= -107
|
|
-396, // y[5f]= -99
|
|
-372, // y[60]= -93
|
|
-356, // y[61]= -89
|
|
-340, // y[62]= -85
|
|
-324, // y[63]= -81
|
|
-308, // y[64]= -77
|
|
-292, // y[65]= -73
|
|
-276, // y[66]= -69
|
|
-260, // y[67]= -65
|
|
-244, // y[68]= -61
|
|
-228, // y[69]= -57
|
|
-212, // y[6a]= -53
|
|
-196, // y[6b]= -49
|
|
-180, // y[6c]= -45
|
|
-164, // y[6d]= -41
|
|
-148, // y[6e]= -37
|
|
-132, // y[6f]= -33
|
|
-120, // y[70]= -30
|
|
-112, // y[71]= -28
|
|
-104, // y[72]= -26
|
|
-96, // y[73]= -24
|
|
-88, // y[74]= -22
|
|
-80, // y[75]= -20
|
|
-72, // y[76]= -18
|
|
-64, // y[77]= -16
|
|
-56, // y[78]= -14
|
|
-48, // y[79]= -12
|
|
-40, // y[7a]= -10
|
|
-32, // y[7b]= -8
|
|
-24, // y[7c]= -6
|
|
-16, // y[7d]= -4
|
|
-8, // y[7e]= -2
|
|
0, // y[7f]= 0
|
|
32124, // y[80]= 8031
|
|
31100, // y[81]= 7775
|
|
30076, // y[82]= 7519
|
|
29052, // y[83]= 7263
|
|
28028, // y[84]= 7007
|
|
27004, // y[85]= 6751
|
|
25980, // y[86]= 6495
|
|
24956, // y[87]= 6239
|
|
23932, // y[88]= 5983
|
|
22908, // y[89]= 5727
|
|
21884, // y[8a]= 5471
|
|
20860, // y[8b]= 5215
|
|
19836, // y[8c]= 4959
|
|
18812, // y[8d]= 4703
|
|
17788, // y[8e]= 4447
|
|
16764, // y[8f]= 4191
|
|
15996, // y[90]= 3999
|
|
15484, // y[91]= 3871
|
|
14972, // y[92]= 3743
|
|
14460, // y[93]= 3615
|
|
13948, // y[94]= 3487
|
|
13436, // y[95]= 3359
|
|
12924, // y[96]= 3231
|
|
12412, // y[97]= 3103
|
|
11900, // y[98]= 2975
|
|
11388, // y[99]= 2847
|
|
10876, // y[9a]= 2719
|
|
10364, // y[9b]= 2591
|
|
9852, // y[9c]= 2463
|
|
9340, // y[9d]= 2335
|
|
8828, // y[9e]= 2207
|
|
8316, // y[9f]= 2079
|
|
7932, // y[a0]= 1983
|
|
7676, // y[a1]= 1919
|
|
7420, // y[a2]= 1855
|
|
7164, // y[a3]= 1791
|
|
6908, // y[a4]= 1727
|
|
6652, // y[a5]= 1663
|
|
6396, // y[a6]= 1599
|
|
6140, // y[a7]= 1535
|
|
5884, // y[a8]= 1471
|
|
5628, // y[a9]= 1407
|
|
5372, // y[aa]= 1343
|
|
5116, // y[ab]= 1279
|
|
4860, // y[ac]= 1215
|
|
4604, // y[ad]= 1151
|
|
4348, // y[ae]= 1087
|
|
4092, // y[af]= 1023
|
|
3900, // y[b0]= 975
|
|
3772, // y[b1]= 943
|
|
3644, // y[b2]= 911
|
|
3516, // y[b3]= 879
|
|
3388, // y[b4]= 847
|
|
3260, // y[b5]= 815
|
|
3132, // y[b6]= 783
|
|
3004, // y[b7]= 751
|
|
2876, // y[b8]= 719
|
|
2748, // y[b9]= 687
|
|
2620, // y[ba]= 655
|
|
2492, // y[bb]= 623
|
|
2364, // y[bc]= 591
|
|
2236, // y[bd]= 559
|
|
2108, // y[be]= 527
|
|
1980, // y[bf]= 495
|
|
1884, // y[c0]= 471
|
|
1820, // y[c1]= 455
|
|
1756, // y[c2]= 439
|
|
1692, // y[c3]= 423
|
|
1628, // y[c4]= 407
|
|
1564, // y[c5]= 391
|
|
1500, // y[c6]= 375
|
|
1436, // y[c7]= 359
|
|
1372, // y[c8]= 343
|
|
1308, // y[c9]= 327
|
|
1244, // y[ca]= 311
|
|
1180, // y[cb]= 295
|
|
1116, // y[cc]= 279
|
|
1052, // y[cd]= 263
|
|
988, // y[ce]= 247
|
|
924, // y[cf]= 231
|
|
876, // y[d0]= 219
|
|
844, // y[d1]= 211
|
|
812, // y[d2]= 203
|
|
780, // y[d3]= 195
|
|
748, // y[d4]= 187
|
|
716, // y[d5]= 179
|
|
684, // y[d6]= 171
|
|
652, // y[d7]= 163
|
|
620, // y[d8]= 155
|
|
588, // y[d9]= 147
|
|
556, // y[da]= 139
|
|
524, // y[db]= 131
|
|
492, // y[dc]= 123
|
|
460, // y[dd]= 115
|
|
428, // y[de]= 107
|
|
396, // y[df]= 99
|
|
372, // y[e0]= 93
|
|
356, // y[e1]= 89
|
|
340, // y[e2]= 85
|
|
324, // y[e3]= 81
|
|
308, // y[e4]= 77
|
|
292, // y[e5]= 73
|
|
276, // y[e6]= 69
|
|
260, // y[e7]= 65
|
|
244, // y[e8]= 61
|
|
228, // y[e9]= 57
|
|
212, // y[ea]= 53
|
|
196, // y[eb]= 49
|
|
180, // y[ec]= 45
|
|
164, // y[ed]= 41
|
|
148, // y[ee]= 37
|
|
132, // y[ef]= 33
|
|
120, // y[f0]= 30
|
|
112, // y[f1]= 28
|
|
104, // y[f2]= 26
|
|
96, // y[f3]= 24
|
|
88, // y[f4]= 22
|
|
80, // y[f5]= 20
|
|
72, // y[f6]= 18
|
|
64, // y[f7]= 16
|
|
56, // y[f8]= 14
|
|
48, // y[f9]= 12
|
|
40, // y[fa]= 10
|
|
32, // y[fb]= 8
|
|
24, // y[fc]= 6
|
|
16, // y[fd]= 4
|
|
8, // y[fe]= 2
|
|
0 // y[ff]= 0
|
|
};
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// Name:
|
|
// AlawToUlawTable
|
|
//
|
|
//
|
|
// Description:
|
|
// this array maps A-law characters to u-law characters
|
|
//
|
|
// Arguments:
|
|
// the index into the array is an A-law character
|
|
//
|
|
// Return:
|
|
// an element of the array is a u-law character
|
|
//
|
|
// Notes:
|
|
//
|
|
//
|
|
// History:
|
|
// 08/01/93 Created.
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
const BYTE BCODE AlawToUlawTable[256] =
|
|
{
|
|
0x2a, // A-law[00] ==> u-law[2a]
|
|
0x2b, // A-law[01] ==> u-law[2b]
|
|
0x28, // A-law[02] ==> u-law[28]
|
|
0x29, // A-law[03] ==> u-law[29]
|
|
0x2e, // A-law[04] ==> u-law[2e]
|
|
0x2f, // A-law[05] ==> u-law[2f]
|
|
0x2c, // A-law[06] ==> u-law[2c]
|
|
0x2d, // A-law[07] ==> u-law[2d]
|
|
0x22, // A-law[08] ==> u-law[22]
|
|
0x23, // A-law[09] ==> u-law[23]
|
|
0x20, // A-law[0a] ==> u-law[20]
|
|
0x21, // A-law[0b] ==> u-law[21]
|
|
0x26, // A-law[0c] ==> u-law[26]
|
|
0x27, // A-law[0d] ==> u-law[27]
|
|
0x24, // A-law[0e] ==> u-law[24]
|
|
0x25, // A-law[0f] ==> u-law[25]
|
|
0x39, // A-law[10] ==> u-law[39]
|
|
0x3a, // A-law[11] ==> u-law[3a]
|
|
0x37, // A-law[12] ==> u-law[37]
|
|
0x38, // A-law[13] ==> u-law[38]
|
|
0x3d, // A-law[14] ==> u-law[3d]
|
|
0x3e, // A-law[15] ==> u-law[3e]
|
|
0x3b, // A-law[16] ==> u-law[3b]
|
|
0x3c, // A-law[17] ==> u-law[3c]
|
|
0x31, // A-law[18] ==> u-law[31]
|
|
0x32, // A-law[19] ==> u-law[32]
|
|
0x30, // A-law[1a] ==> u-law[30]
|
|
0x30, // A-law[1b] ==> u-law[30]
|
|
0x35, // A-law[1c] ==> u-law[35]
|
|
0x36, // A-law[1d] ==> u-law[36]
|
|
0x33, // A-law[1e] ==> u-law[33]
|
|
0x34, // A-law[1f] ==> u-law[34]
|
|
0x0a, // A-law[20] ==> u-law[0a]
|
|
0x0b, // A-law[21] ==> u-law[0b]
|
|
0x08, // A-law[22] ==> u-law[08]
|
|
0x09, // A-law[23] ==> u-law[09]
|
|
0x0e, // A-law[24] ==> u-law[0e]
|
|
0x0f, // A-law[25] ==> u-law[0f]
|
|
0x0c, // A-law[26] ==> u-law[0c]
|
|
0x0d, // A-law[27] ==> u-law[0d]
|
|
0x02, // A-law[28] ==> u-law[02]
|
|
0x03, // A-law[29] ==> u-law[03]
|
|
0x00, // A-law[2a] ==> u-law[00]
|
|
0x01, // A-law[2b] ==> u-law[01]
|
|
0x06, // A-law[2c] ==> u-law[06]
|
|
0x07, // A-law[2d] ==> u-law[07]
|
|
0x04, // A-law[2e] ==> u-law[04]
|
|
0x05, // A-law[2f] ==> u-law[05]
|
|
0x1a, // A-law[30] ==> u-law[1a]
|
|
0x1b, // A-law[31] ==> u-law[1b]
|
|
0x18, // A-law[32] ==> u-law[18]
|
|
0x19, // A-law[33] ==> u-law[19]
|
|
0x1e, // A-law[34] ==> u-law[1e]
|
|
0x1f, // A-law[35] ==> u-law[1f]
|
|
0x1c, // A-law[36] ==> u-law[1c]
|
|
0x1d, // A-law[37] ==> u-law[1d]
|
|
0x12, // A-law[38] ==> u-law[12]
|
|
0x13, // A-law[39] ==> u-law[13]
|
|
0x10, // A-law[3a] ==> u-law[10]
|
|
0x11, // A-law[3b] ==> u-law[11]
|
|
0x16, // A-law[3c] ==> u-law[16]
|
|
0x17, // A-law[3d] ==> u-law[17]
|
|
0x14, // A-law[3e] ==> u-law[14]
|
|
0x15, // A-law[3f] ==> u-law[15]
|
|
0x62, // A-law[40] ==> u-law[62]
|
|
0x63, // A-law[41] ==> u-law[63]
|
|
0x60, // A-law[42] ==> u-law[60]
|
|
0x61, // A-law[43] ==> u-law[61]
|
|
0x66, // A-law[44] ==> u-law[66]
|
|
0x67, // A-law[45] ==> u-law[67]
|
|
0x64, // A-law[46] ==> u-law[64]
|
|
0x65, // A-law[47] ==> u-law[65]
|
|
0x5d, // A-law[48] ==> u-law[5d]
|
|
0x5d, // A-law[49] ==> u-law[5d]
|
|
0x5c, // A-law[4a] ==> u-law[5c]
|
|
0x5c, // A-law[4b] ==> u-law[5c]
|
|
0x5f, // A-law[4c] ==> u-law[5f]
|
|
0x5f, // A-law[4d] ==> u-law[5f]
|
|
0x5e, // A-law[4e] ==> u-law[5e]
|
|
0x5e, // A-law[4f] ==> u-law[5e]
|
|
0x74, // A-law[50] ==> u-law[74]
|
|
0x76, // A-law[51] ==> u-law[76]
|
|
0x70, // A-law[52] ==> u-law[70]
|
|
0x72, // A-law[53] ==> u-law[72]
|
|
0x7c, // A-law[54] ==> u-law[7c]
|
|
0x7e, // A-law[55] ==> u-law[7e]
|
|
0x78, // A-law[56] ==> u-law[78]
|
|
0x7a, // A-law[57] ==> u-law[7a]
|
|
0x6a, // A-law[58] ==> u-law[6a]
|
|
0x6b, // A-law[59] ==> u-law[6b]
|
|
0x68, // A-law[5a] ==> u-law[68]
|
|
0x69, // A-law[5b] ==> u-law[69]
|
|
0x6e, // A-law[5c] ==> u-law[6e]
|
|
0x6f, // A-law[5d] ==> u-law[6f]
|
|
0x6c, // A-law[5e] ==> u-law[6c]
|
|
0x6d, // A-law[5f] ==> u-law[6d]
|
|
0x48, // A-law[60] ==> u-law[48]
|
|
0x49, // A-law[61] ==> u-law[49]
|
|
0x46, // A-law[62] ==> u-law[46]
|
|
0x47, // A-law[63] ==> u-law[47]
|
|
0x4c, // A-law[64] ==> u-law[4c]
|
|
0x4d, // A-law[65] ==> u-law[4d]
|
|
0x4a, // A-law[66] ==> u-law[4a]
|
|
0x4b, // A-law[67] ==> u-law[4b]
|
|
0x40, // A-law[68] ==> u-law[40]
|
|
0x41, // A-law[69] ==> u-law[41]
|
|
0x3f, // A-law[6a] ==> u-law[3f]
|
|
0x3f, // A-law[6b] ==> u-law[3f]
|
|
0x44, // A-law[6c] ==> u-law[44]
|
|
0x45, // A-law[6d] ==> u-law[45]
|
|
0x42, // A-law[6e] ==> u-law[42]
|
|
0x43, // A-law[6f] ==> u-law[43]
|
|
0x56, // A-law[70] ==> u-law[56]
|
|
0x57, // A-law[71] ==> u-law[57]
|
|
0x54, // A-law[72] ==> u-law[54]
|
|
0x55, // A-law[73] ==> u-law[55]
|
|
0x5a, // A-law[74] ==> u-law[5a]
|
|
0x5b, // A-law[75] ==> u-law[5b]
|
|
0x58, // A-law[76] ==> u-law[58]
|
|
0x59, // A-law[77] ==> u-law[59]
|
|
0x4f, // A-law[78] ==> u-law[4f]
|
|
0x4f, // A-law[79] ==> u-law[4f]
|
|
0x4e, // A-law[7a] ==> u-law[4e]
|
|
0x4e, // A-law[7b] ==> u-law[4e]
|
|
0x52, // A-law[7c] ==> u-law[52]
|
|
0x53, // A-law[7d] ==> u-law[53]
|
|
0x50, // A-law[7e] ==> u-law[50]
|
|
0x51, // A-law[7f] ==> u-law[51]
|
|
0xaa, // A-law[80] ==> u-law[aa]
|
|
0xab, // A-law[81] ==> u-law[ab]
|
|
0xa8, // A-law[82] ==> u-law[a8]
|
|
0xa9, // A-law[83] ==> u-law[a9]
|
|
0xae, // A-law[84] ==> u-law[ae]
|
|
0xaf, // A-law[85] ==> u-law[af]
|
|
0xac, // A-law[86] ==> u-law[ac]
|
|
0xad, // A-law[87] ==> u-law[ad]
|
|
0xa2, // A-law[88] ==> u-law[a2]
|
|
0xa3, // A-law[89] ==> u-law[a3]
|
|
0xa0, // A-law[8a] ==> u-law[a0]
|
|
0xa1, // A-law[8b] ==> u-law[a1]
|
|
0xa6, // A-law[8c] ==> u-law[a6]
|
|
0xa7, // A-law[8d] ==> u-law[a7]
|
|
0xa4, // A-law[8e] ==> u-law[a4]
|
|
0xa5, // A-law[8f] ==> u-law[a5]
|
|
0xb9, // A-law[90] ==> u-law[b9]
|
|
0xba, // A-law[91] ==> u-law[ba]
|
|
0xb7, // A-law[92] ==> u-law[b7]
|
|
0xb8, // A-law[93] ==> u-law[b8]
|
|
0xbd, // A-law[94] ==> u-law[bd]
|
|
0xbe, // A-law[95] ==> u-law[be]
|
|
0xbb, // A-law[96] ==> u-law[bb]
|
|
0xbc, // A-law[97] ==> u-law[bc]
|
|
0xb1, // A-law[98] ==> u-law[b1]
|
|
0xb2, // A-law[99] ==> u-law[b2]
|
|
0xb0, // A-law[9a] ==> u-law[b0]
|
|
0xb0, // A-law[9b] ==> u-law[b0]
|
|
0xb5, // A-law[9c] ==> u-law[b5]
|
|
0xb6, // A-law[9d] ==> u-law[b6]
|
|
0xb3, // A-law[9e] ==> u-law[b3]
|
|
0xb4, // A-law[9f] ==> u-law[b4]
|
|
0x8a, // A-law[a0] ==> u-law[8a]
|
|
0x8b, // A-law[a1] ==> u-law[8b]
|
|
0x88, // A-law[a2] ==> u-law[88]
|
|
0x89, // A-law[a3] ==> u-law[89]
|
|
0x8e, // A-law[a4] ==> u-law[8e]
|
|
0x8f, // A-law[a5] ==> u-law[8f]
|
|
0x8c, // A-law[a6] ==> u-law[8c]
|
|
0x8d, // A-law[a7] ==> u-law[8d]
|
|
0x82, // A-law[a8] ==> u-law[82]
|
|
0x83, // A-law[a9] ==> u-law[83]
|
|
0x80, // A-law[aa] ==> u-law[80]
|
|
0x81, // A-law[ab] ==> u-law[81]
|
|
0x86, // A-law[ac] ==> u-law[86]
|
|
0x87, // A-law[ad] ==> u-law[87]
|
|
0x84, // A-law[ae] ==> u-law[84]
|
|
0x85, // A-law[af] ==> u-law[85]
|
|
0x9a, // A-law[b0] ==> u-law[9a]
|
|
0x9b, // A-law[b1] ==> u-law[9b]
|
|
0x98, // A-law[b2] ==> u-law[98]
|
|
0x99, // A-law[b3] ==> u-law[99]
|
|
0x9e, // A-law[b4] ==> u-law[9e]
|
|
0x9f, // A-law[b5] ==> u-law[9f]
|
|
0x9c, // A-law[b6] ==> u-law[9c]
|
|
0x9d, // A-law[b7] ==> u-law[9d]
|
|
0x92, // A-law[b8] ==> u-law[92]
|
|
0x93, // A-law[b9] ==> u-law[93]
|
|
0x90, // A-law[ba] ==> u-law[90]
|
|
0x91, // A-law[bb] ==> u-law[91]
|
|
0x96, // A-law[bc] ==> u-law[96]
|
|
0x97, // A-law[bd] ==> u-law[97]
|
|
0x94, // A-law[be] ==> u-law[94]
|
|
0x95, // A-law[bf] ==> u-law[95]
|
|
0xe2, // A-law[c0] ==> u-law[e2]
|
|
0xe3, // A-law[c1] ==> u-law[e3]
|
|
0xe0, // A-law[c2] ==> u-law[e0]
|
|
0xe1, // A-law[c3] ==> u-law[e1]
|
|
0xe6, // A-law[c4] ==> u-law[e6]
|
|
0xe7, // A-law[c5] ==> u-law[e7]
|
|
0xe4, // A-law[c6] ==> u-law[e4]
|
|
0xe5, // A-law[c7] ==> u-law[e5]
|
|
0xdd, // A-law[c8] ==> u-law[dd]
|
|
0xdd, // A-law[c9] ==> u-law[dd]
|
|
0xdc, // A-law[ca] ==> u-law[dc]
|
|
0xdc, // A-law[cb] ==> u-law[dc]
|
|
0xdf, // A-law[cc] ==> u-law[df]
|
|
0xdf, // A-law[cd] ==> u-law[df]
|
|
0xde, // A-law[ce] ==> u-law[de]
|
|
0xde, // A-law[cf] ==> u-law[de]
|
|
0xf4, // A-law[d0] ==> u-law[f4]
|
|
0xf6, // A-law[d1] ==> u-law[f6]
|
|
0xf0, // A-law[d2] ==> u-law[f0]
|
|
0xf2, // A-law[d3] ==> u-law[f2]
|
|
0xfc, // A-law[d4] ==> u-law[fc]
|
|
0xfe, // A-law[d5] ==> u-law[fe]
|
|
0xf8, // A-law[d6] ==> u-law[f8]
|
|
0xfa, // A-law[d7] ==> u-law[fa]
|
|
0xea, // A-law[d8] ==> u-law[ea]
|
|
0xeb, // A-law[d9] ==> u-law[eb]
|
|
0xe8, // A-law[da] ==> u-law[e8]
|
|
0xe9, // A-law[db] ==> u-law[e9]
|
|
0xee, // A-law[dc] ==> u-law[ee]
|
|
0xef, // A-law[dd] ==> u-law[ef]
|
|
0xec, // A-law[de] ==> u-law[ec]
|
|
0xed, // A-law[df] ==> u-law[ed]
|
|
0xc8, // A-law[e0] ==> u-law[c8]
|
|
0xc9, // A-law[e1] ==> u-law[c9]
|
|
0xc6, // A-law[e2] ==> u-law[c6]
|
|
0xc7, // A-law[e3] ==> u-law[c7]
|
|
0xcc, // A-law[e4] ==> u-law[cc]
|
|
0xcd, // A-law[e5] ==> u-law[cd]
|
|
0xca, // A-law[e6] ==> u-law[ca]
|
|
0xcb, // A-law[e7] ==> u-law[cb]
|
|
0xc0, // A-law[e8] ==> u-law[c0]
|
|
0xc1, // A-law[e9] ==> u-law[c1]
|
|
0xbf, // A-law[ea] ==> u-law[bf]
|
|
0xbf, // A-law[eb] ==> u-law[bf]
|
|
0xc4, // A-law[ec] ==> u-law[c4]
|
|
0xc5, // A-law[ed] ==> u-law[c5]
|
|
0xc2, // A-law[ee] ==> u-law[c2]
|
|
0xc3, // A-law[ef] ==> u-law[c3]
|
|
0xd6, // A-law[f0] ==> u-law[d6]
|
|
0xd7, // A-law[f1] ==> u-law[d7]
|
|
0xd4, // A-law[f2] ==> u-law[d4]
|
|
0xd5, // A-law[f3] ==> u-law[d5]
|
|
0xda, // A-law[f4] ==> u-law[da]
|
|
0xdb, // A-law[f5] ==> u-law[db]
|
|
0xd8, // A-law[f6] ==> u-law[d8]
|
|
0xd9, // A-law[f7] ==> u-law[d9]
|
|
0xcf, // A-law[f8] ==> u-law[cf]
|
|
0xcf, // A-law[f9] ==> u-law[cf]
|
|
0xce, // A-law[fa] ==> u-law[ce]
|
|
0xce, // A-law[fb] ==> u-law[ce]
|
|
0xd2, // A-law[fc] ==> u-law[d2]
|
|
0xd3, // A-law[fd] ==> u-law[d3]
|
|
0xd0, // A-law[fe] ==> u-law[d0]
|
|
0xd1 // A-law[ff] ==> u-law[d1]
|
|
};
|
|
|
|
//--------------------------------------------------------------------------;
|
|
//
|
|
// Name:
|
|
// UlawToAlawTable
|
|
//
|
|
//
|
|
// Description:
|
|
// this array maps u-law characters to A-law characters
|
|
//
|
|
// Arguments:
|
|
// the index into the array is a u-law character
|
|
//
|
|
// Return:
|
|
// an element of the array is an A-law character
|
|
//
|
|
// Notes:
|
|
//
|
|
//
|
|
// History:
|
|
// 08/01/93 Created.
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
const BYTE BCODE UlawToAlawTable[256] =
|
|
{
|
|
0x2a, // u-law[00] ==> A-law[2a]
|
|
0x2b, // u-law[01] ==> A-law[2b]
|
|
0x28, // u-law[02] ==> A-law[28]
|
|
0x29, // u-law[03] ==> A-law[29]
|
|
0x2e, // u-law[04] ==> A-law[2e]
|
|
0x2f, // u-law[05] ==> A-law[2f]
|
|
0x2c, // u-law[06] ==> A-law[2c]
|
|
0x2d, // u-law[07] ==> A-law[2d]
|
|
0x22, // u-law[08] ==> A-law[22]
|
|
0x23, // u-law[09] ==> A-law[23]
|
|
0x20, // u-law[0a] ==> A-law[20]
|
|
0x21, // u-law[0b] ==> A-law[21]
|
|
0x26, // u-law[0c] ==> A-law[26]
|
|
0x27, // u-law[0d] ==> A-law[27]
|
|
0x24, // u-law[0e] ==> A-law[24]
|
|
0x25, // u-law[0f] ==> A-law[25]
|
|
0x3a, // u-law[10] ==> A-law[3a]
|
|
0x3b, // u-law[11] ==> A-law[3b]
|
|
0x38, // u-law[12] ==> A-law[38]
|
|
0x39, // u-law[13] ==> A-law[39]
|
|
0x3e, // u-law[14] ==> A-law[3e]
|
|
0x3f, // u-law[15] ==> A-law[3f]
|
|
0x3c, // u-law[16] ==> A-law[3c]
|
|
0x3d, // u-law[17] ==> A-law[3d]
|
|
0x32, // u-law[18] ==> A-law[32]
|
|
0x33, // u-law[19] ==> A-law[33]
|
|
0x30, // u-law[1a] ==> A-law[30]
|
|
0x31, // u-law[1b] ==> A-law[31]
|
|
0x36, // u-law[1c] ==> A-law[36]
|
|
0x37, // u-law[1d] ==> A-law[37]
|
|
0x34, // u-law[1e] ==> A-law[34]
|
|
0x35, // u-law[1f] ==> A-law[35]
|
|
0x0a, // u-law[20] ==> A-law[0a]
|
|
0x0b, // u-law[21] ==> A-law[0b]
|
|
0x08, // u-law[22] ==> A-law[08]
|
|
0x09, // u-law[23] ==> A-law[09]
|
|
0x0e, // u-law[24] ==> A-law[0e]
|
|
0x0f, // u-law[25] ==> A-law[0f]
|
|
0x0c, // u-law[26] ==> A-law[0c]
|
|
0x0d, // u-law[27] ==> A-law[0d]
|
|
0x02, // u-law[28] ==> A-law[02]
|
|
0x03, // u-law[29] ==> A-law[03]
|
|
0x00, // u-law[2a] ==> A-law[00]
|
|
0x01, // u-law[2b] ==> A-law[01]
|
|
0x06, // u-law[2c] ==> A-law[06]
|
|
0x07, // u-law[2d] ==> A-law[07]
|
|
0x04, // u-law[2e] ==> A-law[04]
|
|
0x05, // u-law[2f] ==> A-law[05]
|
|
0x1b, // u-law[30] ==> A-law[1b]
|
|
0x18, // u-law[31] ==> A-law[18]
|
|
0x19, // u-law[32] ==> A-law[19]
|
|
0x1e, // u-law[33] ==> A-law[1e]
|
|
0x1f, // u-law[34] ==> A-law[1f]
|
|
0x1c, // u-law[35] ==> A-law[1c]
|
|
0x1d, // u-law[36] ==> A-law[1d]
|
|
0x12, // u-law[37] ==> A-law[12]
|
|
0x13, // u-law[38] ==> A-law[13]
|
|
0x10, // u-law[39] ==> A-law[10]
|
|
0x11, // u-law[3a] ==> A-law[11]
|
|
0x16, // u-law[3b] ==> A-law[16]
|
|
0x17, // u-law[3c] ==> A-law[17]
|
|
0x14, // u-law[3d] ==> A-law[14]
|
|
0x15, // u-law[3e] ==> A-law[15]
|
|
0x6a, // u-law[3f] ==> A-law[6a]
|
|
0x68, // u-law[40] ==> A-law[68]
|
|
0x69, // u-law[41] ==> A-law[69]
|
|
0x6e, // u-law[42] ==> A-law[6e]
|
|
0x6f, // u-law[43] ==> A-law[6f]
|
|
0x6c, // u-law[44] ==> A-law[6c]
|
|
0x6d, // u-law[45] ==> A-law[6d]
|
|
0x62, // u-law[46] ==> A-law[62]
|
|
0x63, // u-law[47] ==> A-law[63]
|
|
0x60, // u-law[48] ==> A-law[60]
|
|
0x61, // u-law[49] ==> A-law[61]
|
|
0x66, // u-law[4a] ==> A-law[66]
|
|
0x67, // u-law[4b] ==> A-law[67]
|
|
0x64, // u-law[4c] ==> A-law[64]
|
|
0x65, // u-law[4d] ==> A-law[65]
|
|
0x7a, // u-law[4e] ==> A-law[7a]
|
|
0x78, // u-law[4f] ==> A-law[78]
|
|
0x7e, // u-law[50] ==> A-law[7e]
|
|
0x7f, // u-law[51] ==> A-law[7f]
|
|
0x7c, // u-law[52] ==> A-law[7c]
|
|
0x7d, // u-law[53] ==> A-law[7d]
|
|
0x72, // u-law[54] ==> A-law[72]
|
|
0x73, // u-law[55] ==> A-law[73]
|
|
0x70, // u-law[56] ==> A-law[70]
|
|
0x71, // u-law[57] ==> A-law[71]
|
|
0x76, // u-law[58] ==> A-law[76]
|
|
0x77, // u-law[59] ==> A-law[77]
|
|
0x74, // u-law[5a] ==> A-law[74]
|
|
0x75, // u-law[5b] ==> A-law[75]
|
|
0x4b, // u-law[5c] ==> A-law[4b]
|
|
0x49, // u-law[5d] ==> A-law[49]
|
|
0x4f, // u-law[5e] ==> A-law[4f]
|
|
0x4d, // u-law[5f] ==> A-law[4d]
|
|
0x42, // u-law[60] ==> A-law[42]
|
|
0x43, // u-law[61] ==> A-law[43]
|
|
0x40, // u-law[62] ==> A-law[40]
|
|
0x41, // u-law[63] ==> A-law[41]
|
|
0x46, // u-law[64] ==> A-law[46]
|
|
0x47, // u-law[65] ==> A-law[47]
|
|
0x44, // u-law[66] ==> A-law[44]
|
|
0x45, // u-law[67] ==> A-law[45]
|
|
0x5a, // u-law[68] ==> A-law[5a]
|
|
0x5b, // u-law[69] ==> A-law[5b]
|
|
0x58, // u-law[6a] ==> A-law[58]
|
|
0x59, // u-law[6b] ==> A-law[59]
|
|
0x5e, // u-law[6c] ==> A-law[5e]
|
|
0x5f, // u-law[6d] ==> A-law[5f]
|
|
0x5c, // u-law[6e] ==> A-law[5c]
|
|
0x5d, // u-law[6f] ==> A-law[5d]
|
|
0x52, // u-law[70] ==> A-law[52]
|
|
0x52, // u-law[71] ==> A-law[52]
|
|
0x53, // u-law[72] ==> A-law[53]
|
|
0x53, // u-law[73] ==> A-law[53]
|
|
0x50, // u-law[74] ==> A-law[50]
|
|
0x50, // u-law[75] ==> A-law[50]
|
|
0x51, // u-law[76] ==> A-law[51]
|
|
0x51, // u-law[77] ==> A-law[51]
|
|
0x56, // u-law[78] ==> A-law[56]
|
|
0x56, // u-law[79] ==> A-law[56]
|
|
0x57, // u-law[7a] ==> A-law[57]
|
|
0x57, // u-law[7b] ==> A-law[57]
|
|
0x54, // u-law[7c] ==> A-law[54]
|
|
0x54, // u-law[7d] ==> A-law[54]
|
|
0x55, // u-law[7e] ==> A-law[55]
|
|
0x55, // u-law[7f] ==> A-law[55]
|
|
0xaa, // u-law[80] ==> A-law[aa]
|
|
0xab, // u-law[81] ==> A-law[ab]
|
|
0xa8, // u-law[82] ==> A-law[a8]
|
|
0xa9, // u-law[83] ==> A-law[a9]
|
|
0xae, // u-law[84] ==> A-law[ae]
|
|
0xaf, // u-law[85] ==> A-law[af]
|
|
0xac, // u-law[86] ==> A-law[ac]
|
|
0xad, // u-law[87] ==> A-law[ad]
|
|
0xa2, // u-law[88] ==> A-law[a2]
|
|
0xa3, // u-law[89] ==> A-law[a3]
|
|
0xa0, // u-law[8a] ==> A-law[a0]
|
|
0xa1, // u-law[8b] ==> A-law[a1]
|
|
0xa6, // u-law[8c] ==> A-law[a6]
|
|
0xa7, // u-law[8d] ==> A-law[a7]
|
|
0xa4, // u-law[8e] ==> A-law[a4]
|
|
0xa5, // u-law[8f] ==> A-law[a5]
|
|
0xba, // u-law[90] ==> A-law[ba]
|
|
0xbb, // u-law[91] ==> A-law[bb]
|
|
0xb8, // u-law[92] ==> A-law[b8]
|
|
0xb9, // u-law[93] ==> A-law[b9]
|
|
0xbe, // u-law[94] ==> A-law[be]
|
|
0xbf, // u-law[95] ==> A-law[bf]
|
|
0xbc, // u-law[96] ==> A-law[bc]
|
|
0xbd, // u-law[97] ==> A-law[bd]
|
|
0xb2, // u-law[98] ==> A-law[b2]
|
|
0xb3, // u-law[99] ==> A-law[b3]
|
|
0xb0, // u-law[9a] ==> A-law[b0]
|
|
0xb1, // u-law[9b] ==> A-law[b1]
|
|
0xb6, // u-law[9c] ==> A-law[b6]
|
|
0xb7, // u-law[9d] ==> A-law[b7]
|
|
0xb4, // u-law[9e] ==> A-law[b4]
|
|
0xb5, // u-law[9f] ==> A-law[b5]
|
|
0x8a, // u-law[a0] ==> A-law[8a]
|
|
0x8b, // u-law[a1] ==> A-law[8b]
|
|
0x88, // u-law[a2] ==> A-law[88]
|
|
0x89, // u-law[a3] ==> A-law[89]
|
|
0x8e, // u-law[a4] ==> A-law[8e]
|
|
0x8f, // u-law[a5] ==> A-law[8f]
|
|
0x8c, // u-law[a6] ==> A-law[8c]
|
|
0x8d, // u-law[a7] ==> A-law[8d]
|
|
0x82, // u-law[a8] ==> A-law[82]
|
|
0x83, // u-law[a9] ==> A-law[83]
|
|
0x80, // u-law[aa] ==> A-law[80]
|
|
0x81, // u-law[ab] ==> A-law[81]
|
|
0x86, // u-law[ac] ==> A-law[86]
|
|
0x87, // u-law[ad] ==> A-law[87]
|
|
0x84, // u-law[ae] ==> A-law[84]
|
|
0x85, // u-law[af] ==> A-law[85]
|
|
0x9b, // u-law[b0] ==> A-law[9b]
|
|
0x98, // u-law[b1] ==> A-law[98]
|
|
0x99, // u-law[b2] ==> A-law[99]
|
|
0x9e, // u-law[b3] ==> A-law[9e]
|
|
0x9f, // u-law[b4] ==> A-law[9f]
|
|
0x9c, // u-law[b5] ==> A-law[9c]
|
|
0x9d, // u-law[b6] ==> A-law[9d]
|
|
0x92, // u-law[b7] ==> A-law[92]
|
|
0x93, // u-law[b8] ==> A-law[93]
|
|
0x90, // u-law[b9] ==> A-law[90]
|
|
0x91, // u-law[ba] ==> A-law[91]
|
|
0x96, // u-law[bb] ==> A-law[96]
|
|
0x97, // u-law[bc] ==> A-law[97]
|
|
0x94, // u-law[bd] ==> A-law[94]
|
|
0x95, // u-law[be] ==> A-law[95]
|
|
0xea, // u-law[bf] ==> A-law[ea]
|
|
0xe8, // u-law[c0] ==> A-law[e8]
|
|
0xe9, // u-law[c1] ==> A-law[e9]
|
|
0xee, // u-law[c2] ==> A-law[ee]
|
|
0xef, // u-law[c3] ==> A-law[ef]
|
|
0xec, // u-law[c4] ==> A-law[ec]
|
|
0xed, // u-law[c5] ==> A-law[ed]
|
|
0xe2, // u-law[c6] ==> A-law[e2]
|
|
0xe3, // u-law[c7] ==> A-law[e3]
|
|
0xe0, // u-law[c8] ==> A-law[e0]
|
|
0xe1, // u-law[c9] ==> A-law[e1]
|
|
0xe6, // u-law[ca] ==> A-law[e6]
|
|
0xe7, // u-law[cb] ==> A-law[e7]
|
|
0xe4, // u-law[cc] ==> A-law[e4]
|
|
0xe5, // u-law[cd] ==> A-law[e5]
|
|
0xfa, // u-law[ce] ==> A-law[fa]
|
|
0xf8, // u-law[cf] ==> A-law[f8]
|
|
0xfe, // u-law[d0] ==> A-law[fe]
|
|
0xff, // u-law[d1] ==> A-law[ff]
|
|
0xfc, // u-law[d2] ==> A-law[fc]
|
|
0xfd, // u-law[d3] ==> A-law[fd]
|
|
0xf2, // u-law[d4] ==> A-law[f2]
|
|
0xf3, // u-law[d5] ==> A-law[f3]
|
|
0xf0, // u-law[d6] ==> A-law[f0]
|
|
0xf1, // u-law[d7] ==> A-law[f1]
|
|
0xf6, // u-law[d8] ==> A-law[f6]
|
|
0xf7, // u-law[d9] ==> A-law[f7]
|
|
0xf4, // u-law[da] ==> A-law[f4]
|
|
0xf5, // u-law[db] ==> A-law[f5]
|
|
0xcb, // u-law[dc] ==> A-law[cb]
|
|
0xc9, // u-law[dd] ==> A-law[c9]
|
|
0xcf, // u-law[de] ==> A-law[cf]
|
|
0xcd, // u-law[df] ==> A-law[cd]
|
|
0xc2, // u-law[e0] ==> A-law[c2]
|
|
0xc3, // u-law[e1] ==> A-law[c3]
|
|
0xc0, // u-law[e2] ==> A-law[c0]
|
|
0xc1, // u-law[e3] ==> A-law[c1]
|
|
0xc6, // u-law[e4] ==> A-law[c6]
|
|
0xc7, // u-law[e5] ==> A-law[c7]
|
|
0xc4, // u-law[e6] ==> A-law[c4]
|
|
0xc5, // u-law[e7] ==> A-law[c5]
|
|
0xda, // u-law[e8] ==> A-law[da]
|
|
0xdb, // u-law[e9] ==> A-law[db]
|
|
0xd8, // u-law[ea] ==> A-law[d8]
|
|
0xd9, // u-law[eb] ==> A-law[d9]
|
|
0xde, // u-law[ec] ==> A-law[de]
|
|
0xdf, // u-law[ed] ==> A-law[df]
|
|
0xdc, // u-law[ee] ==> A-law[dc]
|
|
0xdd, // u-law[ef] ==> A-law[dd]
|
|
0xd2, // u-law[f0] ==> A-law[d2]
|
|
0xd2, // u-law[f1] ==> A-law[d2]
|
|
0xd3, // u-law[f2] ==> A-law[d3]
|
|
0xd3, // u-law[f3] ==> A-law[d3]
|
|
0xd0, // u-law[f4] ==> A-law[d0]
|
|
0xd0, // u-law[f5] ==> A-law[d0]
|
|
0xd1, // u-law[f6] ==> A-law[d1]
|
|
0xd1, // u-law[f7] ==> A-law[d1]
|
|
0xd6, // u-law[f8] ==> A-law[d6]
|
|
0xd6, // u-law[f9] ==> A-law[d6]
|
|
0xd7, // u-law[fa] ==> A-law[d7]
|
|
0xd7, // u-law[fb] ==> A-law[d7]
|
|
0xd4, // u-law[fc] ==> A-law[d4]
|
|
0xd4, // u-law[fd] ==> A-law[d4]
|
|
0xd5, // u-law[fe] ==> A-law[d5]
|
|
0xd5 // u-law[ff] ==> A-law[d5]
|
|
};
|