static int* find(Task_Data * IData)
{
	int* link=find_a(IData->forth_buffer,Global_Dict->latest);
	if(!(link)) return find_a(IData->forth_buffer,IData->latest);
	else return link;
	
}
static void __literal (char* ptr,Task_Data * IData)
{
	int val;
	compile(TOIP((get_exec_ptr((char*)find_a("LITERAL",Global_Dict->latest)))),IData);
	DSPOP(val,IData->dsp);
	compile(TOIP(val),IData);
	
}
static void add_variable_d (char *name, int *addr,Task_Data * IData)
{
	add_header(name,IData);
	compile((int*)(int)docol,IData);
	compile(TOIP((get_exec_ptr((char*)find_a("LITERAL",Global_Dict->latest)))),IData);
	compile(TOIP(addr),IData);
	compile(0,IData);
}
Example #4
0
int	syntax(t_dlist *list)
{
  check_dump(list);
  check_paral(list);
  check_para(list);
  find_a(list);
  find_n(list);
  return (0);
}
void add_variable (char *name,Task_Data * IData)
{
	add_header(name,IData);
	compile((int*)(int)docol,IData);
	compile(TOIP((get_exec_ptr((char*)find_a("LITERAL",Global_Dict->latest)))),IData);
	compile(TOIP((IData->here + 2 * sizeof(int))),IData);
	compile(0,IData);
	compile(0,IData);
}
Example #6
0
File: func.c Project: shou-zheng/c
void  func_9_6(void){
  char ch;
  int num;
  printf("please input your stings:\n");
  while((ch=getchar()) != EOF){
    num = find_a(ch);
    if(num >= 0)printf("%c is %d\n",ch,num);
    else  printf("ch is not a alpha.\n");
  }
}
void interpret(Task_Data *IData)
{
	char *ptr;
	int *link;
	
	if (!word(IData))
		return;
	
	link = find(IData);
	
	ptr = (char*) (link + 1);
	if (link)
	{
		int len = (int)*ptr;
		ptr = ptr + RFLAGS(len) + 1 + ((int)(RFLAGS(len) + 1) % 2);
		
		if (IData->state == 0 || len & IMMED_FLAG)
		{
			IData->xt = (void (*)())(*(TOIP(ptr)) & 0xffff);
			
			
			IData->xt(&ptr,IData);
			
			//xt();
		} else
		{
			
			compile(TOIP(ptr),IData);
		}
	} else
	{
		
		if (isnumber(IData))
		{
			if (IData->state == 0)
			{
				
				DSPUSH(number(IData),IData->dsp);
				
			} else
			{
				ptr = (char*)find_a("LITERAL",Global_Dict->latest);
				compile(TOIP(get_exec_ptr(ptr)),IData);
				compile(TOIP(number(IData)),IData);
			}
		} else
		{
			EMITERRS("Error: Unrecognized command\n");
			//stacks_reset(); have to fix this
		}
	}
	
}
static void _else_c (char* ptr,Task_Data * IData)
{
	int *origin;
	int offset;
	RSPOPp(origin,IData->rsp);
	
	compile(TOIP((get_exec_ptr((char*)find_a("BRANCH",IData->latest)))),IData);
	RSPUSH((int)IData->here,IData->rsp);
	compile(0,IData);
	
	offset = (int)(TOIP(IData->here) - origin);
	*origin = offset;
}
static void _postpone (int *addr,Task_Data * IData)
{
	int *ptr;
	char *link;
	word(IData);
	link = (char*)find(IData);
	if (!IMMEDIATE(link[sizeof(int*)]))
	{
		compile(TOIP(get_exec_ptr((char*)find_a("COMPILE_NEXT",Global_Dict->latest))),IData);
	}
	compile(TOIP(get_exec_ptr((char*)link)),IData);
	ptr = (int*)(int)IData->xt;
	ptr++;
	IData->xt = (void (*)())ptr;
}
static void _if_c (char* ptr,Task_Data * IData)
{
	compile(TOIP((get_exec_ptr((char*)find_a("0BRANCH",IData->latest)))),IData);
	RSPUSH((int)IData->here,IData->rsp);
	compile(0,IData);
}