📄 pedump.c
字号:
char **pps) // parameter stack
{
int i, n;
char c;
char name[128];
char *pin, *pout, *ps;
//printf(" %c ", **in);
pin = *ppin;
pout = *ppout;
ps = *pps;
c = *pin;
switch (c)
{
// types processing
case 'b':
strcpy (pout, "byte");
pout += 4;
pin++;
break;
case 'c':
strcpy (pout, "char");
pout += 4;
pin++;
break;
case 'd':
strcpy (pout, "double");
pout += 6;
pin++;
break;
case 'f':
strcpy (pout, "float");
pout += 5;
pin++;
break;
case 'g':
strcpy (pout, "long double");
pout += 11;
pin++;
break;
case 'i':
strcpy (pout, "int");
pout += 3;
pin++;
break;
case 'l':
strcpy (pout, "long");
pout += 4;
pin++;
break;
case 's':
strcpy (pout, "short");
pout += 5;
pin++;
break;
case 'v':
strcpy (pout, "void");
pout += 4;
pin++;
break;
// postfix processing
case 'M':
case 'p':
if (*(pin + 1) == 'p')
{
*ps++ = 'p';
pin += 2;
}
else
{
*ps++ = '*';
pin++;
}
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
case 'q':
*pout++ = '(';
pin++;
*ps++ = 'q';
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
case 'r':
if (*(pin + 1) == 'p')
{
*ps++ = 'r';
pin += 2;
}
else
{
*ps++ = '&';
pin++;
}
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
// repeat processing
case 't':
if (isdigit (*(pin + 1)))
{
n = *(pin + 1) - '0';
pin++;
pin++;
GetPreviousParamString (pout, name);
strcpy (pout, name);
pout += strlen (name);
for (i = 1; i < n; i++)
{
*pout++ = ',';
strcpy (pout, name);
pout += strlen (name);
}
}
else
pin++;
break;
// prefix processing
case 'u':
strcpy (pout, "u");
pout += 1;
pin++;
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
case 'x':
strcpy (pout, "const ");
pout += 6;
pin++;
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
case 'z':
strcpy (pout, "static ");
pout += 7;
pin++;
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
default:
strcpy (pout, "!1!");
pout += 3;
*pout++ = *pin++;
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
}
// need to process postfix finally
c = *(ps - 1);
if (strchr ("tqx", c))
{
if (*(pin) && !strchr ("@$%", *(pin)))
*pout++ = ',';
*ppin = pin;
*ppout = pout;
*pps = ps;
return;
}
switch (c)
{
case 'r':
strcpy (pout, "*&");
pout += 2;
ps--;
break;
case 'p':
strcpy (pout, "**");
pout += 2;
ps--;
break;
case '&':
strcpy (pout, "&");
pout += 1;
ps--;
break;
case '*':
strcpy (pout, "*");
pout += 1;
ps--;
break;
default:
strcpy (pout, "!2!");
pout += 3;
ps--;
break;
}
if (*(pin) && !strchr ("@$%", *(pin)))
*pout++ = ',';
*ppin = pin;
*ppout = pout;
*pps = ps;
}
//
// This function is written by sang cho
// October 11, 1997
//
/* translate parameter part of condensed name */
BOOL WINAPI
StringExpands (
char **ppin, // read-only source
char **ppout, // translated result
char **pps, // parameter stack
Str_P * pcstr) // currently stored string
{
// int n;
// char c;
char *pin, *pout, *ps;
Str_P c_str;
BOOL stringMode = TRUE;
pin = *ppin;
pout = *ppout;
ps = *pps;
c_str = *pcstr;
if (strncmp (pin, "bctr", 4) == 0)
{
strncpy (pout, c_str.pos, c_str.length);
pout += c_str.length;
pin += 4;
}
else if (strncmp (pin, "bdtr", 4) == 0)
{
*pout++ = '~';
strncpy (pout, c_str.pos, c_str.length);
pout += c_str.length;
pin += 4;
}
else if (*pin == 'o')
{
strcpy (pout, "const ");
pout += 6;
pin++;
stringMode = FALSE;
}
else if (*pin == 'q')
{
*pout++ = '(';
pin++;
*ps++ = 'q';
stringMode = FALSE;
}
else if (*pin == 't')
{
//if (*(ps-1) == 't') { *pout++ = ','; pin++; } // this also got me...
//else october 12 .. sang
{
*pout++ = '<';
pin++;
*ps++ = 't';
}
stringMode = FALSE;
}
else if (strncmp (pin, "xq", 2) == 0)
{
*pout++ = '(';
pin += 2;
*ps++ = 'x';
*ps++ = 'q';
stringMode = FALSE;
}
else if (strncmp (pin, "bcall", 5) == 0)
{
strcpy (pout, "operator ()");
pout += 11;
pin += 5;
}
else if (strncmp (pin, "bsubs", 5) == 0)
{
strcpy (pout, "operator []");
pout += 11;
pin += 5;
}
else if (strncmp (pin, "bnwa", 4) == 0)
{
strcpy (pout, "operator new[]");
pout += 14;
pin += 4;
}
else if (strncmp (pin, "bdla", 4) == 0)
{
strcpy (pout, "operator delete[]");
pout += 17;
pin += 4;
}
else if (strncmp (pin, "bnew", 4) == 0)
{
strcpy (pout, "operator new");
pout += 12;
pin += 4;
}
else if (strncmp (pin, "bdele", 5) == 0)
{
strcpy (pout, "operator delete");
pout += 15;
pin += 5;
}
else if (strncmp (pin, "blsh", 4) == 0)
{
strcpy (pout, "operator <<");
pout += 11;
pin += 4;
}
else if (strncmp (pin, "brsh", 4) == 0)
{
strcpy (pout, "operator >>");
pout += 11;
pin += 4;
}
else if (strncmp (pin, "binc", 4) == 0)
{
strcpy (pout, "operator ++");
pout += 11;
pin += 4;
}
else if (strncmp (pin, "bdec", 4) == 0)
{
strcpy (pout, "operator --");
pout += 11;
pin += 4;
}
else if (strncmp (pin, "badd", 4) == 0)
{
strcpy (pout, "operator +");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "brplu", 5) == 0)
{
strcpy (pout, "operator +=");
pout += 11;
pin += 5;
}
else if (strncmp (pin, "bdiv", 4) == 0)
{
strcpy (pout, "operator /");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "brdiv", 5) == 0)
{
strcpy (pout, "operator /=");
pout += 11;
pin += 5;
}
else if (strncmp (pin, "bmul", 4) == 0)
{
strcpy (pout, "operator *");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "brmul", 5) == 0)
{
strcpy (pout, "operator *=");
pout += 11;
pin += 5;
}
else if (strncmp (pin, "basg", 4) == 0)
{
strcpy (pout, "operator =");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "beql", 4) == 0)
{
strcpy (pout, "operator ==");
pout += 11;
pin += 4;
}
else if (strncmp (pin, "bneq", 4) == 0)
{
strcpy (pout, "operator !=");
pout += 11;
pin += 4;
}
else if (strncmp (pin, "bor", 3) == 0)
{
strcpy (pout, "operator |");
pout += 10;
pin += 3;
}
else if (strncmp (pin, "bror", 4) == 0)
{
strcpy (pout, "operator |=");
pout += 11;
pin += 4;
}
else if (strncmp (pin, "bcmp", 4) == 0)
{
strcpy (pout, "operator ~");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "bnot", 4) == 0)
{
strcpy (pout, "operator !");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "band", 4) == 0)
{
strcpy (pout, "operator &");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "brand", 5) == 0)
{
strcpy (pout, "operator &=");
pout += 11;
pin += 5;
}
else if (strncmp (pin, "bxor", 4) == 0)
{
strcpy (pout, "operator ^");
pout += 10;
pin += 4;
}
else if (strncmp (pin, "brxor", 5) == 0)
{
strcpy (pout, "operator ^=");
pout += 11;
pin += 5;
}
else
{
strcpy (pout, "!$$$!");
pout += 5;
}
*ppin = pin;
*ppout = pout;
*pps = ps;
return stringMode;
} // end of '$' processing
//----------------------------------------------------------------------
// structure to store string tokens
//----------------------------------------------------------------------
//typedef struct _Str_P {
// char flag; // string_flag '@' or '%' or '#'
// char *pos; // starting postion of string
// int length; // length of string
// BOOL wasString; // if it were stringMode or not
//} Str_P;
//----------------------------------------------------------------------
//
// I think I knocked it down finally. But who knows?
// october 12, 1997 ... sang
//
// well I have to rewrite whole part of TranslateFunctionName..
// this time I am a little bit more experienced than 5 days ago.
// or am i??? anyway i use stacks instead of recurcive calls
// and i hope this will take care of every symptoms i have experienced..
// october 10, 1997 .... sang
// It took a lot of time for me to figure out what is all about....
// but still some prefixes like z (static)
// -- or some types like b (byte) ,g (long double) ,s (short) --
// -- or postfix like M ( * )
// -- or $or ( & ) which is pretty wierd. .. added.. october 12
// -- also $t business is quite tricky too. (templates)
// there may be a lot of things undiscovered yet....
// I am not so sure my interpretation is correct or not
// If I am wrong please let me know.
// october 8, 1997 .... sang
//
//
// This function is written by sang cho
// October 5, 1997
//
/* translate condesed import function name */
char * WINAPI
TranslateFunctionName (
char *psz)
{
int i, /*j,*/ n;
char c = 0;
char cc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -