Exemplo n.º 1
0
Address toAddress(std::string const& _s)
{
	try
	{
		eth::ICAP i = eth::ICAP::decoded(_s);
		return i.direct();
	}
	catch (eth::InvalidICAP&) {}
	try
	{
		auto b = fromHex(_s.substr(0, 2) == "0x" ? _s.substr(2) : _s, WhenError::Throw);
		if (b.size() == 20)
			return Address(b);
	}
	catch (BadHexCharacter&) {}
	BOOST_THROW_EXCEPTION(InvalidAddress());
}
Exemplo n.º 2
0
void MemoryBase::UnregisterPages(u64 addr, u32 size)
{
	std::lock_guard<std::recursive_mutex> lock(m_mutex);

	//LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size);
	for (u64 i = addr / 4096; i < (addr + size) / 4096; i++)
	{
		if (i >= sizeof(m_pages) / sizeof(m_pages[0]))
		{
			InvalidAddress(__FUNCTION__, i * 4096);
			break;
		}
		if (!m_pages[i])
		{
			LOG_ERROR(MEMORY, "Page not registered (addr=0x%llx)", i * 4096);
		}
		m_pages[i] = 0; // TODO: define page parameters
	}
}
Exemplo n.º 3
0
void MemoryBase::UnregisterPages(u64 addr, u32 size)
{
	LV2_LOCK(0);

	//LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size);
	for (u64 i = addr / 4096; i < (addr + size) / 4096; i++)
	{
		if (i >= sizeof(m_pages) / sizeof(m_pages[0]))
		{
			InvalidAddress(__FUNCTION__, i * 4096);
			break;
		}
		if (!m_pages[i])
		{
			LOG_ERROR(MEMORY, "Page not registered (addr=0x%llx)", i * 4096);
			Emu.Pause();
		}
		m_pages[i] = 0; // TODO: define page parameters
	}
}
Exemplo n.º 4
0
static void
_print_label(vmcode **ptr)
{
    char	*instr;
    int		inst;

	p_fprintf(current_output_,"%d(", (word) (*ptr)
#ifndef PRINTAM
						    & 0xfff
#endif
							    );
    if (InvalidAddress(*ptr))
	ec_outfs(current_output_, "BAD ADDRESS");
    else {
	inst = Get_Int_Opcode(*ptr);
	if (inst < 0 || inst > NUMBER_OP)
	    inst = Inst_Error;
	instr = inst_name[inst];
	while (*instr != ' ')
	    (void) ec_outfc(current_output_, *instr++);
    }
    (void) ec_outfc(current_output_, ')');
}
Exemplo n.º 5
0
vmcode       *
print_am(register vmcode *code,
	vmcode **label,
	int *res,
	int option)		/* ALS|PROCLAB */
{
    dident	did1;
    int		inst;

    if (*label == code)
	*label = NULL;		/* the label is about to being printed */

    if (InvalidAddress(code))
	inst = Inst_Error;
    else
	inst = Get_Int_Opcode(code++);

    if (inst < 0 || inst > NUMBER_OP)
    {
	    p_fprintf(current_output_, "Undefined opcode in print_am: %d",
		    inst);
	    code = 0;
	    *res = PFAIL;
    }
    if (inst == Code_end) {
	*res = PSUCCEED;
	return 0;
    }
    else if (inst == Comment)
	return (vmcode *) code + (*code + 1);
    else
    {
#ifdef PRINTAM
	if (option & PROCLAB)	/* try to print the location */
	{
	    extern pri *ec_code_procedure(vmcode *code);
	    pri *pd = ec_code_procedure(code-1);
	    if (pd)
		p_fprintf(current_output_,"%s/%d+%d:\n",
			DidName(PriDid(pd)), DidArity(PriDid(pd)),
			code - PriCode(pd) - 1);
	}
#endif
	p_fprintf(current_output_, "\t%s\t", inst_name[inst]);
	switch (inst)

	{
	case Failure:
	case Nop:
	case Clause:
	    break;

	case Read_void:
	case Read_variable:
	case Read_reference:
	case Read_nil:
	case Read_test_var:
	case Write_variable:
	case Write_void:
	case Write_nil:
	case Write_list:
	case Write_first_list:
	case Match_meta:
	case Match_last_meta:
	case First:
	case Push_void:
	case Push_variable:
	case Push_nil:
	case Push_list:
	case Puts_variable:
	case Puts_list:
	case Puts_nil:
	case Occur_check_next:
	case Dfid_test:
#if (NREGTMP > 0)
	case FirstTR:
#endif /* NREGTMP */
	case Inst_Error:
	case Continue_after_exception:
	case Refail:
		break;

	case Write_named_void:
	case Write_named_variable:
	case Push_self_reference:
	case Write_meta:
		NamedVar;
		break;

	case CutAM:
	case MoveAM:
	case Get_nilAM:
	case Out_get_nilAM:
	case In_get_nilAM:
	case Read_variableAM:
	case Read_referenceAM:
	case Read_valueAM:
	case Read_matched_valueAM:
	case Write_valueAM:
	case Write_local_valueAM:
	case Put_nilAM:
	case Out_get_listAM:
	case Get_list_argumentsAM:
	case Get_structure_argumentsAM:
	case Write_variableAM:
	case Put_variableAM:
	case Put_global_variableAM:
	case Put_listAM:
	case Push_variableAM:
	case Push_valueAM:
	case Push_local_valueAM:
	case Puts_valueAM:
	case SavecutAM:
	case BI_Exit:
	case BI_SetBipError:
	case BI_GetBipError:
	case BI_Free:
	case BI_Var:
	case BI_NonVar:
	case BI_Atom:
	case BI_Integer:
	case BI_Float:
	case BI_Breal:
	case BI_Real:
	case BI_Rational:
	case BI_String:
	case BI_Number:
	case BI_Atomic:
	case BI_Compound:
	case BI_Meta:
	case BI_IsSuspension:
	case BI_IsHandle:
	case BI_IsEvent:
	case BI_IsList:
	case BI_Bignum:
	case BI_Callable:
		Am;
		break;
	
	case Write_named_variableAM:
	case Put_named_variableAM:
		Am;
		NamedVar;
		break;

	case Put_named_variableAML:
		Am;
		Perm;
		NamedVar;
		break;

	case Put_referenceAM:
		Am;
	case Puts_reference:
		VarOffset;
		NamedVar;
		break;

	case Put_referenceAML:
		Am;
	case Puts_referenceL:
		Perm;
		VarOffset;
		NamedVar;
		break;

	case Move3AMAM:
	        Am;
		/* fall through */
	case ShiftAMAMAMAMAM:
	        Am;
		/* fall through */
	case ShiftAMAMAMAM:
	case Move2AMAM:
	    	Am;
		/* fall through */

	case ShiftAMAMAM:
	case RotAMAMAM:
	case BI_NotIdentList:
	        Am;
		/* fall through */

	case BI_Identical:
	case BI_NotIdentical:
	case BI_Inequality:
	case SwapAMAM:
	case Read_variable2AM:
	case Write_variable2AM:
	case Write_local_value2AM:
	case Push_local_value2AM:
	case Put_variable2AM:
	        Am;
	        Am;
		break;

	case BI_MakeSuspension:
	    	Am;
		/* fall through */

	case BI_Add:
	case BI_Sub:
	case BI_Mul:
	case BI_Quot:
	case BI_Div:
	case BI_Rem:
	case BI_FloorDiv:
	case BI_FloorRem:
	case BI_And:
	case BI_Or:
	case BI_Xor:
	case BI_Lt:
	case BI_Le:
	case BI_Gt:
	case BI_Ge:
	case BI_Eq:
	case BI_Ne:
	case BI_Arg:
	        Am;
		/* fall through */

	case BI_Minus:
	case BI_Bitnot:
	case BI_CutToStamp:
	case BI_Arity:
	        Am;
	        Am;
	        ArgDesc;
		break;

	case BI_Addi:
	        Am;
	        Integer;
	        Am;
	        ArgDesc;
		break;

#define NREGARG 0
#if (NREGARG > 0)
	case MoveAR:
	case Get_nilAR:
	case Out_get_nilAR:
	case In_get_nilAR:
	case Read_variableAR:
	case Read_valueAR:
	case Read_matched_valueAR:
	case Write_valueAR:
	case Write_local_valueAR:
	case Put_nilAR:
	case Out_get_listAR:
	case Get_list_argumentsAR:
	case Get_structure_argumentsAR:
	case Write_variableAR:
	case Put_variableAR:
	case Put_listAR:
	case Push_variableAR:
	case Push_valueAR:
	case Push_local_valueAR:
	case Puts_variableAR:
	case Puts_valueAR:
	case Test_varAR:
	case Test_groundAR:
	case Push_referenceAR:
		Ar;
		break;

	case Write_named_variableAR:
	case Put_named_variableAR:
		Ar;
		NamedVar;
		break;
#endif /* NREGARG */

	case Read_variableL:
	case Read_referenceL:
	case Write_variableL:
	case Read_valueL:
	case Read_matched_valueL:
	case Write_valueL:
	case Write_local_valueL:
	case Push_init_variableL:
	case Push_variableL:
	case Push_valueL:
	case Push_local_valueL:
	case Puts_variableL:
	case Puts_valueL:
	case Put_global_variableL:
		Perm;
		break;

	case Write_named_variableL:
	case Put_named_variableL:
		Perm;
		NamedVar;
		break;

	case Initialize:
	    code = _print_init_mask(code, 0);
	    break;

	case Initialize_named:
	    code = _print_init_mask(code, 1);
	    break;

	case Read_valueTM:
	case Read_matched_valueTM:
	case Match_next_metaTM:
	case Match_metaTM:
	case Write_valueTM:
	case Write_local_valueTM:
	case NextTM:
	case ModeTM:
	case Push_valueTM:
	case Push_local_valueTM:
	case Puts_valueTM:
	case Write_next_listTM:
		Temp;
		break;

#if (NREGTMP > 0)
	case Read_valueTR:
	case Read_matched_valueTR:
	case Write_valueTR:
	case Write_local_valueTR:
	case NextTR:
	case ModeTR:
	case Push_valueTR:
	case Push_local_valueTR:
	case Puts_valueTR:
	case Push_variableTR:
	case Read_variableTR:
	case Write_variableTR:
	case Push_referenceTR:
		TempR;
		break;

	case Write_named_variableTR:
		TempR;
		NamedVar;
		break;

#endif /* NREGTMP */

	case Move3AML:
	        Am;
		Perm;
	case Move2AML:
	case Put_global_variable2AML:
	        Am;
		Perm;
	case MoveAML:
	case Get_valueAML:
	case Get_matched_valueAML:
	case Put_variableAML:
	case Put_unsafe_valueAML:
	case Put_global_variableAML:
	case Read_variable2AML:
	case Write_variable2AML:
		Am;
		Perm;
		break;

	case MoveNAML:
	        Integer;
		Am;
		Perm;
		break;

#if (NREGARG > 0)
	case MoveARL:
	case Get_valueARL:
	case Get_matched_valueARL:
	case Put_variableARL:
	case Put_unsafe_valueARL:
		Ar;
		Perm;
		break;

	case Put_named_variableARL:
		Ar;
		Perm;
		NamedVar;
		break;
#endif /* NREGARG */

	case Put_unsafe_valueAMTM:
	case Get_valueAMTM:
	case Get_matched_valueAMTM:
		Am;
		Temp;
		break;

	case MoveTMAM:
		Temp;
		Am;
		break;

#if (NREGARG > 0)
	case MoveARAM:
		Ar;
		Am;
		break;
#endif /* NREGARG */

#if (NREGARG > 0 && NREGTMP > 0)
	case MoveTRAR:
		TempR;
		Ar;
		break;
#endif /* NREGARG && NREGTMP */

#if (NREGTMP > 0)
	case MoveTRAM:
		TempR;
		Am;
		break;
#endif /* NREGTMP */

#if (NREGARG > 0)
	case MoveTMAR:
		Temp;
		Ar;
		break;
#endif /* NREGARG */


#if (NREGTMP > 0)
	case Get_valueAMTR:
	case Get_matched_valueAMTR:
	case MoveAMTR:
		Am;
		TempR;
		break;
#endif /* NREGTMP */

#if (NREGARG > 0)
	case Put_unsafe_valueARTM:
	case Get_valueARTM:
	case Get_matched_valueARTM:
		Ar;
		Temp;
		break;
#endif /* NREGARG */

#if (NREGARG > 0 && NREGTMP > 0)
	case Get_valueARTR:
	case Get_matched_valueARTR:
	case MoveARTR:
		Ar;
		TempR;
		break;
#endif /* NREGARG && NREGTMP */

	case Get_variableNAML:
		VarOffset;
		Am;
		Perm;
		break;

	case Move3LAM:
		Perm;
	        Am;
	case Move2LAM:
		Perm;
	        Am;
	case MoveLAM:
		Perm;
		Am;
		break;

	case MoveNLAM:
	        Integer;
		Perm;
		Am;
		break;

#if (NREGARG > 0)
	case Get_variableNARL:
		VarOffset;
		Ar;
		Perm;
		break;

	case MoveLAR:
		Perm;
		Ar;
		break;
#endif /* NREGARG */

	case MoveAMAM:
	case Get_valueAMAM:
	case Get_matched_valueAMAM:
		Am;
		Am;
		break;

	case Move3LL:
	        Perm;
	        Perm;
		/* falls through */
	case Move2LL:
	        Perm;
	        Perm;
		/* falls through */
	case MoveLL:
	case Get_valueLL:
	case Write_variable2L:
	case Write_local_value2L:
	case Push_local_value2L:
	case Read_variable2L:
		Perm;
		Perm;
		break;

#if (NREGARG > 0)
	case MoveAMAR:
	case Get_valueAMAR:
	case Get_matched_valueAMAR:
		Am;
		Ar;
		break;
#endif /* NREGARG */

	case Get_atom2AM:
		Am;
		Atom;

	case Get_atomAM:
	case Out_get_atomAM:
	case In_get_atomAM:
	case Put_atomAM:
	case Put_moduleAM:
		Am;
		Atom;
		break;

#if (NREGARG > 0)
	case Get_atomAR:
	case Out_get_atomAR:
	case In_get_atomAR:
	case Put_atomAR:
		Ar;
		Atom;
		break;
#endif /* NREGARG */

	case Get_atomintegerAMAM:
		Am;
		Atom;
		Am;
		Integer;
		break;

	case Get_integer2AM:
		Am;
		Integer;

	case Get_integerAM:
	case Out_get_integerAM:
	case In_get_integerAM:
	case Put_integerAM:
		Am;
		Integer;
		break;

#if (NREGARG > 0)
	case Get_integerAR:
	case Out_get_integerAR:
	case In_get_integerAR:
	case Put_integerAR:
		Ar;
		Integer;
		break;
#endif /* NREGARG */

	case Get_floatAM:
	case In_get_floatAM:
	case Out_get_floatAM:
	case Put_floatAM:
		Am;
		Float;
		break;

#if (NREGARG > 0)
	case Get_floatAR:
	case In_get_floatAR:
	case Out_get_floatAR:
	case Put_floatAR:
		Ar;
		Float;
		break;
#endif /* NREGARG */

	case Get_stringAM:
	case In_get_stringAM:
	case Out_get_stringAM:
	case Put_stringAM:
		Am;
		String;
		break;

#if (NREGARG > 0)
	case Get_stringAR:
	case In_get_stringAR:
	case Out_get_stringAR:
	case Put_stringAR:
		Ar;
		String;
		break;
#endif /* NREGARG */

	case Get_structureAM:
	case In_get_structureAM:
		Am;
		Structure;
		Code_Label;
		break;

	case Put_structureAM:
	case Out_get_structureAM:
		Am;
		Structure;
		break;

#if (NREGARG > 0)
	case Get_structureAR:
	case In_get_structureAR:
		Ar;
		Structure;
		Code_Label;
		break;

	case Out_get_structureAR:
	case Put_structureAR:
		Ar;
		Structure;
		break;
#endif /* NREGARG */

	case Get_listAM:
	case In_get_listAM:
	case In_get_metaAM:
		Am;
		Code_Label;
		break;

	case Get_metaAM:
		Am;
		NamedVar;
		break;

#if (NREGARG > 0)
	case Get_listAR:
	case In_get_listAR:
		Ar;
		Code_Label;
		break;
#endif /* NREGARG */

	case Read_variableNL:
	case Read_referenceNL:
	case Write_variableNL:
		VarOffset;
		Perm;
		break;

	case Write_named_variableNL:
		VarOffset;
		Perm;
		NamedVar;
		break;

	case Read_atom2:
	        Atom;
	        /* falls through */
	case Read_atom:
	case Puts_atom:
		Atom;
		break;

	case Read_atominteger:
	        Atom;
		Integer;
		break;

	case Read_integeratom:
		Integer;
	        Atom;
		break;

	case Read_integer2:
	case Write_integer2:
	        Integer;
	        /* falls through */
	case Read_integer:
	case Write_integer:
	case Push_integer:
	case Puts_integer:
	case Exit_emulator:
	case Bounce:
		Integer;
		break;

	case Read_float:
	case Write_float:
	case Push_float:
	case Puts_float:
		Float;
		break;

	case Read_string:
	case Write_string:
	case Push_string:
	case Puts_string:
		String;
		break;

	case Write_did2:
	        Structure;
		/* falls through */
	case Write_structure:
	case Write_first_structure:
	case Write_did:
	case Puts_structure:
		Structure;
		break;

	case Write_didinteger:
		Structure;
		Integer;
		break;
	    
	case Write_integerdid:
		Integer;
		Structure;
		break;

	case Read_structure:
	case Read_last_structure:
		Structure;
		Code_Label;
		break;

	case Read_meta:
	case Read_last_meta:
		NamedVar;
	case Read_list:
	case Read_last_list:
		Code_Label;
		break;

	case Read_structureTM:
	case Read_next_structureTM:
	case Write_next_structureTMlab:
		Structure;
	case NextTMlab:
	case ModeTMlab:
	case Read_listTM:
	case Read_next_listTM:
	case Write_next_listTMlab:
		Temp;
		Code_Label;
		break;

	case Write_next_structureTM:
	        Structure;
		Temp;
		break;

	case Read_metaTM:
	case Read_next_metaTM:
		Temp;
		NamedVar;
		Code_Label;
		break;

#if (NREGTMP > 0)
	case Read_structureTR:
	case Read_next_structureTR:
		Structure;
	case NextTRlab:
	case ModeTRlab:
	case Read_listTR:
	case Read_next_listTR:
		TempR;
		Code_Label;
		break;
	case Get_constantAR:
        case Out_get_constantAR:
	case In_get_constantAR:
	       Ar; Const; Consttag; 
	       break;
        case Put_constantAR:
	       Ar; Consttag; Const; 
	       break;


#endif /* NREGTMP */

	case Puts_constant:
	        Consttag; Const;
	        break;

	case Read_constant:
	case Write_constant:
	case Push_constant:
	        Const; Consttag;
	        break;

	case Get_constantAM:
        case Out_get_constantAM:
	case In_get_constantAM:
	       Am; Const; Consttag; 
	       break;

        case Put_constantAM:
	       Am; Consttag; Const; 
	       break;

	case Retry_me_else:
	case Retry:
		Port;
		Code_Label;
		break;

	case Retry_inline:
		Port;
		Code_Label;
		EnvDesc;
		break;

	case Trust:
		Port;
		Code_Label;
		Nl;
		break;

	case Trust_inline:
		Port;
		Code_Label;
		EnvDesc;
		Nl;
		break;

	case Branchs:
		VarOffset;
	case Branch:
		Code_Label;
		break;

	case Set_bp:
	case New_bp:
		Code_Label;
		break;

	case Try_me_else:
		Port;
		Integer;
		Code_Label;
		break;

	case Retry_me_inline:
		Port;
		Code_Label;
		EnvDesc;
		break;

	case Trust_me_inline:
		Port;
		EnvDesc;
		break;

	case Try_parallel:
		{
		    long	nalt;
		    uword	*ptr;

		    nalt = (long) *code;
		    Integer;
		    Integer;
		    ptr = (uword *) *code++;
		    if (ptr)
		    {
			do
			{
			    p_fprintf(current_output_, "\n\t\t\t\t");
			    _print_label((vmcode **) ptr);
			    ptr++;
			} while (nalt--);
		    }
		}
		break;

	case Retry_seq:
	case Try_clause:
		Addr;
		break;

	case GuardL:
		VarOffset;
		Code_Label;
		break;

	case Try:
		Port;
		Integer;
		Code_Label;
		break;

	case Trylab:
		Port;
		Integer;
		Code_Label;
		Code_Label;
		Nl;
		break;

	case Retrylab:
		Port;
		Code_Label;
		Code_Label;
		Nl;
		break;

	case Try_me_dynamic:
	case Retry_me_dynamic:
#ifdef OLD_DYNAMIC
		Integer;
		Integer;
		Save_Label;
		if (*code == SRC_CLAUSE_ARITY)
		    p_fprintf(current_output_,"SOURCE ");
		p_fprintf(current_output_,"%d ",
			(*code++) & SRC_CLAUSE_ARITY_MASK);
		Code_Label;
#endif
		break;

	case Push_referenceAM:
		Am;
	case Allocate:
	case Wake_init:
	case Space:
	case Exits:
	case Push_structure:
	case Push_reference:
	case Push_void_reference:
	case Read_attribute:
	case Read_voidN:
	case Write_voidN:
	case Push_voidN:
	case Puts_valueG:
	case Push_valueG:
		VarOffset;
		break;

	case Gc_testA:
		Integer;
	case Gc_test:
	case Gc:
		Integer;
		break;

	case Cut:
	case Cut_single:
		VarOffset;
		break;

	case MoveLAMCallfA:
	        Perm;
		Am;
	case CallfA:
	case CallA:
		Addr;
		EnvDesc;
		break;

	case Put_global_variableAMLCallfA:
		Am;
	        Perm;
		Addr;
		EnvDesc;
		break;

	case JmpdAs:
		VarOffset;
	case JmpA:
	case JmpdA:
	case ChainA:
	case ChaincA:
	case ChaindA:
	case Meta_jmpA:
		Addr;
		Nl;
		break;

	case MoveLAMChainA:
	        Perm;
		Am;
		Addr;
		Nl;
		break;

	case MoveLAMCallfP:
	        Perm;
		Am;
	case CallfP:
	case CallP:
		Proc;
	case Metacall:
	case Handler_call:
	case Suspension_call:
	case Fail_clause:
		EnvDesc;
		break;

	case Put_global_variableAMLCallfP:
	        Am;
		Perm;
	        Proc;
		EnvDesc;
		break;

	case Fastcall:
		Port;
		EnvDesc;
		break;

	case MoveLAMChainP:
	        Perm;
		Am;
	case JmpP:
	case JmpdP:
	case ChainP:
	case ChaincP:
	case ChaindP:
		Proc;
		Nl;
		break;

	case Ret:
	case Retn:
	case Retd:
	case Retd_nowake:
	case Ret_nowake:
	case Exit:
	case Exitd:
	case Exitd_nowake:
	case Exitc:
		Nl;
		break;

	case Savecut:
	case Neckcut:
	case Neckcut_par:
	case Deallocate:
	case Restore_bp:
	case Catch:
	case Throw:
	case Meta_jmp:
	case Suspension_jmp:
	case Explicit_jmp:
	case Wake:
		break;

	case Trust_me:
		Port;
		break;

	case SavecutL:
	case SoftcutL:
	case Dfid_testL:
	case Depth:
		Perm;
		break;

	case CutL:
	case Push_referenceL:
	case Push_init_referenceL:
		Perm;
		VarOffset;
		break;

	case CutAMN:
		Am;
		VarOffset;
		break;

	case ExtCall:
		ExtCallName;
		break;

	case Escape:
		EsuName;
		break;

	case External:
	case External0:
	case External1:
	case External2:
	case External3:
	case Call_dynamic:
		Proc;
		Addr;
		break;

	case Debug_call:
	        Proc;
		Port;
		Atom;
		Integer;
		Integer;
		Integer;
		break;

	case Debug_call_simple:
	        Proc;
		Port;
		Atom;
		Integer;
		Integer;
		Integer;
	case Debug_exit_simple_args:
		Integer;	/* argument descriptor minitags */
		Integer;	/* offset */
	case Debug_exit_simple:
		break;

	case List_switchL:
	    	Perm;
		goto _list_switch_;

	case List_switchAM:
		Am;
_list_switch_:
		if (option & ALS) {
		    Code_Label;
		    Code_Label;
		    Code_Label;
		}
		break;

#if (NREGARG > 0)
	case List_switchAR:
		Ar;
		if (option & ALS) {
		    Code_Label;
		    Code_Label;
		    Code_Label;
		}
		break;
#endif /* NREGARG */

#if (NREGARG > 0)
	case Atom_switchAR:
		Ar;
		if (option & ALS) {
		    Atom_Table2;
		    Code_Label;
		}
		break;
#endif /* NREGARG */

	case Atom_switchL:
	    	Perm;
		goto _atom_switch_;

	case Atom_switchAM:
		Am;
_atom_switch_:
		if (option & ALS) {
		    Atom_Table2;
		    Code_Label;
		}
		break;
		
	case Functor_switchL:
	    	Perm;
		goto _functor_switch_;

	case Functor_switchAM:
		Am;
_functor_switch_:
		if (option & ALS) {
		    Functor_Table2;
		    Code_Label;
		}
		break;
		
#if (NREGARG > 0)
	case Functor_switchAR:
		Ar;
		if (option & ALS) {
		    Functor_Table2;
		    Code_Label;
		}
		break;
#endif /* NREGARG */
		
	case Integer_switchL:
	    	Perm;
		goto _integer_switch_;

	case Integer_switchAM:
		Am;
_integer_switch_:
		if (option & ALS) {
		    Integer_Table2;
		    Code_Label;
		}
		break;
		
#if (NREGARG > 0)
	case Integer_switchAR:
		Ar;
		if (option & ALS) {
		    Integer_Table2;
		    Code_Label;
		}
		break;
#endif /* NREGARG */

	case Integer_range_switchL:
	    	Perm;
		goto _integer_range_switch_;

	case Integer_range_switchAM:
		Am;
_integer_range_switch_:
		if (option & ALS) {
		    Integer_Range_Table;
		}
		break;

	case Switch_on_typeL:
	    	Perm;
		goto _switch_on_type_;

	case Switch_on_typeAM:
		Am;
_switch_on_type_:
		if (option & ALS)
		{
			int	i;
			for (i = 0; i < NTYPES; i++)
			{
				p_fprintf(current_output_, "\n\t\t\t%-16s",
					DidName(tag_desc[i].tag_name));
				Code_Label;
			}
		}
		break;

#if (NREGARG > 0)
	case Switch_on_typeAR:
		Ar;
		if (option & ALS)
		{
			int	i;
			for (i = 0; i < NTYPES; i++)
			{
				p_fprintf(current_output_, "\n\t\t\t%d: ", i);
				Code_Label;
			}
		}
		break;
#endif /* NREGARG */

	case Ress:
		VarOffset;
	case Res:
		Integer;
		EnvDesc;
		break;

	case Continue_after_event:
	case Continue_after_event_debug:
	case Debug_exit:
	case BI_ContDebug:
		break;

	case Puts_proc:
	case Undefined:
		Proc;
		break;

	default:
		p_fprintf(current_output_, "Undefined opcode in print_am: %d", *(code - 1));
		code = 0;
	}
    }
    (void) ec_newline(current_output_);	/* to flush if tty */
    return code;
}
Exemplo n.º 6
0
int main(int argc, char* argv[])
{
    int iTestCase = 0;

    bErrorVerbose = true;

    char pszDecision[20];

    for (;;)
    {
        // Get the pointers to the functions for disabling and enabling interception...
        getInterceptionDisablers();

        uninterceptedPrint("=== HOLODECK FAULT TESTER 1.0 by TERRY LENTZ ===\n\n");
        uninterceptedPrint("*** FILE FAULTS ***\n");
        uninterceptedPrint("0 - File Not Found\t\t10 - File Cannot Be Created\n");
        uninterceptedPrint("1 - File Cannot Be Accessed\t11 - Filename Too Long\n");
        uninterceptedPrint("2 - Access Denied\t\t12 - Directory Read Only\n");
        uninterceptedPrint("3 - Write Protected\t\t13 - Path Not Found\n");
        uninterceptedPrint("4 - Crc Data Error\t\t14 - Directory Cannot Be Removed\n");
        uninterceptedPrint("5 - Drive Cannot Seek Disk\t15 - Directory Not Empty\n");
        uninterceptedPrint("6 - File In Use\t\t\t16 - Path Invalid\n");
        uninterceptedPrint("7 - File Locked\t\t\t17 - Corrupt Structure\n");
        uninterceptedPrint("8 - Disk Full\t\t\n");
        uninterceptedPrint("9 - File Already Exists\t\t\n\n");
        uninterceptedPrint("*** MEMORY FAULTS ***\n");
        uninterceptedPrint("18 - Insufficient Memory\t\t21 - Invalid Address\n");
        uninterceptedPrint("19 - Invalid Access To Location\t\t22 - Paging File Too Small\n");
        uninterceptedPrint("20 - Segment Locked\t\t\n\n");
        uninterceptedPrint("*** NETWORK FAULTS ***\n");
        uninterceptedPrint("23 - Disconnected \t\t\t26 - Winsock Task Limit Reached\n");
        uninterceptedPrint("24 - Network Not Installed\t\t27 - All Ports Unavailable\n");
        uninterceptedPrint("25 - Wrong Winsock Version\t\t28 - Network is Down\n");


        uninterceptedPrint("\nPlease enter the test that you would like to run: ");

        if (disableInterception != NULL)
            disableInterception();

        scanf("%d", &iTestCase);

        if (enableInterception != NULL)
            enableInterception();

        uninterceptedPrint("\n");

        switch (iTestCase)
        {
        // FileNotFound
        case 0:
            uninterceptedPrint("=== TEST CASE: FileNotFound ===\n");

            if (FileNotFound())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");

            break;

        // FileCannotBeAccessed
        case 1:
            uninterceptedPrint("=== TEST CASE: FileCannotBeAccessed ===\n");

            if (FileCannotBeAccessed())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // AccessDenied
        case 2:
            uninterceptedPrint("=== TEST CASE: AccessDenied ===\n");

            if (AccessDenied())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // WriteProtected
        case 3:
            uninterceptedPrint("=== TEST CASE: WriteProtected ===\n");

            if (WriteProtected())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // CrcDataError
        case 4:
            uninterceptedPrint("=== TEST CASE: CrcDataError ===\n");

            if (CrcDataError())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // DriveCannotSeekDisk
        case 5:
            uninterceptedPrint("=== TEST CASE: DriveCannotSeekDisk ===\n");

            if (DriveCannotSeekDisk())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // FileInUse
        case 6:
            uninterceptedPrint("=== TEST CASE: FileInUse ===\n");

            if (FileInUse())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // FileLocked
        case 7:
            uninterceptedPrint("=== TEST CASE: FileLocked ===\n");

            if (FileLocked())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // DiskFull
        case 8:
            uninterceptedPrint("=== TEST CASE: DiskFull ===\n");

            if (DiskFull())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // FileAlreadyExists
        case 9:
            uninterceptedPrint("=== TEST CASE: FileAlreadyExists ===\n");

            if (FileAlreadyExists())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // FileCannotBeCreated
        case 10:
            uninterceptedPrint("=== TEST CASE: FileCannotBeCreated ===\n");

            if (FileCannotBeCreated())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // FileNameTooLong
        case 11:
            uninterceptedPrint("=== TEST CASE: FileNameTooLong ===\n");

            if (FileNameTooLong())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // DirectoryReadOnly
        case 12:
            uninterceptedPrint("=== TEST CASE: DirectoryReadOnly ===\n");

            if (DirectoryReadOnly())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // PathNotFound
        case 13:
            uninterceptedPrint("=== TEST CASE: PathNotFound ===\n");

            if (PathNotFound())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // DirectoryCannotBeRemoved
        case 14:
            uninterceptedPrint("=== TEST CASE: DirectoryCannotBeRemoved ===\n");

            if (DirectoryCannotBeRemoved())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // DirectoryNotEmpty
        case 15:
            uninterceptedPrint("=== TEST CASE: DirectoryNotEmpty ===\n");

            if (DirectoryNotEmpty())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // PathInvalid
        case 16:
            uninterceptedPrint("=== TEST CASE: PathInvalid ===\n");

            if (PathInvalid())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // CorruptStructure
        case 17:
            uninterceptedPrint("=== TEST CASE: CorruptStructure ===\n");

            if (CorruptStructure())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // InsufficientMemory
        case 18:
            uninterceptedPrint("=== TEST CASE: InsufficientMemory ===\n");

            if (InsufficientMemory())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // InvalidAccessToLocation
        case 19:
            uninterceptedPrint("=== TEST CASE: InvalidAccessToLocation ===\n");

            if (InvalidAccessToLocation())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // SegmentLocked
        case 20:
            uninterceptedPrint("=== TEST CASE: SegmentLocked ===\n");

            if (SegmentLocked())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // InvalidAddress
        case 21:
            uninterceptedPrint("=== TEST CASE: InvalidAddress ===\n");

            if (InvalidAddress())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // PagingFileTooSmall
        case 22:
            uninterceptedPrint("=== TEST CASE: PagingFileTooSmall ===\n");

            if (PagingFileTooSmall())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // Disconnected
        case 23:
            uninterceptedPrint("=== TEST CASE: Disconnected ===\n");

            if (Disconnected())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // NetworkNotInstalled
        case 24:
            uninterceptedPrint("=== TEST CASE: NetworkNotInstalled ===\n");

            if (NetworkNotInstalled())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // WrongWinsockVersion
        case 25:
            uninterceptedPrint("=== TEST CASE: WrongWinsockVersion ===\n");

            if (WrongWinsockVersion())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // WinsockTaskLimitReached
        case 26:
            uninterceptedPrint("=== TEST CASE: WinsockTaskLimitReached ===\n");

            if (WinsockTaskLimitReached())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // AllPortsUnavailable
        case 27:
            uninterceptedPrint("=== TEST CASE: AllPortsUnavailable ===\n");

            if (AllPortsUnavailable())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;

        // NetworkIsDown
        case 28:
            uninterceptedPrint("=== TEST CASE: NetworkIsDown ===\n");

            if (NetworkIsDown())
                uninterceptedPrint("\nTEST Passed!\n");
            else
                uninterceptedPrint("\nTEST Failed!\n");


            break;
        }

        uninterceptedPrint("\nWould You Like to Run Another Test (Y/N) ? ");

        if (disableInterception != NULL)
            disableInterception();

        scanf("%s", pszDecision);

        if (enableInterception != NULL)
            enableInterception();

        if ((_stricmp(pszDecision, "y")))
            break;
    }


    return 0;
}