📄 w2k_lib.c
字号:
{
if (w2kConsoleTest ()) FreeConsole ();
gfStdTransient = FALSE;
}
gfStdFailure = FALSE;
return fOk;
}
// =================================================================
// FORMATTED OUTPUT
// =================================================================
DWORD WINAPI w2kFormatAnsi (PWORD pwBuffer,
DWORD dOffset,
PBYTE pbData,
DWORD dData,
DWORD dWidth,
DWORD dPrecision,
WORD wFill,
BOOL fRight,
BOOL fZero)
{
PWORD pwBuffer1;
WORD wData;
DWORD i, j, k;
DWORD n = 0;
if (pbData != NULL)
{
if (dData != -1)
{
i = dData;
}
else
{
for (i = 0; pbData [i]; i++);
}
}
j = (dPrecision == -1 ? i : max (i, dPrecision));
n = max (i, dWidth);
if (pwBuffer != NULL)
{
pwBuffer1 = pwBuffer + dOffset;
wData = (fZero ? '0' : wFill);
if (fRight)
{
k = n;
while (k > j) pwBuffer1 [--k] = wData;
while (k > i) pwBuffer1 [--k] = ' ';
k = 0;
}
else
{
k = 0;
while (k < n - j) pwBuffer1 [k++] = wData;
while (k < n - i) pwBuffer1 [k++] = ' ';
}
while (i--)
{
pwBuffer1 [k+i] = pbData [i];
}
}
if (pwBuffer != NULL) pwBuffer [dOffset+n] = 0;
return n;
}
// -----------------------------------------------------------------
DWORD WINAPI w2kFormatUnicode (PWORD pwBuffer,
DWORD dOffset,
PWORD pwData,
DWORD dData,
DWORD dWidth,
DWORD dPrecision,
WORD wFill,
BOOL fRight,
BOOL fZero)
{
PWORD pwBuffer1;
WORD wData;
DWORD i, j, k;
DWORD n = 0;
if (pwData != NULL)
{
if (dData != -1)
{
i = dData;
}
else
{
for (i = 0; pwData [i]; i++);
}
}
j = (dPrecision == -1 ? i : max (i, dPrecision));
n = max (i, dWidth);
if (pwBuffer != NULL)
{
pwBuffer1 = pwBuffer + dOffset;
wData = (fZero ? '0' : wFill);
if (fRight)
{
k = n;
while (k > j) pwBuffer1 [--k] = wData;
while (k > i) pwBuffer1 [--k] = ' ';
k = 0;
}
else
{
k = 0;
while (k < n - j) pwBuffer1 [k++] = wData;
while (k < n - i) pwBuffer1 [k++] = ' ';
}
while (i--)
{
pwBuffer1 [k+i] = pwData [i];
}
}
if (pwBuffer != NULL) pwBuffer [dOffset+n] = 0;
return n;
}
// -----------------------------------------------------------------
DWORD WINAPI w2kFormatDecimal (PWORD pwBuffer,
DWORD dOffset,
DWORD dData,
DWORD dWidth,
DWORD dPrecision,
WORD wFill,
BOOL fRight,
BOOL fZero,
BOOL fPrefix,
BOOL fSigned)
{
BOOL fMinus;
PWORD pwBuffer1;
WORD wPrefix, wData;
DWORD dData1, i, j, k;
DWORD n = 0;
fMinus = (fSigned && ((LONG) dData < 0));
dData1 = (fMinus ? 0 - dData : dData);
for (i = dData1, j = 1; i >= 10; i /= 10, j++);
if (dPrecision != -1) j = max (j, dPrecision);
k = (fPrefix || fMinus ? j+1 : j);
n = max (k, dWidth);
wPrefix = (k == j ? 0 : (fMinus ? '-' : (dData1 ? '+' : ' ')));
if (pwBuffer != NULL)
{
pwBuffer1 = pwBuffer + dOffset;
wData = (fZero ? '0' : wFill);
if (fRight)
{
for (i = n; i > k; i--) pwBuffer1 [i-1] = wData;
k = 0;
}
else
{
for (i = 0; i < n - j; i++) pwBuffer1 [i] = wData;
i = n;
k = (fZero ? 0 : n - k);
}
while (j--)
{
pwBuffer1 [--i] = (WORD) (dData1 % 10) + '0';
dData1 /= 10;
}
if (wPrefix)
{
pwBuffer1 [k] = wPrefix;
}
}
if (pwBuffer != NULL) pwBuffer [dOffset+n] = 0;
return n;
}
// -----------------------------------------------------------------
DWORD WINAPI w2kFormatHex (PWORD pwBuffer,
DWORD dOffset,
DWORD dData,
DWORD dWidth,
DWORD dPrecision,
WORD wFill,
BOOL fRight,
BOOL fZero,
BOOL fPrefix,
BOOL fLower)
{
PWORD pwBuffer1;
WORD wData;
DWORD dData1, i, j, k;
DWORD n = 0;
dData1 = dData;
for (i = dData1, j = 1; i >= 0x10; i >>= 4, j++);
if (dPrecision != -1) j = max (j, dPrecision);
k = (fPrefix ? j+2 : j);
n = max (k, (fPrefix ? dWidth+2 : dWidth));
if (pwBuffer != NULL)
{
pwBuffer1 = pwBuffer + dOffset;
wData = (fZero ? '0' : wFill);
if (fRight)
{
for (i = n; i > k; i--) pwBuffer1 [i-1] = wData;
k = 0;
}
else
{
for (i = 0; i < n - j; i++) pwBuffer1 [i] = wData;
i = n;
k = (fZero ? 0 : n - k);
}
wData = (fLower ? 'a' : 'A');
while (j--)
{
if ((pwBuffer1 [--i] = (WORD) (dData1 & 0xF)) < 10)
{
pwBuffer1 [i] += '0';
}
else
{
pwBuffer1 [i] -= 10;
pwBuffer1 [i] += wData;
}
dData1 >>= 4;
}
if (fPrefix)
{
pwBuffer1 [k ] = '0';
pwBuffer1 [k+1] = (fLower ? 'x' : 'X');
}
}
if (pwBuffer != NULL) pwBuffer [dOffset+n] = 0;
return n;
}
// -----------------------------------------------------------------
DWORD WINAPI w2kFormatSingle (PWORD pwBuffer,
DWORD dOffset,
PWORD pwFormat,
PDWORD pdFormat,
PVOID *ppData,
WORD wFill,
BOOL fUnicode)
{
PVOID pData, pText;
WORD wData, wFill1;
BOOL fAnsi, fShort, fSigned, fLower, fRight, fZero, fPrefix;
BOOL fPrecision, fDone, fSkip;
DWORD dPrecision, dWidth, dData, dFormat, dNumber;
DWORD n = 0;
pData = (ppData != NULL ? *ppData : NULL);
dFormat = (pdFormat != NULL ? *pdFormat : 0);
if (pwFormat != NULL)
{
fAnsi = !fUnicode;
fShort = FALSE;
fSigned = FALSE;
fLower = FALSE;
fRight = FALSE;
fZero = FALSE;
fPrefix = FALSE;
wData = '%';
wFill1 = wFill;
dWidth = 0;
dPrecision = -1;
fPrecision = FALSE;
fDone = FALSE;
while ((!fDone) && pwFormat [dFormat])
{
fSkip = TRUE;
switch (pwFormat [dFormat])
{
// operand size
case 'l':
{
fShort = fAnsi = FALSE;
break;
}
case 'h':
{
fShort = fAnsi = TRUE;
break;
}
// strings
case 'S':
{
fAnsi = fUnicode;
}
case 's':
{
pText = (pData != NULL
? *(PVOID *) pData
: NULL);
if (fAnsi)
{
n = w2kFormatAnsi
(pwBuffer, dOffset,
pText, -1,
dWidth, dPrecision, wFill1,
fRight, fZero);
}
else
{
n = w2kFormatUnicode
(pwBuffer, dOffset,
pText, -1,
dWidth, dPrecision, wFill1,
fRight, fZero);
}
if (pData != NULL)
{
pData = (PBYTE) pData + sizeof (PVOID);
}
fDone = TRUE;
break;
}
// characters
case 'C':
{
fAnsi = fUnicode;
}
case 'c':
{
wData = (pData != NULL
? (fAnsi
? *(PBYTE) pData
: *(PWORD) pData)
: ' ');
if (pData != NULL)
{
pData = (PBYTE) pData + sizeof (DWORD);
}
}
case '%':
{
n = w2kFormatUnicode
(pwBuffer, dOffset,
&wData, 1,
dWidth, dPrecision, wFill1,
fRight, fZero);
fDone = TRUE;
break;
}
// decimal numbers
case 'd':
case 'i':
{
fSigned = TRUE;
}
case 'u':
{
dData = (pData != NULL
? (fSigned
? (fShort
? *(PSHORT) pData
: *(PLONG ) pData)
: (fShort
? *(PWORD ) pData
: *(PDWORD) pData))
: 0);
n = w2kFormatDecimal
(pwBuffer, dOffset, dData,
dWidth, dPrecision, wFill1,
fRight, fZero, fPrefix, fSigned);
if (pData != NULL)
{
pData = (PBYTE) pData + sizeof (DWORD);
}
fDone = TRUE;
break;
}
// hex numbers
case 'x':
{
fLower = TRUE;
}
case 'X':
{
dData = (pData != NULL
? (fShort
? *(PWORD ) pData
: *(PDWORD) pData)
: 0);
n = w2kFormatHex
(pwBuffer, dOffset, dData,
dWidth, dPrecision, wFill1,
fRight, fZero, fPrefix, fLower);
if (pData != NULL)
{
pData = (PBYTE) pData + sizeof (DWORD);
}
fDone = TRUE;
break;
}
// output styles
case '+':
{
if (pwFormat [dFormat+1])
{
wFill1 = pwFormat [++dFormat];
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -