50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
|
/*****************************************************************************
|
||
|
ExeDgt()
|
||
|
This function handles a digit encountered in a command string.
|
||
|
It converts the digit and any following digits into a binary value using
|
||
|
the current radix, and pushes the value onto the expression stack.
|
||
|
*****************************************************************************/
|
||
|
#include "zport.h" /* define portability identifiers */
|
||
|
#include "tecoc.h" /* define general identifiers */
|
||
|
#include "defext.h" /* define external global variables */
|
||
|
#include "deferr.h" /* define identifiers for error messages */
|
||
|
#include "chmacs.h" /* define character processing macros */
|
||
|
DEFAULT ExeDgt() /* execute a digit command */
|
||
|
{
|
||
|
LONG TmpLng;
|
||
|
DBGFEN(1,"ExeDgt",NULL);
|
||
|
if ((Radix == 8) && (*CBfPtr > '7')) { /* if bad octal digit */
|
||
|
ErrMsg(ERR_ILN); /* ILN = "illegal number" */
|
||
|
DBGFEX(1,DbgFNm,"FAILURE, bad octal digit");
|
||
|
return FAILURE;
|
||
|
}
|
||
|
TmpLng = 0;
|
||
|
do {
|
||
|
TmpLng *= Radix;
|
||
|
if (Is_Digit(*CBfPtr)) {
|
||
|
TmpLng += *CBfPtr - '0';
|
||
|
} else if (Is_Upper(*CBfPtr)) {
|
||
|
TmpLng += *CBfPtr - '\67';
|
||
|
} else {
|
||
|
TmpLng += *CBfPtr - '\127';
|
||
|
}
|
||
|
if (CBfPtr == CStEnd) {
|
||
|
#if DEBUGGING
|
||
|
sprintf(DbgSBf,"PushEx(%ld,OPERAND)", TmpLng);
|
||
|
DbgFEx(1,DbgFNm,DbgSBf);
|
||
|
#endif
|
||
|
return PushEx(TmpLng, OPERAND);
|
||
|
}
|
||
|
++CBfPtr;
|
||
|
if (IsRadx(*CBfPtr) && TraceM) {
|
||
|
EchoIt(*CBfPtr);
|
||
|
}
|
||
|
} while (IsRadx(*CBfPtr));
|
||
|
--CBfPtr; /* cancel ExeCSt's ++CBfPtr */
|
||
|
#if DEBUGGING
|
||
|
sprintf(DbgSBf,"PushEx(%ld,OPERAND)", TmpLng);
|
||
|
DbgFEx(1,DbgFNm,DbgSBf);
|
||
|
#endif
|
||
|
return PushEx(TmpLng, OPERAND);
|
||
|
}
|