Exemple #1
0
int EDIV_Export_Const(char* cadena, int valor)
{
	if(decl_struct) {
		dll_error(6,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_const:\t-- ID OBJETO: %d\n"
			   "export_const:\tCadena exportada: %s\n"
			   "export_const:\tValor: %d\n"
			   "export_const:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,valor,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob=o;

	if (ob->tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	ob->tipo=tcons;
	ob->cons.valor=valor;
	ob->cons.literal=0;

	return 1;
}
Exemple #2
0
int EDIV_Export_Member_Tab(char* cadena, int numregs)
{
	if(!decl_struct) {
		dll_error(7,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_member_tab:\t-- ID OBJETO: %d\n"
			   "export_member_tab:\tCadena exportada: %s\n"
			   "export_member_tab:\tN.regs: %d\n"
			   "export_member_tab:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob2=o;

	if ((*ob2).tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	if(ob->tipo==tsglo) {			/* array miembro de struct global */
		(*ob2).tipo=ttglo;
		(*ob2).tglo.offset=len;
		(*ob2).tglo.len1=numregs;
		(*ob2).tglo.len2=-1;
		(*ob2).tglo.len3=-1;
		(*ob2).tglo.totalen=numregs+1;
		len+=numregs+1;
		memset(&mem[imem],0,(numregs+1)*4);
		imem+=numregs+1;
		ob->sglo.len_item+=numregs+1;
		
		return (*ob2).tglo.offset;
	}
	else {							/* array miembro de struct local */
		if(struct_reserved)
			indexa_variable(v_reserved,cadena,iloc);
		(*ob2).tipo=ttloc;
		(*ob2).tloc.offset=len;
		(*ob2).tloc.len1=numregs;
		(*ob2).tloc.len2=-1;
		(*ob2).tloc.len3=-1;
		(*ob2).tloc.totalen=numregs+1;
		len+=numregs+1;
		memset(&loc[iloc],0,(numregs+1)*4);
		iloc+=numregs+1;
		ob->sloc.len_item+=numregs+1;
		
		return (*ob2).tloc.offset;
	}
}
Exemple #3
0
int EDIV_Export_Local_Struct(char* cadena, int numregs)
{
	if(decl_struct) {
		dll_error(6,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_local_struct:\t-- ID OBJETO: %d\n"
			   "export_local_struct:\tCadena exportada: %s\n"
			   "export_local_struct:\tN.regs: %d\n"
			   "export_local_struct:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob=o;

	if (ob->tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	decl_struct=1;
	if(!strcmp(cadena,"reserved")) {
		struct_reserved=1;
	}
	else {
		indexa_variable(v_local,cadena,iloc);
	}

	ob->tipo=tsloc;
	ob->sloc.offset=iloc;
	ob->sloc.items1=numregs;
	ob->sloc.items2=ob->sloc.items3=-1;
	ob->sloc.totalitems=numregs+1;
	ob->sloc.len_item=0;
	member=ob;
	len=0;

    return iloc;
}
Exemple #4
0
int EDIV_Export_EndStruct()
{
	if(!decl_struct) {
		dll_error(9);
		return 0;
	}

	#ifdef DEBUG_DLL
		printf("export_endstruct:\t--- estructura cerrada\n");
	#endif

	member=NULL;

	if(ob->tipo==tsglo) {			/* cierra estructura global */
		if (ob->sglo.len_item==0) {
			dll_error(10);
			return 0;
		}
		if (ob->sglo.totalitems>1) {
			len=(ob->sglo.totalitems-1)*ob->sglo.len_item-1;
			do {
				mem[imem]=mem[imem-ob->sglo.len_item];
				imem++;
			} while (len--);
		}
	}
	else {							/* cierra estructura local */
		if (ob->sloc.len_item==0) {
			dll_error(10);
			return 0;
		}
		if (ob->sloc.totalitems>1) {
			len=(ob->sloc.totalitems-1)*ob->sloc.len_item-1;
			do {
				loc[iloc]=loc[iloc-ob->sloc.len_item];
				iloc++;
			} while (len--);
		}
	}

	decl_struct=0;
	struct_reserved=0;

	return 1;
}
Exemple #5
0
int EDIV_Export_Member_Int(char* cadena, int valor)
{
	if(!decl_struct) {
		dll_error(7,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_member_int:\t-- ID OBJETO: %d\n"
			   "export_member_int:\tCadena exportada: %s\n"
			   "export_member_int:\tValor: %d\n"
			   "export_member_int:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,valor,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob2=o;

	if ((*ob2).tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	if(ob->tipo==tsglo) {			/* int miembro de struct global */
		(*ob2).tipo=tvglo;
		(*ob2).vglo.offset=len++;
		mem[imem]=valor;
		ob->sglo.len_item++;
		return imem++;
	}
	else {							/* int miembro de struct local */
		if(struct_reserved)
			indexa_variable(v_reserved,cadena,iloc);
        (*ob2).tipo=tvloc;
        (*ob2).vloc.offset=len++;
        loc[iloc]=valor;
        ob->sloc.len_item++;
        return iloc++;
	}
}
Exemple #6
0
int EDIV_Export_Local_Tab(char* cadena, int numregs)
{
	if(decl_struct) {
		dll_error(6,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_local_tab:\t-- ID OBJETO: %d\n"
			   "export_local_tab:\tCadena exportada: %s\n"
			   "export_local_tab:\tN.regs: %d\n"
			   "export_local_tab:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob=o;

	if (ob->tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	indexa_variable(v_local,cadena,iloc);

	ob->tipo=ttloc;
	ob->tloc.offset=iloc;
	ob->tloc.len1=len=numregs;
	ob->tloc.len2=-1;
	ob->tloc.len3=-1;
	ob->tloc.totalen=len+1;

	/* Inicializamos la tabla a 0 */
	do {
		loc[iloc++]=0;
	} while (len--);

	return ob->tloc.offset;
}
Exemple #7
0
int EDIV_Export_Global_Struct(char* cadena, int numregs)
{
	if(decl_struct) {
		dll_error(6,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_global_struct:\t-- ID OBJETO: %d\n"
			   "export_global_struct:\tCadena exportada: %s\n"
			   "export_global_struct:\tN.regs: %d\n"
			   "export_global_struct:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob=o;

	if (ob->tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	indexa_variable(v_global,cadena,imem);

	decl_struct=1;

	ob->tipo=tsglo;
	ob->sglo.offset=imem;
	ob->sglo.items1=numregs;
	ob->sglo.items2=ob->sglo.items3=-1;
	ob->sglo.totalitems=numregs+1;
	ob->sglo.len_item=0;
	member=ob;
	len=0;

	return imem;
}
Exemple #8
0
int EDIV_Export(char* cadena, int nparam, void* hfuncion)
{
	if(decl_struct) {
		dll_error(6,cadena);
		return 0;
	}

	if(nparam<0) {
		dll_error(5,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,nparam);

    #ifdef DEBUG_DLL
		printf("export_function:\t-- ID FUNCION: %d\n"
			   "export_function:\tCadena exportada: %s\n"
			   "export_function:\tN. parametros: %d\n"
			   "export_function:\tOffset de la funcion: 0x%X\n",n_externs,cadena,nparam,(unsigned int)hfuncion);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob=o;

	if (ob->tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

    ob->tipo=tfext;
    ob->fext.codigo=n_externs;
    ob->fext.num_par=nparam;

	n_externs++;

	return 1;
}
static void byebye(bool error=false, bool wait=false, laszip_POINTER laszip=0)
{
  if (error)
  {  
    dll_error(laszip);
  }
  if (wait)
  {
    fprintf(stderr,"<press ENTER>\n");
    getc(stdin);
  }
  exit(error);
}
Exemple #10
0
int EDIV_Export_Local(char* cadena, int valor)
{
	if(decl_struct) {
		dll_error(6,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_local:\t-- ID OBJETO: %d\n"
			   "export_local:\tCadena exportada: %s\n"
			   "export_local:\tValor: %d\n"
			   "export_local:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,valor,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob=o;

	if (ob->tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	indexa_variable(v_local,cadena,iloc);

	ob->tipo=tvloc;
    ob->vloc.offset=iloc;
    loc[iloc]=valor;

    return iloc++;
}
Exemple #11
0
int EDIV_Export_Member_Str(char* cadena, int tamano)
{
	if(!decl_struct) {
		dll_error(7,cadena);
		return 0;
	}

	creaobj=crea_objeto((byte*)cadena,-1);

	#ifdef DEBUG_DLL
		printf("export_member_str:\t-- ID OBJETO: %d\n"
			   "export_member_str:\tCadena exportada: %s\n"
			   "export_member_str:\tTamano: %d\n"
			   "export_member_str:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,tamano,(unsigned int)o);
	#endif

	if(creaobj) {
		dll_error(creaobj,cadena);
		return 0;
	}

	ob2=o;

	if ((*ob2).tipo!=tnone) {
		dll_error(5,cadena);
		return 0;
	}

	if(ob->tipo==tsglo) {			/* string miembro de struct global */

		(*ob2).tipo=tcglo;
		(*ob2).cglo.offset=len+1;

		if (((*ob2).cglo.totalen=tamano)<0) {
			dll_error(8,cadena);
			return 0;
		}
		if ((*ob2).cglo.totalen>0xFFFFF) {
			dll_error(8,cadena);
			return 0;
		}

		mem[imem]=0xDAD00000|(*ob2).cglo.totalen;
		len+=1+((*ob2).cglo.totalen+5)/4;
		mem[imem+1]=0;
		imem+=1+((*ob2).cglo.totalen+5)/4;
		ob->sglo.len_item+=1+((*ob2).cglo.totalen+5)/4;
		
		return (*ob2).cglo.offset;
	}
	else {							/* string miembro de struct local */

        (*ob2).tipo=tcloc;
        (*ob2).cloc.offset=len+1;

		if (((*ob2).cloc.totalen=tamano)<0) {
			dll_error(8,cadena);
			return 0;
		}
		if ((*ob2).cloc.totalen>0xFFFFF) {
			dll_error(8,cadena);
			return 0;
		}

		loc[iloc]=0xDAD00000|(*ob2).cloc.totalen;
		len+=1+((*ob2).cloc.totalen+5)/4;
		loc[iloc+1]=0;
		iloc+=1+((*ob2).cloc.totalen+5)/4;
		ob->sloc.len_item+=1+((*ob2).cloc.totalen+5)/4;
		
		return (*ob2).cloc.offset;
	}
}