nightmare3_mudos_v1/
nightmare3_mudos_v1/bin/
nightmare3_mudos_v1/lib/cmds/ambassador/
nightmare3_mudos_v1/lib/cmds/database/
nightmare3_mudos_v1/lib/cmds/hm/
nightmare3_mudos_v1/lib/cmds/soul/
nightmare3_mudos_v1/lib/daemon/cfg/
nightmare3_mudos_v1/lib/daemon/cfg/mon_races/
nightmare3_mudos_v1/lib/daemon/cfg/races/
nightmare3_mudos_v1/lib/daemon/include/
nightmare3_mudos_v1/lib/daemon/save/
nightmare3_mudos_v1/lib/daemon/services/
nightmare3_mudos_v1/lib/daemon/soul/
nightmare3_mudos_v1/lib/doc/
nightmare3_mudos_v1/lib/doc/TestPlans/
nightmare3_mudos_v1/lib/doc/approval/
nightmare3_mudos_v1/lib/doc/approval/QC/
nightmare3_mudos_v1/lib/doc/approval/balance/
nightmare3_mudos_v1/lib/doc/build/
nightmare3_mudos_v1/lib/doc/build/armours/
nightmare3_mudos_v1/lib/doc/build/economy/
nightmare3_mudos_v1/lib/doc/build/etc/
nightmare3_mudos_v1/lib/doc/build/monster/
nightmare3_mudos_v1/lib/doc/build/room/
nightmare3_mudos_v1/lib/doc/build/virtual/
nightmare3_mudos_v1/lib/doc/build/weapon/
nightmare3_mudos_v1/lib/doc/classes/
nightmare3_mudos_v1/lib/doc/efun/
nightmare3_mudos_v1/lib/doc/etc/
nightmare3_mudos_v1/lib/doc/help/creator/
nightmare3_mudos_v1/lib/doc/help/hm/
nightmare3_mudos_v1/lib/doc/lpc/basic/
nightmare3_mudos_v1/lib/doc/lpc/data_types/
nightmare3_mudos_v1/lib/doc/lpc/etc/
nightmare3_mudos_v1/lib/doc/lpc/intermediate/
nightmare3_mudos_v1/lib/doc/lpc/types/
nightmare3_mudos_v1/lib/doc/mudlib/
nightmare3_mudos_v1/lib/doc/mudlib/features/
nightmare3_mudos_v1/lib/domains/Examples/etc/
nightmare3_mudos_v1/lib/domains/Examples/room/
nightmare3_mudos_v1/lib/domains/Examples/virtual/
nightmare3_mudos_v1/lib/domains/Examples/virtual/exaA/
nightmare3_mudos_v1/lib/domains/Examples/virtual/exaB/
nightmare3_mudos_v1/lib/domains/Examples/weapon/
nightmare3_mudos_v1/lib/domains/Praxis/
nightmare3_mudos_v1/lib/domains/Praxis/adm/
nightmare3_mudos_v1/lib/domains/Praxis/attic/
nightmare3_mudos_v1/lib/domains/Praxis/cemetary/
nightmare3_mudos_v1/lib/domains/Praxis/cemetary/mon/
nightmare3_mudos_v1/lib/domains/Praxis/data/
nightmare3_mudos_v1/lib/domains/Praxis/death/
nightmare3_mudos_v1/lib/domains/Praxis/mountains/
nightmare3_mudos_v1/lib/domains/Praxis/obj/armour/
nightmare3_mudos_v1/lib/domains/Praxis/obj/magic/
nightmare3_mudos_v1/lib/domains/Praxis/obj/weapon/
nightmare3_mudos_v1/lib/domains/Praxis/orc_valley/
nightmare3_mudos_v1/lib/domains/Praxis/quests/
nightmare3_mudos_v1/lib/domains/Praxis/standardOld/
nightmare3_mudos_v1/lib/log/
nightmare3_mudos_v1/lib/log/errors/
nightmare3_mudos_v1/lib/log/reports/
nightmare3_mudos_v1/lib/log/watch/
nightmare3_mudos_v1/lib/news/
nightmare3_mudos_v1/lib/secure/cfg/
nightmare3_mudos_v1/lib/secure/cmds/ambassador/
nightmare3_mudos_v1/lib/secure/cmds/mortal/
nightmare3_mudos_v1/lib/secure/save/users/d/
nightmare3_mudos_v1/lib/secure/std/
nightmare3_mudos_v1/lib/std/hm/
nightmare3_mudos_v1/lib/std/living/
nightmare3_mudos_v1/lib/std/room/
nightmare3_mudos_v1/lib/std/user/
nightmare3_mudos_v1/lib/std/virtual/
nightmare3_mudos_v1/lib/www/
nightmare3_mudos_v1/lib/www/errors/
nightmare3_mudos_v1/lib/www/gateways/
nightmare3_mudos_v1/source/
nightmare3_mudos_v1/source/ChangeLog.old/
nightmare3_mudos_v1/source/Win32/
nightmare3_mudos_v1/source/compat/
nightmare3_mudos_v1/source/compat/simuls/
nightmare3_mudos_v1/source/include/
nightmare3_mudos_v1/source/mudlib/
nightmare3_mudos_v1/source/testsuite/
nightmare3_mudos_v1/source/testsuite/clone/
nightmare3_mudos_v1/source/testsuite/command/
nightmare3_mudos_v1/source/testsuite/data/
nightmare3_mudos_v1/source/testsuite/etc/
nightmare3_mudos_v1/source/testsuite/include/
nightmare3_mudos_v1/source/testsuite/inherit/
nightmare3_mudos_v1/source/testsuite/inherit/master/
nightmare3_mudos_v1/source/testsuite/log/
nightmare3_mudos_v1/source/testsuite/single/
nightmare3_mudos_v1/source/testsuite/single/tests/compiler/
nightmare3_mudos_v1/source/testsuite/single/tests/efuns/
nightmare3_mudos_v1/source/testsuite/single/tests/operators/
nightmare3_mudos_v1/source/testsuite/u/
nightmare3_mudos_v1/source/tmp/
#ifndef LPC_TO_C_H
#define LPC_TO_C_H

#include "lpc_incl.h"
#include "eoperators.h"
#include "efun_protos.h"

#ifdef LPC_TO_C

#include "cfuns.h"

#define C_STRING(x) SAFE(\
			 (++sp)->type = T_STRING;\
			 sp->subtype = STRING_SHARED;\
			 sp->u.string = ref_string(current_prog->strings[x]);\
		     )
#define C_AGGREGATE(x) SAFE(\
			    lpc_arr = allocate_empty_array(x + num_varargs);\
			    num_varargs = 0;\
			    for (lpc_int=x + num_varargs; lpc_int--; )\
			    lpc_arr->item[lpc_int] = *sp--;\
			    (++sp)->type = T_ARRAY;\
			    sp->u.arr = lpc_arr;\
			    )
#define C_AGGREGATE_ASSOC(x) SAFE(\
				  lpc_map = load_mapping_from_aggregate(sp -= (x + num_varargs), (x+num_varargs));\
				  num_varargs = 0;\
				  (++sp)->type = T_MAPPING;\
				  sp->u.map = lpc_map;\
				  )
#define C_WHILE_DEC(x) SAFE(\
			    if (fp[x].type == T_NUMBER) {\
			        lpc_int = fp[x].u.number--;\
			    } else if (fp[x].type == T_REAL) {\
				lpc_int = fp[x].u.real--;\
			    } else error("-- of non-numeric argument\n");\
			    )
