Exemplo n.º 1
0
void cut(int lr,int lc,int ur,int uc,int color,int j)
{
	int i, tmp;
	int tlr=tab[j].lr, tlc=tab[j].lc, tur=tab[j].ur, tuc=tab[j].uc
		, tcolor=tab[j].color;

	if(tlr < lr && tuc>tlc){
		tmp = (lr<tur) ? lr : tur;
		add_tab(tlr, tlc, tmp, tuc, tcolor);
		tlr = tmp;
	}
	if(tur > ur && tuc>tlc){
		tmp = (ur>tlr) ? ur : tlr;
		add_tab(tmp, tlc, tur, tuc, tcolor);
		tur = tmp;
	}
	if(tlc < lc && tur>tlr){
		tmp = (lc<tuc) ? lc : tuc;
		add_tab(tlr, tlc, tur, tmp, tcolor);
		tlc = tmp;
	}
	if(tuc > uc && tur>tlr){
		tmp = (uc>tlc) ? uc : tlc;
		add_tab(tlr, tmp, tur, tuc, tcolor);
		tuc = tmp;
	}
}
Exemplo n.º 2
0
Arquivo: parser.c Projeto: Fusiow/msh
t_command			*tab_contain(t_parse *list, int i)
{
	char		**tab;
	glob_t		globlist;
	t_command	*result;
	int			j;

	result = NULL;
	while (list)
	{
		i = 0;
		tab = (char **)ft_memalloc(sizeof(char *) * 1024);
		while (list != NULL && (ft_strcmp(list->str, ";")) && i < 1024)
		{
			j = -1;
			glob(list->str, GLOB_NOCHECK, 0, &globlist);
			while (globlist.gl_pathv[++j])
				tab[i++] = ft_strdup(globlist.gl_pathv[j]);
			globfree(&globlist);
			list = list->next;
		}
		tab[i] = NULL;
		result = add_tab(result, tab);
		if (list)
			list = list->next;
	}
	return (result);
}
Exemplo n.º 3
0
int main(void)
{
	int n, i;
	int tlr, tlc, tur, tuc, tcolor;
	int j, tlim;
	int k;
	freopen("rect1.in",  "r",  stdin); 
	freopen("rect1.out",  "w",  stdout); 

	while(scanf("%d%d%d", &row_max, &col_max, &n) != EOF){
		initial();
		for(i=0; i<n; i++){
			scanf("%d%d%d%d%d", &tlr, &tlc, &tur, &tuc, &tcolor);
			tlim = lim;
			add_tab(tlr, tlc, tur, tuc, tcolor);
			for(j=0; j<tlim; j++)
				cut(tlr, tlc, tur, tuc, tcolor, j);
			for(j=0; j<tlim; j++)
				del_tab(j);
		}
		for(i=0; i<=2500; i++)
			if(area[i])
				printf("%d %d\n", i, area[i]);
	}
	return 0;
}
Exemplo n.º 4
0
void local_array2(int start)//获取局部数组,并定义
{
	char op[expr_size],fuc1[expr_size],fuc2[expr_size];
	int i=0,size=0;
	num_v=0;
	for(i=start;i<num_inst;i++)
	{
		sscanf(inst[i],"%s",op);
		if(strcmp(op,"ret")==0)
			break;
		if(strcmp(op,"array2")==0)//检测到辅助指令array
		{
			sscanf(inst[i],"%s %s %s %d",op,op,fuc1,&size);//array2 name type size
			if(strcmp(fuc1,"FP")==0)
			{
				asize[num_v]=size;
				strcpy(var_name[num_v++],op);
			}
		}
	}

	int list[expr_size],num=0;
	define_var(var_name,num_v,list,num);
	for(i=0;i<num;i++)
	{
		add_tab();
		fprintf(fw,"long %s[%d][%d]; \n",var_name[list[i]],array_size,asize[list[i]]);
	}
}
Exemplo n.º 5
0
t_bool	exec_sh(char *sh, t_menu *menu)
{
  char	**temp;
  char	*path;
  int	status;

  if ((temp = add_tab(menu->list[menu->cur]->name, menu->path)) == NULL)
    return (FALSE);
  if ((path = creat_path(temp)) == NULL)
    return (FALSE);
  def_prog_mode();
  if (fork() == 0)
    {
      if (my_strcmp(sh, "emacs") == 0)
	execlp(sh, sh, "-nw", path);
      else
	execlp(sh, sh, path);	
    }
  else
    {
      wait(&status);
      reset_prog_mode();
      clear();
      init_aff();
      wrefresh(g_ctrl.menu[0].win);
      wrefresh(g_ctrl.menu[1].win);
      refresh();
   }
  return (TRUE);
}
Exemplo n.º 6
0
int main(int argc, char* argv[])
{
	int ret = 0, val = 0, i = 0;
	int* tab = (int*)malloc(sizeof(int) * 10);
	int* tab_modif = 0;
	
	// On ouvre le fichier
	FILE* file = fopen ("tenvalues.txt", "r");
	
	// Vérifie si il est bien ouvert
	if (!file)
	{
		printf("Impossible d'ouvrir 'tenvalues.txt' !");
		exit(-1);
	}
	
	// On lit chaque ligne
	while (!feof(file))
	{
		ret = fscanf(file, "%d", &val);
		
		// Si fscanf n'est pas valide, ou si on est aux bornes de notre tableau, on s'arrête.
		if (ret != 1 || i == 10)
			break;
		
		// Sinon on assigne la valeur dans notre tableau
		tab[i++] = val;
	}
	
	// On ferme le fichier
	fclose(file);
	
	// On demande la valeur à ajouter
	ret = 0;
	while (ret != 1)
	{
		printf("Valeur a ajouter: ");
		ret = scanf("%d", &val);
		CLRBUF;
	}
	
	// On ajoute la valeur
	tab_modif = add_tab(tab, 10, val);
	
	// On affiche les tableaux
	printf("Original: \n");
	afficheTab(tab, 10);
	
	printf("\nModif: \n");
	afficheTab(tab_modif, 11);
	printf("\n");
	
	// On libère la mémoire
	free(tab);
	free(tab_modif);
	
	return 0;
}
Exemplo n.º 7
0
//if和while的检测
void cmp_inst(char op[],char fuc1[],char fuc2[],char op1[],char op2[],int &i)
{
	char temp[expr_size];
	char v1[expr_size],v2[expr_size];
	int t1=0,t2=0,reg2=0,reg1=0;//flag用于指示是否为常数

	if(get_op(fuc1,v1,reg1)==2)
		get_expr(reg1,v1);
	if(get_op(fuc2,v2,reg2)==2)
		get_expr(reg2,v2);//获取判断语言的两个变量,或者是常数。如果是变量需要加到变量表中。
			
	sscanf(inst[i+1],"%s %s %s",op,fuc1,fuc2);
	int jump=0;
	sscanf(fuc2,"[%d]",&jump);
	bool flag_while=judge_while(i,jump);//判断是否可能为while循环

	if(strcmp(op,"blbc")==0)//正常的等于
	{
		if(flag_while)
			sprintf(temp,"while(%s%s%s) \n",v1,op1,v2);
		else
			sprintf(temp,"if(%s%s%s) \n",v1,op1,v2);
	}
	else if(strcmp(op,"blbs")==0)//等于的相反情况
	{
		if(flag_while)
			sprintf(temp,"while(%s%s%s) \n",v1,op2,v2);
		else
			sprintf(temp,"if(%s%s%s) \n",v1,op2,v2);
	}
	else
	{
		fprintf(fw,"cmpeq is wrong struct! \n");
	}
			
	extra[jump]++;//跳转的目的指令需要补全  }

	i++;//增加一条指令
	add_tab();//添加tab键
	fprintf(fw,"%s",temp);//放入缓存区
	add_tab();
	fprintf(fw,"{\n");
	num_big++;//{的个数增加一个
}
Exemplo n.º 8
0
void translate_fuc(int &now)//函数调用解析
{
	char op[expr_size],fuc1[expr_size],fuc2[expr_size];
	int i=0,end=0;
	for(i=now+1;i<num_inst;i++)//找到参数定义结束后的call指令
	{
		sscanf(inst[i],"%s %s %s",op,fuc1,fuc2);
		if(strcmp(op,"call")==0)
		{
			end=i;
			int reg=0;
			sscanf(fuc1,"[%d]",&reg);
			add_tab();
			fprintf(fw,"fuction_%d(",reg);
			break;
		}
		else if(strcmp(op,"load")==0)
		{
			int reg=0;
			sscanf(fuc1,"(%d)",&reg);
			transform_load(reg,i);//load指令的转化,转化为一个简单的表达式,用于之后的使用
		}
	}
	char v1[expr_size];
	int reg=0;
	int t=0;
	for(i=now;i<end;i++)//添加调用参数
	{
		sscanf(inst[i],"%s %s %s",op,fuc1,fuc2);
		if(strcmp(op,"param")==0)
		{
			t=get_op(fuc1,v1,reg);
			if(t==2)
				get_expr(reg,v1);
			fprintf(fw,"%s",v1);
			if(i==end-1)
				fprintf(fw,");\n");
			else
				fprintf(fw,",");
		}
	}
	now=end;
}
Exemplo n.º 9
0
void TabWidget::add_tab(const std::string &name, Widget *tab) {
    add_tab(tab_count(), name, tab);
}
Exemplo n.º 10
0
Widget* TabWidget::create_tab(int index, const std::string &label) {
    Widget* tab = new Widget(nullptr);
    add_tab(index, label, tab);
    return tab;
}
Exemplo n.º 11
0
void initial(void)
{
	lim = 0;
	memset(area, 0, sizeof(area));
	add_tab(0, 0, row_max, col_max, 1);
}
Exemplo n.º 12
0
	void select_open_files(){
		auto file_paths = QFileDialog::getOpenFileNames(this, "Select one or more files", QDir::homePath());

		for(const auto& fp : file_paths)
			add_tab(fp.toStdString());
	}
