Moderator: MacroQuest Developers
Code: Select all
// ***************************************************************************
// Function: GetNextArg
// Description: Returns a pointer to the next argument
// ***************************************************************************
PCHAR GetNextArg(PCHAR szLine, DWORD dwNumber, BOOL CSV, CHAR Separator)
{
PCHAR szNext = szLine;
BOOL CustomSep = FALSE;
BOOL InQuotes = FALSE;
if (Separator!=0) CustomSep=TRUE;
while (
((!CustomSep) && (szNext[0] == ' '))
|| ((!CustomSep) && (szNext[0] == '\t'))
|| ((CustomSep) && (szNext[0]==Separator))
|| ((!CustomSep) && (CSV) && (szNext[0]==','))
) szNext++;
if ((INT)dwNumber < 1) return szNext;
for (dwNumber;dwNumber>0;dwNumber--) {
while ((
((CustomSep) || (szNext[0] != ' '))
&& ((CustomSep) || (szNext[0] != '\t'))
&& ((!CustomSep) || (szNext[0]!=Separator))
&& ((CustomSep) || (!CSV) || (szNext[0]!=','))
&& (szNext[0] != 0)
)
|| (InQuotes)
) {
if ((szNext[0] == 0) && (InQuotes)) {
DebugSpew("GetNextArg - No matching quote, returning empty string");
return szNext;
}
if (szNext[0] == '"') InQuotes = !InQuotes;
szNext++;
}
while (
((!CustomSep) && (szNext[0] == ' '))
|| ((!CustomSep) && (szNext[0] == '\t'))
|| ((CustomSep) && (szNext[0]==Separator))
|| ((!CustomSep) && (CSV) && (szNext[0]==','))
) szNext++;
}
return szNext;
}
// ***************************************************************************
// Function: GetArg
// Description: Returns a pointer to the current argument in szDest
// ***************************************************************************
PCHAR GetArg(PCHAR szDest, PCHAR szSrc, DWORD dwNumber, BOOL LeaveQuotes, BOOL ToParen, BOOL CSV, CHAR Separator)
{
DWORD i=0;
DWORD j=0;
BOOL CustomSep = FALSE;
BOOL InQuotes = FALSE;
PCHAR szTemp = szSrc;
ZeroMemory(szDest,MAX_STRING);
if (Separator!=0) CustomSep=TRUE;
szTemp = GetNextArg(szTemp,dwNumber-1, CSV, Separator);
while ((
((CustomSep) || (szTemp[i] != ' '))
&& ((CustomSep) || (szTemp[i] != '\t'))
&& ((CustomSep) || (!CSV) || (szTemp[i]!=','))
&& ((!CustomSep) || (szTemp[i]!=Separator))
&& (szTemp[i] != 0)
&& ((!ToParen) || (szTemp[i] !=')'))
)
|| (InQuotes)
) {
if ((szTemp[i] == 0) && (InQuotes)) {
DebugSpew("GetArg - No matching quote, returning entire string");
DebugSpew("Source = %s",szSrc);
DebugSpew("Dest = %s",szDest);
return szDest;
}
if (szTemp[i] == '"') {
InQuotes = !InQuotes;
if (LeaveQuotes) {
szDest[j] = szTemp[i];
j++;
}
} else {
szDest[j] = szTemp[i];
j++;
}
i++;
}
if ((ToParen) && (szTemp[i]==')')) szDest[j]=')';
//DebugSpew("GetArg - Arg%d from '%s' = '%s'",dwNumber,szTemp,szDest);
return szDest;
}



Code: Select all
// $arg(num,string[,<separator>])
} else if (!strncmp("arg(",szVar,4)) {
if ((!strstr(szVar,")")) || (!strstr(szVar,","))) {
DebugSpew("PMP - Bad $arg() '%s'",szVar);
i--;
szOutput[j] = '@';
j++;
} else {
CHAR szArg[MAX_STRING] = {0};
CHAR szTemp[MAX_STRING] = {0};
DWORD num = 0;
GetArg(szArg,szVar,2,FALSE,FALSE,TRUE);
if (szArg[strlen(szArg)-1]==')') {
szArg[strlen(szArg)-1]=0;
} else {
GetArg(szTemp,szVar,3,FALSE,FALSE,TRUE);
szTemp[1]=0;
}
i += (strstr(szVar,")")-szVar);
num = atoi(szVar+4);
//DebugSpew("$arg: Number: %d, String: '%s', Separator: '%s'",num,szArg,szTemp);
GetArg(szTemp,szArg,num,FALSE,FALSE,FALSE,szTemp[0]);
strcat(szOutput,szTemp);
j+=strlen(szTemp);
}
// $left(num,string)