nsprintf(temp,OC("RATFOR %s (Output l. %u in %s): %s."),4,err_type==ERROR?"ERROR":"WARNING",OUTPUT_LINE,params.OUTPUT_FILE_NAME,temp1)>=(int)(N_MSGBUF))OVERFLW("temp","");
last_level= MAX(rlevel-1,0);
if(
nsprintf(temp1,OC("%s Expanding \"%s\" (loop level %d) beginning at output line %u. \
In \"%s %s\" beginning at line %u."),7,(char*)temp,(char*)cmd_name(begun[last_level].cmd),begun[last_level].level,begun[last_level].line,(char*)cmd_name(begun[0].cmd),(char*)name_of(begun[0].name),begun[0].line)>=(int)(N_MSGBUF))OVERFLW("temp1","");
printf("\n%s\n",(char*)temp1);/* Error msg to the terminal. */
OUT_MSG(to_ASCII(temp1),NULL);/* Error msg to the file. */
mark_error;
FREE_MEM(temp,"RAT_error:temp",N_MSGBUF,char);
FREE_MEM(temp1,"RAT_error:temp1",N_MSGBUF,char);
}
SRTN
output_ended FCN(VA_ALIST((msg,n VA_ARGS)))
VA_DCL(
CONST outer_char msg[]C0("Error message.")
int n C2("Number of arguments to follow."))
{
VA_LIST(arg_ptr)
char HUGE*temp;
temp= GET_MEM("output_ended:temp",N_MSGBUF,char);
VA_START(arg_ptr,n);
#if(NUM_VA_ARGS==1)
{
char*fmt0= va_arg(arg_ptr,char*);
va_arg(arg_ptr,int);
vsprintf((char*)temp,fmt0,arg_ptr);
}
#else
vsprintf(temp,(CONST char*)msg,arg_ptr);
#endif
va_end(arg_ptr);
RAT_error(ERROR,OC("Output ended %s"),1,temp);
FATAL(R,"ABORTING!","");
}
outer_char HUGE*
cmd_name FCN((cmd))
CMD cmd C1("Type of command.")
{
switch(cmd)
{
case _DO_CMD:
return OC("$DO");
case blockdata_CMD:return OC("blockdata");
case break_CMD:return OC("break");
case case_CMD:return OC("case");
case contains_CMD:return OC("contains");
case default_CMD:return OC("default");
case do_CMD:return OC("do");
case for_CMD:return OC("for");
case function_CMD:return OC("function");
case if_CMD:return OC("if");
case interface_CMD:return OC("interface");
case module_CMD:return OC("module");
case next_CMD:return OC("next");
case program_CMD:return OC("program");
case repeat_CMD:return OC("repeat");
case return_CMD:return OC("return");
case subroutine_CMD:return OC("subroutine");
case switch_CMD:return OC("switch");
case type_CMD:return OC("type");
case until_CMD:return OC("until");
case where_CMD:return OC("where");
case while_CMD:return OC("while");
default:return OC("UNKNOWN CMD");
}
}
SRTN
not_switch FCN((s))
CONST outer_char s[]C1("Error message.")
{
RAT_error(ERROR,OC("Misplaced keyword: \
\"%s\" must be used only inside \"switch\""),1,s);
}
SRTN didnt_expand FCN((c0,c,op))
eight_bits c0 C0("")
eight_bits c C0("")
CONST char*op C1("")
{
RAT_error(ERROR,OC("Was expecting '%c', not '%c', after \"%s\"; \
expansion aborted"),3,XCHR(c0),XCHR(c),op);
}
boolean
char_after FCN((c))
outer_char c C1("Character expected next.")
{
if((ASCII)(next_byte())!=XORD(c))
{
RAT_error(WARNING,OC("Inserted '%c' after \"%s\""),1,c,cmd_name(begun[rlevel-1].cmd));
BACK_UP
return NO;
}
return YES;
}
eight_bits
next_byte(VOID)
{
eight_bits a0;/* The next byte. */
sixteen_bits a;/* Next two-byte token. */
static boolean ended_module= NO;
long cur_val0;/* Incoming value of |cur_val|. */
/* Check if there's a byte already waiting. */
if(saved_token)
{
saved_token= NO;
return last_a;
}
cur_val0= cur_val;/* Trouble if we don't restore the state of |cur_val|. */
WHILE()
{
if(DONE_LEVEL)
{
if(!ended_module)
{
cur_val= -(long)cur_mod;
if(cur_val!=ignore)OUT_CHAR(module_number);
ended_module= YES;
}
if(!pop_level())
{
a0= ignore;
break;
}
ended_module= NO;
}
if(TOKEN1(a0= *cur_byte++))
{
if(a0==ignore&&!in_string)
continue;/* Forget about null bytes. */
if(rlevel>0&&a0==begin_language)
{/* Skip the |begin_language|--|NUWEB_OFF| pair. */