#define C_LOOP_COND_LV(x, y) lpc_int = c_loop_cond_compare(&fp[x], &fp[y])
#define C_LOOP_COND_NUM(x, y) SAFE(\
				   if (fp[x].type == T_NUMBER) {\
				       lpc_int = fp[x].u.number < y;\
				   } else if (fp[x].type == T_REAL) {\
				       lpc_int = fp[x].u.real < y;\
				   } else error("Right side of < is a number, left side is not.\n");\
				   )
#define C_LOOP_INCR(x) SAFE(\
			    if (fp[x].type == T_NUMBER) { fp[x].u.number++; }\
			    else if (fp[x].type == T_REAL) { fp[x].u.real++; }\
			    else { error("++ of non-numeric argument\n"); }\
			    )
#define C_GLOBAL(x) SAFE(\
			 lpc_svp = &current_object->variables[variable_index_offset + x];\
			 if ((lpc_svp->type == T_OBJECT) && (lpc_svp->u.ob->flags & O_DESTRUCTED)) {\
			    *++sp = const0u; assign_svalue(lpc_svp, &const0u);\
			 } else assign_svalue_no_free(++sp, lpc_svp);\
			 )
#define C_LOCAL(x) SAFE(\
			if ((fp[x].type == T_OBJECT) &&\
			    (fp[x].u.ob->flags & O_DESTRUCTED))\
			    assign_svalue(fp + x, &const0u);\
			push_svalue(fp + x);\
			)
#define C_TRANSFER_LOCAL(x) SAFE(\
				 if ((fp[x].type == T_OBJECT) &&\
				     (fp[x].u.ob->flags & O_DESTRUCTED))\
				     assign_svalue(fp + x, &const0u);\
				 *++sp = fp[x];\
				 fp[x].type |= T_FREED;\
				 )
#define C_LVALUE(x) SAFE((++sp)->type = T_LVALUE; sp->u.lvalue = x;)
#define C_LAND(x) SAFE(\
		       if (sp->type == T_NUMBER) {\
			   if (!sp->u.number) x;  sp--;\
		       } else pop_stack();\
		       )
#define C_LOR(x) SAFE(if (sp->type == T_NUMBER && !sp->u.number) sp--; else x;)
#define C_BRANCH_WHEN_ZERO(x) SAFE(\
				   if (sp->type == T_NUMBER) {\
				       if (!((sp--)->u.number)) x;\
				   } else pop_stack();\
				   )
#define C_BRANCH_WHEN_NON_ZERO(x) SAFE(\
				       if (sp->type != T_NUMBER \
					   || sp->u.number) { pop_stack(); x;\
				       } else sp--;\
				       )
#define C_BBRANCH_LT(x) SAFE(f_lt(); if ((sp--)->u.number) x;)
#define BRANCH_LINK(x, y) SAFE(\
			       if (x(sp->type == T_NUMBER && !sp->u.number)) {\
				  y; } pop_stack();\
			       )
#define C_REF(x) SAFE(\
		      svalue_t *lval;\
		      if (fp[x].type == T_REF) {\
			  lval = fp[x].u.ref->lvalue;\
			  if (!lval) error("Reference is invalid.\n");\
			  if (lval->type == T_LVALUE_BYTE)\
			      push_number(*global_lvalue_byte.u.lvalue_byte);\
			  else {\
			      if (lval->type == T_OBJECT && (lval->u.ob->flags & O_DESTRUCTED))\
			          assign_svalue(lval, &const0);\
			      push_svalue(lval);\
			  }\
		      } else error("Non-reference value passed as reference argument.\n");\
		      )
#define C_REF_LVALUE(x) SAFE(\
			     if (fp[x].type == T_REF) {\
				 if (fp[x].u.ref->lvalue) {\
				     STACK_INC;\
				     sp->type = T_LVALUE;\
				     sp->u.lvalue = fp[x].u.ref->lvalue;\
				 } else error("Reference is invalid.\n");\
			     } else error("Non-reference value passed as reference argument.\n");\
			     )

void c_efun_return PROT((int));

#endif

#endif