Exemplo n.º 13
0
	void open_files(const std::vector<std::string>& file_paths){
		for(const auto& file : file_paths)
			add_tab(file);
	}
Exemplo n.º 14
0
void global_struct_array()//结构体定义
{
	int i=0;
	char op[expr_size],fuc1[expr_size],type[expr_size],fuc2[expr_size],dst[expr_size];

	for(i=2;i<num_inst-1;i++)//遍历所有指令,找到结构体的结构进行转换 结构体都变为单个变量
	{
		sscanf(inst[i-1],"%s %s %s",fuc2,op,op);
		sscanf(inst[i+1],"%s %s %s",dst,op,op);
		sscanf(inst[i],"%s %s %s",op,fuc1,type);
		if(strcmp(fuc2,"mul")==0&&strcmp(dst,"add")==0&&strcmp(op,"add")==0&&find_base(fuc1,dst))//找到base,结构体的标志1
		{
			char temp[200];
			strcpy(temp,dst);
			int now=i;
			for(i=i+2;i<num_inst;i++)//offset代表结构体的进一步访问
			{
				sscanf(inst[i],"%s %s %s",op,fuc1,fuc2);
				int reg=0;
				get_op(fuc2,dst,reg);
				if(strcmp(op,"add")==0&&judge_offset(dst,fuc2))
				{
					strcat(temp,"_");
					strcat(temp,fuc2);
				}
				else if(i>now+2)//如果有offset,则说明为结构体,使用辅助指令struct,指明是结构体
				{
					if(strcmp(type,"GP")==0)
						strcpy(var_name[num_v++],temp);//将全局结构体保存下来

					sscanf(inst[now-1],"%s %s %s",op,fuc1,fuc2);

					int reg=0;
					int t=get_op(fuc1,dst,reg);
		
					if(t==1)
						sprintf(inst[i-1]," array %s[%s] %s %s ",temp,dst,temp,type);
					else if(t==3)
					{
						sprintf(inst[now-1]," var %s ",fuc1);
						sprintf(inst[i-1]," array %s[%s] %s %s ",temp,dst,temp,type);
					}
					else if(t==2)
					{
						sprintf(inst[i-1]," array %s[(%s)] %s %s %s %d",temp,fuc1,temp,type,"reg",reg);
					}
					i--;
					for(now;now<i;now++)
						sprintf(inst[now],"nop ");
					break;
				}
				else
					break;
			}
		}
		
	}
	int list[1000],num=0;
	define_var(var_name,num_v,list,num);//局部变量定义
	for(i=0;i<num;i++)
	{
		add_tab();
		fprintf(fw,"long %s[%d]; \n",var_name[list[i]],array_size);
	}
}
Exemplo n.º 15
0
void local_define(int start)//局部变量定义,变量,数组,结构体
{
	char op[expr_size],fuc1[expr_size],fuc2[expr_size];
	int i=0;
	num_p=0;
	num_v=0;

	char v1[expr_size],v2[expr_size];
	int t1,t2,reg1,reg2;
	for(i=start;i<num_inst;i++)
	{
		sscanf(inst[i],"%s %s %s",op,fuc1,fuc2);
		if(strcmp(op,"ret")==0)
			break;
		if(judge_two_op(op))//双操作数,其中也可能包含变量,需要检测是否有局部变量
		{
			t1=get_op(fuc1,v1,reg1);
			t2=get_op(fuc2,v2,reg2);
			if(t1==3)
			{
				if(reg1>0)
				{
					param_place[num_p]=reg1;
					strcpy(param_name[num_p++],v1);
				}
				else
					strcpy(var_name[num_v++],v1);
			}
			if(t2==3)
			{
				if(reg2>0)
				{
					param_place[num_p]=reg1;
					strcpy(param_name[num_p++],v2);
				}
				else
					strcpy(var_name[num_v++],v2);
			}
		}
		else if(strcmp(op,"neg")==0||strcmp(op,"var")==0||strcmp(op,"param")==0||strcmp(op,"write")==0)//单操作数,其中可能包含变量,需要检测
		{
			t1=get_op(fuc1,v1,reg1);
			if(t1==3)
			{
				if(reg1>0)
				{
					param_place[num_p]=reg1;
					strcpy(param_name[num_p++],v1);
				}
				else
					strcpy(var_name[num_v++],v1);
			}
			if(strcmp(op,"var")==0)
				sprintf(inst[i]," nop ");
		}
		else if(strcmp(op,"struct")==0&&strcmp(fuc2,"FP")==0)//结构体定义
		{
			strcpy(var_name[num_v++],fuc1);
		}
	}

	int list[1000],num=0;
	define_var(param_name,num_p,list,num);//定义函数调用参数
	sort_list(list,num);
	for(i=0;i<num-1;i++)
		fprintf(fw,"long %s,",param_name[list[i]]);
	if(num-1>=0)
		fprintf(fw,"long %s",param_name[list[num-1]]);
	fprintf(fw,") \n{ \n");

	num_big++;

	num=0;
	define_var(var_name,num_v,list,num);//局部变量定义
	for(i=0;i<num;i++)
	{
		add_tab();
		fprintf(fw,"long %s; \n",var_name[list[i]]);
	}

	local_array2(start);
	local_array(start);//局部数组定义

}
Exemplo n.º 16
0
//反编译
void recompiler()
{
	int i=0;
	char op[expr_size],fuc1[expr_size],fuc2[expr_size];
	for(i=1;i<num_inst;i++)
	{
		extra_judge(i);//额外的判断,目前为增加  }
		sscanf(inst[i],"%s %s %s",op,fuc1,fuc2);
		//cout <<"run "<<i<<": "<<inst[i]<<endl;
		if(strcmp(op,"nop")==0)//空指令
			continue;
		else if(strcmp(op,"entrypc")==0)//指示main函数
		{
			fprintf(fw,"void main(");
			local_define(i+1);//局部变量检测与定义
			i++;
		}
		else if(strcmp(op,"enter")==0)//函数的定义
		{
			fprintf(fw,"void fuction_%d(",i);
			local_define(i+1);//函数的局部变量检测
			continue;
		}
		else if(strcmp(op,"cmpeq")==0)//比较相等
		{
			cmp_inst(op,fuc1,fuc2,"==","!=",i);//判断语句的识别,包括了while
		}
		else if(strcmp(op,"cmple")==0)//比较小于等于
		{
			cmp_inst(op,fuc1,fuc2,"<=",">",i);
		}
		else if(strcmp(op,"cmplt")==0)//比较小于
		{
			cmp_inst(op,fuc1,fuc2,"<",">=",i);
		}
		else if(strcmp(op,"load")==0)//加载内存数据,全局变量,结构体,数组
		{
			int reg=0;
			sscanf(fuc1,"(%d)",&reg);
			transform_load(reg,i);//load指令的转化,转化为一个简单的表达式,用于之后的使用
		}
		else if(strcmp(op,"store")==0)//存储内存数据,全局变量,结构体,数组
		{
			char v1[expr_size],v2[expr_size];
			int reg1,reg2=0;
			int t1=get_op(fuc1,v1,reg1);//获取当前参数是 常数,变量(全局/局部),表达式
			int t2=get_op(fuc2,v2,reg2);

			if(t1==2)
				get_expr(reg1,v1);//获取表达式
			if(t2==2)
				get_expr(reg2,v2);

			sprintf(inst[i]," %s=%s",v2,v1);
			add_tab();//添加tab
			fprintf(fw,"%s=%s;\n",v2,v1);
		}
		else if(strcmp(op,"expr")==0)
		{
			int n=0;
			sscanf(fuc1,"%d",&n);
			get_expr(n,fuc1);
		}
		else if(strcmp(op,"param")==0)//参数,用于函数调用
		{
			translate_fuc(i);//函数调用转化,带参数,返回时为call指令
		}
		else if(strcmp(op,"call")==0)//无参数的函数调用
		{
			int reg=0;
			sscanf(fuc1,"[%d]",&reg);
			add_tab();
			fprintf(fw,"fuction_%d();\n");
		}
		else if(strcmp(op,"else")==0)//辅助指令,用于else
		{
			add_tab();
			fprintf(fw,"else\n");
			add_tab();
			fprintf(fw,"{\n");
			num_big++;
			int t=0;
			sscanf(fuc1,"%d",&t);
			extra[t]++;
		}
		else if(strcmp(op,"write")==0)//输出
		{
			char v1[expr_size];
			int reg=0;
			int t=get_op(fuc1,v1,reg);
			if(t==2)
				get_expr(reg,v1);
			add_tab();
			fprintf(fw,"WriteLong(%s);\n",v1);
		}
		else if(strcmp(op,"wrl")==0)//换行
		{
			add_tab();
			fprintf(fw,"WriteLine();\n");
		}
		else if(simple_expr(op))//简单的表达式,add,sub,mul,div,mod,neg,move
		{
			char dst[expr_size];
			get_expr(i,dst);
			if(strcmp(op,"move")==0)
			{
				add_tab();
				fprintf(fw,"%s;\n",dst);
			}
		}
		else if(strcmp(op,"ret")==0)//函数返回指令
		{
			num_big--;
			add_tab();
			fprintf(fw,"}\n");
		}
	}
}