📄 parsepjl.c
字号:
{
c=*pParseVars->pInPJL_Local;
if ( c==0 )
{
pParseVars->status = STATUS_END_OF_STRING;
return;
}
if ( !AdvancePointerPastString(pParseVars, lpCRLF) )
{
if ( pParseVars->status==STATUS_REACHED_FF )
{
pParseVars->status = STATUS_SYNTAX_ERROR;
}
return;
}
ExpectFinalFF(pParseVars);
}
return;
}
void ExpectFinalFF(ParseVarsType *pParseVars)
{
if ( pParseVars->status==STATUS_CONTINUE )
{
if ( *pParseVars->pInPJL_Local==FF )
{
pParseVars->status = STATUS_REACHED_END_OF_COMMAND_OK;
pParseVars->pInPJL_Local++;
}
else
{
if ( *pParseVars->pInPJL_Local==0 )
{
pParseVars->status = STATUS_END_OF_STRING;
}
else
{
pParseVars->status = STATUS_SYNTAX_ERROR;
}
}
}
return;
}
/*
int GetPositiveInteger(ParseVarsType *pParseVars)
This function skips spaces and then interprets all the digits in input stream
as a positive integer.
If digits follow any spaces and they are not terminated by a zero then
the return value is the positive integer.
If the first character following spaces in not a digit or the end of
string is encountered then
-1 is returned as the value
pParseVars->status is set to STATUS_SYNTAX_ERROR
Note: does not check for overflow
*/
int GetPositiveInteger(ParseVarsType *pParseVars)
{
int value;
LPSTR pIn;
BYTE c;
if ( !SkipOverSpaces(pParseVars) )
{
if ( pParseVars->status == STATUS_REACHED_FF )
{
pParseVars->status = STATUS_SYNTAX_ERROR;
}
return(-1);
}
pIn = pParseVars->pInPJL_Local;
for ( value=0; ((c=*pIn++)>='0')&&(c<='9'); value=value*10+(c-'0') );
if ( (c==0)||(pIn==pParseVars->pInPJL_Local+1) )
{
/* either end of string encountered or no digits found */
if ( c==0 )
{
pParseVars->status = STATUS_END_OF_STRING;
}
else
{
pParseVars->status = STATUS_SYNTAX_ERROR;
}
pParseVars->pInPJL_Local = pIn-1;
return(-1);
}
pParseVars->pInPJL_Local = pIn-1;
return(value);
}
void SetNewList(ParseVarsType *pParseVars, ParamType param)
{
pParseVars->arrayOfLists[0] = param.pList;
pParseVars->arrayOfLists[1] = NULL;
return;
}
void StoreToken(ParseVarsType *pParseVars, DWORD dwToken)
{
pParseVars->dwNextToken = dwToken;
return;
}
BOOL StoreTokenValueAndAdvancePointer(ParseVarsType *pParseVars, UINT_PTR dwValue)
{
if ( pParseVars->nTokenLeft==0 )
{
pParseVars->status = STATUS_NOT_ENOUGH_ROOM_FOR_TOKENS;
return(FALSE);
}
pParseVars->pToken_Local->token = pParseVars->dwNextToken;
pParseVars->pToken_Local->value = dwValue;
pParseVars->pToken_Local++;
pParseVars->nTokenInBuffer_Local++;
pParseVars->nTokenLeft--;
return(TRUE);
}
void GetTotalAndLargestFF(ParseVarsType *pParseVars, ParamType param)
{
int value;
param; /* to eliminate not used warning */
if ( !ExpectString(pParseVars, "TOTAL=") )
{
return;
}
StoreToken(pParseVars, TOKEN_INFO_MEMORY_TOTAL);
if ( (value=GetPositiveInteger(pParseVars))==-1 )
{
/* Not a valid number - status set by GetPositiveInteger() */
return;
}
if ( !StoreTokenValueAndAdvancePointer(pParseVars, value) )
{
return;
}
if ( !ExpectString(pParseVars, "\r\nLARGEST=") )
{
return;
}
StoreToken(pParseVars, TOKEN_INFO_MEMORY_LARGEST);
if ( (value=GetPositiveInteger(pParseVars))==-1 )
{
/* Not a valid number - status set by GetPositiveInteger() */
return;
}
if ( !StoreTokenValueAndAdvancePointer(pParseVars, value) )
{
return;
}
ExpectFinalCRLFFF(pParseVars);
return;
}
void GetCodeAndOnlineFF(ParseVarsType *pParseVars, ParamType param)
{
int value;
param; /* to eliminate not used warning */
if ( !ExpectString(pParseVars,"CODE=") )
{
return;
}
StoreToken(pParseVars, TOKEN_INFO_STATUS_CODE);
if ( (value=GetPositiveInteger(pParseVars))==-1 )
{
/* Not a valid number - status set by GetPositiveInteger() */
return;
}
if ( !StoreTokenValueAndAdvancePointer(pParseVars, value) )
{
return;
}
if ( !ExpectString(pParseVars, "\r\nDISPLAY=") )
{
return;
}
if ( !SkipPastNextCRLF(pParseVars) )
{
return;
}
if ( !ExpectString(pParseVars, "ONLINE=") )
{
return;
}
StoreToken(pParseVars, TOKEN_INFO_STATUS_ONLINE);
pParseVars->pCurrentKeywords = FALSEandTRUEKeywords;
if ( (value=LookForKeyword(pParseVars))==-1 )
{
/* Not TRUE or FALSE */
pParseVars->status = STATUS_SYNTAX_ERROR;
return;
}
if ( !StoreTokenValueAndAdvancePointer(pParseVars, value) )
{
return;
}
ExpectFinalCRLFFF(pParseVars);
return;
}
/*
BOOL ExpectString(ParseVarsType *pParseVars, LPSTR pString)
This function looks for a match of the current stream
position with pString.
If a match is found:
pParseVars->pInPJL_Local is set to point just past the string.
the return value is TRUE
(pParseVars->status is unchanged)
If the end of input is encountered before the string is found then
pParseVars->pInPJL_Local is set to point to the terminating 0.
the return value is FALSE
pParseVars->status is set to STATUS_END_OF_STRING
If an FF is encountered before the string is found then
pParseVars->pInPJL_Local is set to point just past the FF.
the return value is FALSE
pParseVars->status is set to STATUS_SYNTAX_ERROR
*/
BOOL ExpectString(ParseVarsType *pParseVars, LPSTR pString)
{
LPSTR pIn = pParseVars->pInPJL_Local;
LPSTR pS = pString;
BYTE s, in;
while ( ((s=*pS) != 0) && ((in=*pIn)!=0) && (in!=FF) && (s==in) )
{
pS++;
pIn++;
}
if ( s==0 )
{
/* The whole string matched */
/* point to character after string in input */
pParseVars->pInPJL_Local = pIn;
return(TRUE);
}
pParseVars->status = ( in!=0 )?
STATUS_SYNTAX_ERROR:STATUS_END_OF_STRING;
pParseVars->pInPJL_Local = pIn;
return(FALSE);
}
/*
BOOL SkipPastNextCRLF(ParseVarsType *pParseVars)
This function positions the stream pointer past the next
CRLF.
If a CRLF is found:
pParseVars->pInPJL_Local is set to point just past the CRLF.
the return value is TRUE
(pParseVars->status is unchanged)
If the end of input is encountered before the CRLF is found then
pParseVars->pInPJL_Local is set to point to the terminating 0.
the return value is FALSE
pParseVars->status is set to STATUS_END_OF_STRING
If an FF is encountered before the CRLF is found then
the return value is FALSE
pParseVars->status is set to STATUS_SYNTAX_ERROR
*/
BOOL SkipPastNextCRLF(ParseVarsType *pParseVars)
{
if ( !AdvancePointerPastString(pParseVars, "\r\n") )
{
if ( pParseVars->status == STATUS_REACHED_FF)
{
pParseVars->status = STATUS_SYNTAX_ERROR;
}
return(FALSE);
}
return(TRUE);
}
void GetTokenFromIndexSetNewList(ParseVarsType *pParseVars, ParamType param)
{
StoreToken(pParseVars,
pParseVars->pCurrentList->tokenBaseValue+pParseVars->dwFoundIndex);
SetNewList(pParseVars, param);
return;
}
void SetValueFromParamFF(ParseVarsType *pParseVars, ParamType param)
{
if ( !StoreTokenValueAndAdvancePointer(pParseVars, param.value) )
{
return;
}
ExpectFinalCRLFFF(pParseVars);
return;
}
void SetValueFromParam(ParseVarsType *pParseVars, ParamType param)
{
if ( !StoreTokenValueAndAdvancePointer(pParseVars, param.value) )
{
return;
}
return;
}
void ActionNotFoundSkipCFLFandIndentedLines(ParseVarsType *pParseVars)
{
#if DEBUGOUTPUT
DbgMsg("ActionNotFoundSkipCRLF In=%hs\n", pParseVars->pInPJL_Local);
#endif
do
{
if ( !SkipPastNextCRLF(pParseVars) )
{
#if DEBUGOUTPUT
DbgMsg("ActionNotFoundSkipCRLF error skipping\n");
#endif
return;
}
} while (*pParseVars->pInPJL_Local==TAB);
#if DEBUGOUTPUT
DbgMsg("ActionNotFoundSkipCRLF Out=%hs\n", pParseVars->pInPJL_Local);
#endif
return;
}
void GetTokenFromIndexValueFromNumberEOLFromParam
(ParseVarsType *pParseVars,ParamType param)
{
int value;
param; /* to eliminate not used warning */
#if DEBUGOUTPUT
DbgMsg("GetTokenFromIndexValueFromNumberIn=%hs\n", pParseVars->pInPJL_Local);
#endif
StoreToken(pParseVars,
pParseVars->pCurrentList->tokenBaseValue+pParseVars->dwFoundIndex);
if ( (value=GetPositiveInteger(pParseVars))==-1 )
{
/* Not a valid number - status set by GetPositiveInteger() */
#if DEBUGOUTPUT
DbgMsg("error getting number\n");
#endif
return;
}
if ( !StoreTokenValueAndAdvancePointer(pParseVars, value) )
{
#if DEBUGOUTPUT
DbgMsg("error storing value\n");
#endif
return;
}
if ( !ExpectString(pParseVars, param.lpstr) )
{
return;
}
#if DEBUGOUTPUT
DbgMsg("GetTokenFromIndexValueFromNumberOut=%hs\n", pParseVars->pInPJL_Local);
#endif
return;
}
void GetTokenFromIndexValueFromBooleanEOL
(ParseVarsType *pParseVars,ParamType param)
{
int value;
param; /* to eliminate not used warning */
#if DEBUGOUTPUT
DbgMsg("GetTokenFromIndexValueFromBooleanEOLin=%hs\n", pParseVars->pInPJL_Local);
#endif
StoreToken(pParseVars,
pParseVars->pCurrentList->tokenBaseValue+pParseVars->dwFoundIndex);
pParseVars->pCurrentKeywords = FALSEandTRUEKeywords;
if ( (value=LookForKeyword(pParseVars))==-1 )
{
/* Not TRUE or FALSE */
pParseVars->status = STATUS_SYNTAX_ERROR;
return;
}
if ( !StoreTokenValueAndAdvancePointer(pParseVars, value) )
{
return;
}
if ( !ExpectString(pParseVars, param.lpstr) )
{
return;
}
#if DEBUGOUTPUT
DbgMsg("GetTokenFromIndexValueFromBooleanEOLout=%hs\n", pParseVars->pInPJL_Local);
#endif
return;
}
void GetTokenFromIndexValueFromStringEOL
(ParseVarsType *pParseVars,ParamType param)
{
param; /* to eliminate not used warning */
#if DEBUGOUTPUT
DbgMsg("GetTokenFromIndexValueFromStringEOLin=%hs\n", pParseVars->pInPJL_Local);
#endif
StoreToken(pParseVars,
pParseVars->pCurrentList->tokenBaseValue+pParseVars->dwFoundIndex);
if ( !StoreTokenValueAndAdvancePointer(pParseVars, (UINT_PTR)pParseVars->pInPJL_Local))
{
return;
}
SkipPastNextCRLF(pParseVars);
#if DEBUGOUTPUT
DbgMsg("GetTokenFromIndexValueFromStringEOLout=%hs\n", pParseVars->pInPJL_Local);
#endif
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -