Compare commits

..

No commits in common. "d2577da4ddeece1dd109aa34f542d15eb2603e94ab96c37b5e2051a12792a263" and "03fec6e101837c3342533607f9b2cc7daa7fe1c6bcd3764a6a6ea62d00765bb4" have entirely different histories.

30 changed files with 4048 additions and 6754 deletions

View file

@ -1,13 +1,13 @@
edivc edivc
===== =====
eDivc was an attempt to make a DIV language compiler started in 2000 and publicly released in 2002. After many years and an unstable 0.1 version, it was left on [SourceForge](https://sf.net/projects/edivc) mostly abandoned. The code was written while all of us were about between 14-17 y/o and it had parts of the DIV Games Studio original compiler written in C for MS-DOS using Watcom C/C++. The quality is poor. eDivc was an attempt to make a DIV language compiler started in 2000 and publicly released in 2002. After many years and a very unstable 0.1 version, it was left on SourceForge mostly abandoned. The code was written while all of us were about between 14-17 y/o and it had parts of the DIV Games Studio original compiler written in C for MS-DOS using Watcom C/C++. The quality is poor.
I took the work we (the eDiv Team at that time) did and moved into GitHub just for historical and nostalgic tracking, keeping the CVS commit history. At sometimes I may send some changes for fun, maybe I release a working (at that time state) version which can run the included test programs, but this is not a promise nor a thing I may do soon. I took the work we (the eDiv Team at that time) did and moved into GitHub just for historical and nostalgic tracking. The commit history from CVS has been keept. At sometimes I will send some changes for fun, maybe I release a working (at that time state) version which can run the included test programs but this is not a promise nor a thing I may do soon.
I don't have plans to maintain this, so feel free to fork and send pull requests if you want your changes merged. I don't have plans to maintain this, so feel free to fork and send pull requests if you want your changes merged.
You must know this thing won't compile nowadays with current versions of GCC, LLVM or Visual C++. I have sent some changes to build it on latest macOS builds, but it fails at runtime and needs many fixes. The code is not commented, and variables/functions are in Spanish. You have been warned :-). You must known this thing won't compile nowadays with current versions of GCC, LLVM or Visual C++. I have sent some changes to build it on OS X 10.9 Mavericks, but it fails at runtime and needs many fixes. The code is not commented and variables/functions are in spanish. You have been warned :-).
textshot textshot
======== ========
@ -35,3 +35,6 @@ Lista de opciones:
macbookair:bin vroman$ macbookair:bin vroman$
``` ```

View file

@ -66,11 +66,11 @@ zoomSurfaceRGBA (SDL_Surface * src, SDL_Surface * dst, int smooth)
} }
/* Allocate memory for row increments */ /* Allocate memory for row increments */
if ((sax = malloc ((dst->w + 1) * sizeof (Uint32))) == NULL) if ((sax = (int *) malloc ((dst->w + 1) * sizeof (Uint32))) == NULL)
{ {
return (-1); return (-1);
} }
if ((say = malloc ((dst->h + 1) * sizeof (Uint32))) == NULL) if ((say = (int *) malloc ((dst->h + 1) * sizeof (Uint32))) == NULL)
{ {
free (sax); free (sax);
return (-1); return (-1);
@ -213,11 +213,11 @@ zoomSurfaceY (SDL_Surface * src, SDL_Surface * dst)
sy = (Uint32) (65536.0 * (float) src->h / (float) dst->h); sy = (Uint32) (65536.0 * (float) src->h / (float) dst->h);
/* Allocate memory for row increments */ /* Allocate memory for row increments */
if ((sax = malloc (dst->w * sizeof (Uint32))) == NULL) if ((sax = (Uint32 *) malloc (dst->w * sizeof (Uint32))) == NULL)
{ {
return (-1); return (-1);
} }
if ((say = malloc (dst->h * sizeof (Uint32))) == NULL) if ((say = (Uint32 *) malloc (dst->h * sizeof (Uint32))) == NULL)
{ {
if (sax != NULL) if (sax != NULL)
{ {
@ -554,24 +554,21 @@ transformSurfaceY (SDL_Surface * src, SDL_Surface * dst, int cx, int cy,
*/ */
/* /*XPUT/* Sanity check */
Sanity check /* Determine if source surface is 32bit or 8bit */
Determine if source surface is 32bit or 8bit /* New source surface is 32bit with a defined RGBA ordering */
New source surface is 32bit with a defined RGBA ordering /* Sanity check zoom factor */
Sanity check zoom factor /* Check if we have a rotozoom or just a zoom */
Check if we have a rotozoom or just a zoom /* Angle!=0: full rotozoom *
Angle!=0: full rotozoom //* ----------------------- */
Calculate target factors from sin/cos and zoom /* Calculate target factors from sin/cos and zoom
*/
/*
Determine destination width and height by rotating a centered source box
Alloc space to completely contain the rotated surface
Target surface is 32bit with source RGBA/ABGR ordering
Lock source surface
Check which kind of surface we have
Call the 32bit transformation routine to do the rotation (using alpha)
*/ */
/* Determine destination width and height by rotating a centered source box */
/* Alloc space to completely contain the rotated surface */
/* Target surface is 32bit with source RGBA/ABGR ordering */
/* Lock source surface */
/* Check which kind of surface we have */
/* Call the 32bit transformation routine to do the rotation (using alpha) */
#define VALUE_LIMIT 0.001 #define VALUE_LIMIT 0.001

View file

@ -136,7 +136,7 @@ int eDIV_LOAD_FPG(FUNCTION_PARAMS)
fread(files[0].mapa[num].cpoint,2,2*infomapa.number_of_points,f) ; fread(files[0].mapa[num].cpoint,2,2*infomapa.number_of_points,f) ;
} }
graphic = malloc(infomapa.wide*infomapa.height*bpp/8); graphic = (char*)malloc(infomapa.wide*infomapa.height*bpp/8);
fread(graphic,1,infomapa.wide*infomapa.height*bpp/8,f); fread(graphic,1,infomapa.wide*infomapa.height*bpp/8,f);
files[0].mapa[num].Surface = SDL_CreateRGBSurfaceFrom(graphic,infomapa.wide,infomapa.height,bpp,infomapa.wide*bpp/8,0,0,0,0) ; files[0].mapa[num].Surface = SDL_CreateRGBSurfaceFrom(graphic,infomapa.wide,infomapa.height,bpp,infomapa.wide*bpp/8,0,0,0,0) ;

View file

@ -177,26 +177,20 @@ FILE * memo ;
* nombre. * nombre.
* @param nombre_program Nombre del programa, obtenido de fp->nombre_program * @param nombre_program Nombre del programa, obtenido de fp->nombre_program
*/ */
void guarda_pantallazo(unsigned char *nombre_program) void guarda_pantallazo(char* nombre_program)
{ {
char capturef[256]; char capturef[256];
int c=0; int c=0;
FILE* f; FILE* f;
while(1) {
/* 256 son mas que suficientes */
if (c >= 256)
break;
sprintf(capturef,"%s%04d.bmp",nombre_program,c); sprintf(capturef,"%s%04d.bmp",nombre_program,c);
f = fopen(capturef, "rb"); while(f=fopen(capturef,"rb")) {
if (f == NULL)
c++;
fclose(f); fclose(f);
c++;
sprintf(capturef,"%s%04d.bmp",nombre_program,c);
if(c==0)
break;
} }
SDL_SaveBMP(screen,capturef); SDL_SaveBMP(screen,capturef);
} }
@ -350,6 +344,25 @@ void frame(FUNCTION_PARAMS)
{ {
if ( draws[i].existe ) if ( draws[i].existe )
{ {
/* if ( draws[i].x + draws[i].Surface->w >= fp->regions[0].x && draws[i].x < fp->regions[0].x + fp->regions[0].w &&
draws[i].y + draws[i].Surface->h >= fp->regions[0].y && draws[i].y < fp->regions[0].y + fp->regions[0].h )
{
if ( draws[i].x >= fp->regions[0].x && draws[i].x + draws[i].Surface->w < fp->regions[0].x + fp->regions[0].w &&
draws[i].y >= fp->regions[0].y && draws[i].y + draws[i].Surface->h < fp->regions[0].y + fp->regions[0].h )
{
srcrect.x = 0 ;
srcrect.y = 0 ;
srcrect.w = draws[i].Surface->w ;
srcrect.h = draws[i].Surface->h ;
dstrect.x = draws[i].x ;
dstrect.y = draws[i].y ;
dstrect.w = 0 ; /* Se ignora *//*
dstrect.h = 0 ; /* Se ignora *//*
Dibuja( draws[i].Surface , srcrect , dstrect , z , draws[i].t,100,0) ;
}
}*/
Dibuja(draws[i].Surface,draws[i].x,draws[i].y,0,0,draws[i].region,z,0,draws[i].t,100,0); Dibuja(draws[i].Surface,draws[i].x,draws[i].y,0,0,draws[i].region,z,0,draws[i].t,100,0);
} }
} }

View file

@ -344,7 +344,7 @@ int DIV_strdel(FUNCTION_PARAMS)
int DIV_itoa(FUNCTION_PARAMS) int DIV_itoa(FUNCTION_PARAMS)
{ {
int n=getparm(); int n=getparm();
sprintf((char*)&fp->mem[fp->nullstring[*fp->nstring]], "%d", n); itoa(n,(char*)&fp->mem[fp->nullstring[*fp->nstring]],10);
n=fp->nullstring[*fp->nstring]; n=fp->nullstring[*fp->nstring];
*fp->nstring=(((*fp->nstring)+1)&3); *fp->nstring=(((*fp->nstring)+1)&3);
return n; return n;

0
ediv/bin/makelib.sh Executable file → Normal file
View file

File diff suppressed because it is too large Load diff

View file

@ -34,16 +34,18 @@ char *buffer;
int linea; int linea;
char cfg[256]; char cfg[256];
void salta_spc() /*void cfg_error(int error)
{ {
while (lower[buffer[i]] == 0 && i < tamano) printf(translate(41),cfg,linea,translate_cfg_error(error));
{ printf(translate(42));
if (buffer[i] == '\n') exit(1);
linea++; }*/
else if (buffer[i] == '\'')
{ void salta_spc() {
while (buffer[i] != '\n' && i < tamano) while(lower[buffer[i]]==0 && i<tamano) {
i++; if(buffer[i]=='\n') linea++;
else if(buffer[i]=='\'') {
while(buffer[i]!='\n' && i<tamano) i++;
linea++; linea++;
} }
i++; i++;
@ -69,35 +71,30 @@ void lee_ediv_cfg(char *ediv_cfg)
hacer_strfix=1; hacer_strfix=1;
optimizar=1; optimizar=1;
if ((f = fopen(ediv_cfg, "r")) == NULL) if((f=fopen(ediv_cfg,"r"))==NULL) {
{
return; return;
} }
fseek(f,0,SEEK_END); fseek(f,0,SEEK_END);
tamano=ftell(f); tamano=ftell(f);
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
buffer = e_malloc(tamano); buffer=(char*)e_malloc(tamano);
fread(buffer,1,tamano,f); fread(buffer,1,tamano,f);
fclose(f); fclose(f);
for (i = 0; i < tamano; i++) for(i=0;i<tamano;i++) {
{
salta_spc(); salta_spc();
c=0; c=0;
while(lower[buffer[i]]!=0 && c<20 && i<tamano) while(lower[buffer[i]]!=0 && c<20 && i<tamano)
tag[c++]=lower[buffer[i++]]; tag[c++]=lower[buffer[i++]];
tag[c]=0; tag[c]=0;
if (!strcmp(tag, "max_process")) if(!strcmp(tag,"max_process")) {
{
salta_spc(); salta_spc();
if (buffer[i] != '=') if(buffer[i]!='=') cfg_error(1); /* se esperaba '=' */
cfg_error(1); /* se esperaba '=' */
salta_spc(); salta_spc();
if (buffer[i] < '0' || buffer[i] > '9') if(buffer[i]<'0' || buffer[i]>'9') cfg_error(2); /* se esperaba un dato numerico */
cfg_error(2); /* se esperaba un dato numerico */
c=0; c=0;
while(buffer[i]>='0' && buffer[i]<='9' && i<tamano) while(buffer[i]>='0' && buffer[i]<='9' && i<tamano)
tag[c++]=buffer[i++]; tag[c++]=buffer[i++];
@ -158,6 +155,7 @@ void lee_ediv_cfg(char *ediv_cfg)
lexico(); lexico();
comprueba_null=0; comprueba_null=0;
break; break;
} }
free(buffer); free(buffer);

View file

@ -125,7 +125,7 @@ static int AddDLLReference(void *pImageBase, char *svName, DWORD dwFlags)
} }
// Add new dll to list // Add new dll to list
cur = e_malloc(sizeof(IMAGE_PARAMETERS)); cur=(IMAGE_PARAMETERS *)e_malloc(sizeof(IMAGE_PARAMETERS));
if(cur==NULL) { if(cur==NULL) {
LeaveCriticalSection(&g_DLLCrit); LeaveCriticalSection(&g_DLLCrit);
return -1; return -1;

View file

@ -75,14 +75,12 @@ int main(int argc, char *argv[])
noexe=0; noexe=0;
/* Sistemas */ /* Sistemas */
#if defined(_WIN32) #ifdef _WIN32
strcpy(sistema,"win32"); strcpy(sistema,"win32");
#elif defined(__linux__) #endif
#ifdef __linux__
strcpy(sistema,"linux"); strcpy(sistema,"linux");
#elif defined(__APPLE__)
strcpy(sistema, "osx");
#else
strcpy(sistema, "unknown");
#endif #endif
ini=iniparser_load("ediv.cfg"); ini=iniparser_load("ediv.cfg");
@ -90,40 +88,35 @@ int main(int argc, char *argv[])
idioma=detecta_idioma(); idioma=detecta_idioma();
/* mensaje de cabecera */ /* mensaje de cabecera */
print_translate(0); printf(translate(0));
print_translate(1); printf(translate(1));
printf("\n"); printf("\n");
if (argc < 2) if(argc<2) goto ayuda;
goto ayuda;
if(strcmp(argv[1],"--version")==0 || strcmp(argv[1],"-v")==0) if(strcmp(argv[1],"--version")==0 || strcmp(argv[1],"-v")==0)
exit(0); exit(0);
if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) if(strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-h")==0) {
{
ayuda: ayuda:
/* pantalla de ayuda */ /* pantalla de ayuda */
print_translate(2); printf(translate(2));
print_translate(3, argv[0]); printf(translate(3),argv[0]);
print_translate(4); printf(translate(4));
print_translate(5); printf(translate(5));
print_translate(6); printf(translate(6));
print_translate(7); printf(translate(7));
print_translate(8); printf(translate(8));
print_translate(9); printf(translate(9));
print_translate(10, sistema); printf(translate(10),sistema);
print_translate(48); printf(translate(48));
print_translate(11); printf(translate(11));
exit(0); exit(0);
} }
for (i = 1; i < argc; i++) for(i=1;i<argc;i++) {
{ if(argv[i][0]=='-') {
if (argv[i][0] == '-') if(argv[i][1]=='-') {
{
if (argv[i][1] == '-')
{
if(strcmp(argv[i]+2,"debug")==0) if(strcmp(argv[i]+2,"debug")==0)
debug=1; debug=1;
else if(strcmp(argv[i]+2,"list")==0) else if(strcmp(argv[i]+2,"list")==0)
@ -133,34 +126,26 @@ int main(int argc, char *argv[])
else if(strcmp(argv[i]+2,"check")==0) else if(strcmp(argv[i]+2,"check")==0)
noexe=1; noexe=1;
else if(strcmp(argv[i]+2,"system")==0) else if(strcmp(argv[i]+2,"system")==0)
if (++i < argc) if(++i<argc) {
{
strcpy(sistema,argv[i]); strcpy(sistema,argv[i]);
} } else {
else printf(translate(12)); /* se debe indicar un sistema para --system */
{
print_translate(12); /* se debe indicar un sistema para --system */
exit(1); exit(1);
} }
#ifdef _WIN32 #ifdef _WIN32
else if (strcmp(argv[i] + 2, "news") == 0) else if(strcmp(argv[i]+2,"news")==0) {
{
muestra_motd(); muestra_motd();
} }
#endif #endif
else else {
{ printf(translate(13),argv[i]); /* parámetro erróneo */
print_translate(13, argv[i]); /* parámetro erróneo */
exit(1); exit(1);
} }
} }
else else {
{
j=1; j=1;
while (argv[i][j] != 0) while(argv[i][j]!=0) {
{ switch(argv[i][j]) {
switch (argv[i][j])
{
case 'd': case 'd':
debug=1; debug=1;
break; break;
@ -174,21 +159,17 @@ int main(int argc, char *argv[])
noexe=1; noexe=1;
break; break;
case 's': case 's':
if (argv[i][j + 1] != 0) if(argv[i][j+1]!=0) {
{
strcpy(sistema,argv[i]+j+1); strcpy(sistema,argv[i]+j+1);
j=strlen(argv[i])-1; j=strlen(argv[i])-1;
} }
else else {
{ if(++i<argc) {
if (++i < argc)
{
strcpy(sistema,argv[i]); strcpy(sistema,argv[i]);
j=strlen(argv[i])-1; j=strlen(argv[i])-1;
} }
else else {
{ printf(translate(14)); /* se debe indicar un sistema para -s */
print_translate(14); /* se debe indicar un sistema para -s */
exit(1); exit(1);
} }
} }
@ -199,16 +180,14 @@ int main(int argc, char *argv[])
exit(0); exit(0);
#endif #endif
default: default:
print_translate(15, argv[i][j]); /* parámetro erróneo */ printf(translate(15),argv[i][j]); /* parámetro erróneo */
exit(1); exit(1);
} }
j++; j++;
} }
} }
} }
else else switch (hayprog) {
switch (hayprog)
{
case 0: case 0:
fichero_prg=argv[i]; fichero_prg=argv[i];
hayprog=1; hayprog=1;
@ -218,97 +197,84 @@ int main(int argc, char *argv[])
hayprog=2; hayprog=2;
break; break;
default: default:
print_translate(13, argv[i]); /* parámetro erróneo */ printf(translate(13),argv[i]); /* parámetro erróneo */
exit(1); exit(1);
} }
} }
if (hayprog == 0) if(hayprog==0) {
{ printf(translate(16)); /* no se ha especificado un archivo */
print_translate(16); /* no se ha especificado un archivo */
exit(1); exit(1);
} }
for (i = 0; i <= strlen(fichero_prg); i++) for (i=0;i<=strlen(fichero_prg);i++) {
{
if (*(fichero_prg+i) == '.') if (*(fichero_prg+i) == '.')
break; break;
nombreprog[i] = *(fichero_prg+i); nombreprog[i] = *(fichero_prg+i);
} }
nombreprog[i]=0; nombreprog[i]=0;
if (!(fp = fopen(fichero_prg, "rb"))) if(!(fp = fopen(fichero_prg, "rb"))) {
{ if(!strcmp(nombreprog,fichero_prg)) {
if (!strcmp(nombreprog, fichero_prg))
{
strcpy(fichero_prg,nombreprog); strcpy(fichero_prg,nombreprog);
strcat(fichero_prg,".prg"); strcat(fichero_prg,".prg");
if (!(fp = fopen(fichero_prg, "rb"))) if(!(fp = fopen(fichero_prg, "rb"))) {
{
strcpy(fichero_prg,nombreprog); strcpy(fichero_prg,nombreprog);
strcat(fichero_prg,".PRG"); strcat(fichero_prg,".PRG");
if (!(fp = fopen(fichero_prg, "rb"))) if(!(fp = fopen(fichero_prg, "rb"))) {
{ printf(translate(17),nombreprog); /* error al abrir archivo */
print_translate(17, nombreprog); /* error al abrir archivo */
exit(1); exit(1);
} }
} }
} }
else else {
{ printf(translate(17),argv[1]); /* error al abrir archivo */
print_translate(17, argv[1]); /* error al abrir archivo */
exit(1); exit(1);
} }
} }
/* Componemos el nombre del ejecutable */ /* Componemos el nombre del ejecutable */
if (hayprog < 2) if(hayprog<2) {
{
strcpy(outfilename,nombreprog); strcpy(outfilename,nombreprog);
if(!strcmp(sistema,"win32")) if(!strcmp(sistema,"win32"))
strcat(outfilename,".exe"); strcat(outfilename,".exe");
} }
print_translate(18, fichero_prg); /* compilando... */ printf(translate(18),fichero_prg); /* compilando... */
/* mete el PRG en el buffer prog */ /* mete el PRG en el buffer prog */
fseek(fp,0,SEEK_END); fseek(fp,0,SEEK_END);
progsize=ftell(fp); progsize=ftell(fp);
prog = e_malloc(progsize + 1); prog = (unsigned char *)e_malloc(progsize+1);
fseek(fp,0,SEEK_SET); fseek(fp,0,SEEK_SET);
p=(char*)prog; p=(char*)prog;
do do {
{
*p = getc(fp); *p = getc(fp);
p++; p++;
} while(!feof(fp)); } while(!feof(fp));
fclose(fp); fclose(fp);
/* Comprueba si existe la edivrun.lib */ /* Comprueba si existe la edivrun.lib */
if (!noexe) if(!noexe) {
{
strcpy(edivrun_lib,sistema); strcpy(edivrun_lib,sistema);
if(debug) if(debug)
strcat(edivrun_lib,".dbg"); strcat(edivrun_lib,".dbg");
else else
strcat(edivrun_lib,".rel"); strcat(edivrun_lib,".rel");
if ((fp = fopen(edivrun_lib, "rb")) == NULL) if((fp = fopen(edivrun_lib, "rb"))==NULL) {
{ printf(translate(19),edivrun_lib); /* no se encuentra el fichero */
print_translate(19, edivrun_lib); /* no se encuentra el fichero */
exit(1); exit(1);
} }
else else {
{
fread(libmagic,1,14,fp); fread(libmagic,1,14,fp);
if (strcmp(libmagic, magic)) if(strcmp(libmagic,magic)) {
{ printf(translate(20),edivrun_lib); /* formato incorrecto de edivrun.lib */
print_translate(20, edivrun_lib); /* formato incorrecto de edivrun.lib */
fclose(fp); fclose(fp);
exit(1); exit(1);
} }
else else {
{
fread(&stub_size,1,4,fp); fread(&stub_size,1,4,fp);
fclose(fp); fclose(fp);
#ifdef _DEBUG #ifdef _DEBUG
@ -318,8 +284,7 @@ int main(int argc, char *argv[])
} }
} }
if (!ini) if(!ini) {
{
/* Valores de las opciones por defecto */ /* Valores de las opciones por defecto */
max_process=0; max_process=0;
ignore_errors=0; ignore_errors=0;
@ -332,9 +297,7 @@ int main(int argc, char *argv[])
hacer_strfix=1; hacer_strfix=1;
optimizar=1; optimizar=1;
case_sensitive=0; case_sensitive=0;
} } else {
else
{
max_process=iniparser_getint(ini,"default_compiler_options:max_process",0); max_process=iniparser_getint(ini,"default_compiler_options:max_process",0);
ignore_errors=iniparser_getboolean(ini,"default_compiler_options:ignore_errors",0); ignore_errors=iniparser_getboolean(ini,"default_compiler_options:ignore_errors",0);
free_sintax=iniparser_getboolean(ini,"default_compiler_options:free_sintax",0); free_sintax=iniparser_getboolean(ini,"default_compiler_options:free_sintax",0);
@ -349,6 +312,7 @@ int main(int argc, char *argv[])
case_sensitive=iniparser_getboolean(ini,"default_compiler_options:case_sensitive",0); case_sensitive=iniparser_getboolean(ini,"default_compiler_options:case_sensitive",0);
if(iniparser_getboolean(ini,"default_compiler_options:no_check",0)) if(iniparser_getboolean(ini,"default_compiler_options:no_check",0))
comprueba_rango=comprueba_id=comprueba_null=0; comprueba_rango=comprueba_id=comprueba_null=0;
} }
prepara_compilacion(); prepara_compilacion();
@ -360,20 +324,21 @@ int main(int argc, char *argv[])
printf("edivc: Finalizado - %d advertencias, %d errores\n",n_warnings,n_errors); printf("edivc: Finalizado - %d advertencias, %d errores\n",n_warnings,n_errors);
#else #else
if(n_errors) if(n_errors)
print_translate(21, n_warnings); printf(translate(21),n_warnings);
else else
print_translate(22, n_warnings); printf(translate(22),n_warnings);
#endif #endif
if(n_errors==0) if(n_errors==0)
return 0; return 0;
else else {
{ printf(translate(23));
print_translate(23);
return 2; return 2;
} }
} }
/* /*
* void *e_malloc(size_t size) * void *e_malloc(size_t size)
* Idéntico a malloc, pero con errormsg automático * Idéntico a malloc, pero con errormsg automático
@ -385,9 +350,8 @@ void *e_malloc(size_t size)
{ {
void* ret; void* ret;
if (!(ret = malloc(size))) if(!(ret = malloc(size))) {
{ printf(translate(24)); /* memoria insuficiente */
print_translate(24); /* memoria insuficiente */
exit(1); exit(1);
} }
@ -396,8 +360,7 @@ void *e_malloc(size_t size)
void e_free(void *puntero) void e_free(void *puntero)
{ {
if (puntero) if (puntero) {
{
free(puntero); free(puntero);
puntero=NULL; puntero=NULL;
} }
@ -405,38 +368,24 @@ void e_free(void *puntero)
void errormem() void errormem()
{ {
print_translate(24); printf(translate(24));
exit(1); exit(1);
} }
/* /*
* Gestión de errores * Gestión de errores
*/ */
int _le,_t; int _le,_t;
byte *_ie; byte *_ie;
void save_error(word tipo) void save_error(word tipo) { /* Guarda una posicion de error (de 0 .. 3) */
{ /* Guarda una posicion de error (de 0 .. 3) */ switch(tipo) {
switch (tipo) case 0: _le=linea; _ie=ierror; break;
{ case 1: _le=old_linea; _ie=old_ierror_end; break;
case 0: case 2: _le=old_linea; _ie=old_ierror; break;
_le = linea; case 3: _le=old_linea; _ie=old_ierror_end; break;
_ie = ierror; } _t=tipo;
break;
case 1:
_le = old_linea;
_ie = old_ierror_end;
break;
case 2:
_le = old_linea;
_ie = old_ierror;
break;
case 3:
_le = old_linea;
_ie = old_ierror_end;
break;
}
_t = tipo;
} }
/* /*
@ -453,54 +402,28 @@ void error(word tipo, word num, ...)
byte *_p,*p; byte *_p,*p;
va_list opparam; va_list opparam;
switch (tipo) switch(tipo) {
{ case 0: linea_error=linea; p=ierror; break;
case 0: case 1: linea_error=old_linea; _p=p=old_ierror_end; break;
linea_error = linea; case 2: linea_error=old_linea; p=old_ierror; break;
p = ierror; case 3: linea_error=old_linea; _p=p=old_ierror_end; break;
break; case 4: linea_error=_le; _p=p=_ie; tipo=_t; break;
case 1:
linea_error = old_linea;
_p = p = old_ierror_end;
break;
case 2:
linea_error = old_linea;
p = old_ierror;
break;
case 3:
linea_error = old_linea;
_p = p = old_ierror_end;
break;
case 4:
linea_error = _le;
_p = p = _ie;
tipo = _t;
break;
} }
if (num != 2 && num != 6) if (num!=2 && num!=6) {
{ while (--p>=prog) {
while (--p >= prog) if (*p==lf || (*p==cr && *(p+1)==lf)) break;
{
if (*p == lf || (*p == cr && *(p + 1) == lf))
break;
columna++; columna++;
} }
if (p < prog) if (p<prog) columna++;
columna++;
} }
if (tipo == 1) if (tipo==1) {
{ if (*(_p+1)==' ' || *(_p+1)==cr || *(_p+1)==lf) columna++; columna++;
if (*(_p + 1) == ' ' || *(_p + 1) == cr || *(_p + 1) == lf) } else if (tipo==3) columna++;
columna++;
columna++;
}
else if (tipo == 3)
columna++;
va_start(opparam,num); va_start(opparam,num);
print_translate(25, fichero_prg, linea_error, columna, num); printf(translate(25), fichero_prg, linea_error, columna, num);
vprintf(translate_error(num),opparam); vprintf(translate_error(num),opparam);
printf("\n"); printf("\n");
@ -510,13 +433,12 @@ void error(word tipo, word num, ...)
if(n_errors>20) if(n_errors>20)
printf("Demasiados errores. Compilación interrumpida.\n"); printf("Demasiados errores. Compilación interrumpida.\n");
if (num == 1 || num == 2 || num == 6 || n_errors > 20) if(num==1 || num==2 || num==6 || n_errors>20) {
{
printf("edivc: Finalizado - %d advertencias, %d errores\n",n_warnings,n_errors); printf("edivc: Finalizado - %d advertencias, %d errores\n",n_warnings,n_errors);
#else #else
print_translate(21, n_warnings); printf(translate(21),n_warnings);
#endif #endif
print_translate(23); printf(translate(23));
exit(2); exit(2);
#ifdef MULTI_ERROR #ifdef MULTI_ERROR
} }
@ -528,7 +450,7 @@ void warning(int num, ...)
va_list opparam; va_list opparam;
va_start(opparam,num); va_start(opparam,num);
print_translate(26, fichero_prg, linea); printf(translate(26), fichero_prg, linea);
vprintf(translate_warning(num),opparam); vprintf(translate_warning(num),opparam);
printf("\n"); printf("\n");
n_warnings++; n_warnings++;
@ -543,23 +465,18 @@ void muestra_motd()
char* motdserver=NULL; char* motdserver=NULL;
char* motdpath=NULL; char* motdpath=NULL;
if (ini) if(ini) {
{
motdserver=iniparser_getstr(ini,"general:motd_host"); motdserver=iniparser_getstr(ini,"general:motd_host");
motdpath=iniparser_getstr(ini,"general:motd_path"); motdpath=iniparser_getstr(ini,"general:motd_path");
if (!motdserver) if(!motdserver) {
{ printf(translate(49)); /* el servidor de motd debe estar en ediv.cfg */
print_translate(49); /* el servidor de motd debe estar en ediv.cfg */
exit(1); exit(1);
} }
if (!motdpath) if(!motdpath) motdpath="/ediv/actual/motd.txt";
motdpath = "/ediv/actual/motd.txt";
conecta(motdserver,motdpath); conecta(motdserver,motdpath);
exit(0); exit(0);
} } else {
else printf(translate(49)); /* el servidor de motd debe estar en ediv.cfg */
{
print_translate(49); /* el servidor de motd debe estar en ediv.cfg */
exit(1); exit(1);
} }
} }
@ -580,16 +497,14 @@ void conecta(char *servidor, char *archivo)
else else
htent=gethostbyaddr((const char *)&iahost,sizeof(struct in_addr),AF_INET); htent=gethostbyaddr((const char *)&iahost,sizeof(struct in_addr),AF_INET);
if (htent == NULL) if (htent==NULL) {
{
sock_error("gethostbyname()"); sock_error("gethostbyname()");
return; return;
} }
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sock == INVALID_SOCKET) if (sock==INVALID_SOCKET) {
{
sock_error("socket()"); sock_error("socket()");
return; return;
} }
@ -604,8 +519,7 @@ void conecta(char *servidor, char *archivo)
sin.sin_addr=*(struct in_addr *)*htent->h_addr_list; sin.sin_addr=*(struct in_addr *)*htent->h_addr_list;
status=connect(sock,(struct sockaddr *)&sin,sizeof(sin)); status=connect(sock,(struct sockaddr *)&sin,sizeof(sin));
if (status == SOCKET_ERROR) if (status==SOCKET_ERROR) {
{
sock_error("connect()"); sock_error("connect()");
closesocket(sock); closesocket(sock);
return; return;
@ -617,8 +531,8 @@ void conecta(char *servidor, char *archivo)
"Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*\n" "Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*\n"
"Accept-Language: es\nAccept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\n" "Accept-Language: es\nAccept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\n"
"Connection: Keep-Alive\n" "Connection: Keep-Alive\n"
"\n", "\n"
archivo, servidor); ,archivo,servidor);
#ifdef DEBUG_HTTP #ifdef DEBUG_HTTP
printf("GET %s HTTP/1.1\n" printf("GET %s HTTP/1.1\n"
@ -627,68 +541,59 @@ void conecta(char *servidor, char *archivo)
"Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*\n" "Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*\n"
"Accept-Language: es\nAccept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\n" "Accept-Language: es\nAccept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\n"
"Connection: Keep-Alive\n" "Connection: Keep-Alive\n"
"\n", "\n"
archivo, servidor); ,archivo,servidor);
#endif #endif
status=send(sock,buffer,strlen(buffer),0); status=send(sock,buffer,strlen(buffer),0);
if (status == SOCKET_ERROR) if (status==SOCKET_ERROR) {
{
sock_error("send()"); sock_error("send()");
closesocket(sock); closesocket(sock);
return; return;
} }
status=recv(sock,buffer,sizeof(buffer),0); status=recv(sock,buffer,sizeof(buffer),0);
if (status == SOCKET_ERROR) if (status == SOCKET_ERROR) {
{
sock_error("recv()"); sock_error("recv()");
} }
closesocket(sock); closesocket(sock);
if (*(buffer + 9) != '2' || *(buffer + 10) != '0' || *(buffer + 10) != '0') if(*(buffer+9)!='2' || *(buffer+10)!='0' || *(buffer+10)!='0') {
{
*strchr(buffer,0x0d)=0; *strchr(buffer,0x0d)=0;
printf("%s\n",buffer); printf("%s\n",buffer);
exit(1); exit(1);
} }
size=strstr(buffer,"Content-Type: "); size=strstr(buffer,"Content-Type: ");
if (!size) if(!size) {
{ printf(translate(50));
print_translate(50);
exit(1); exit(1);
} }
size+=14; size+=14;
*(ras=strchr(size,0x0d))=0; *(ras=strchr(size,0x0d))=0;
if (strcmp(size, "text/plain")) if(strcmp(size,"text/plain")) {
{ printf(translate(50));
print_translate(50);
exit(1); exit(1);
} }
*ras=0x0d; *ras=0x0d;
size=strstr(buffer,"Content-Length: "); size=strstr(buffer,"Content-Length: ");
if (!size) if(!size) {
{ printf(translate(50));
print_translate(50);
exit(1); exit(1);
} }
size+=16; size+=16;
ras=strchr(size,0x0d)-1; ras=strchr(size,0x0d)-1;
content=strstr(size,"\x0d\x0a\x0d\x0a")+4; content=strstr(size,"\x0d\x0a\x0d\x0a")+4;
tam = 0; tam=0; inc=1;
inc = 1; for(;ras>=size;ras--) {
for (; ras >= size; ras--)
{
if (*ras>='0' && *ras<='9') if (*ras>='0' && *ras<='9')
tam+=(*ras-'0')*inc; tam+=(*ras-'0')*inc;
else else
break; break;
inc*=10; inc*=10;
} }
if (tam > 1024) if(tam>1024) tam=1024;
tam = 1024;
fwrite(content, tam, 1, stdout); fwrite(content, tam, 1, stdout);
} }

View file

@ -41,28 +41,29 @@ int numparams;
byte decl_struct=0; /* 1 si se está declarando un struct */ byte decl_struct=0; /* 1 si se está declarando un struct */
byte struct_reserved=0; /* 1 si se está declarando la estructura reserved */ byte struct_reserved=0; /* 1 si se está declarando la estructura reserved */
/* Errores específicos en la ejecución de una DLL */ /* Errores específicos en la ejecución de una DLL */
void dll_error(int error, ...) void dll_error(int error, ...)
{ {
va_list opparam; va_list opparam;
va_start(opparam,error); va_start(opparam,error);
print_translate(35, fichdll); printf(translate(35), fichdll);
vprintf(translate_dll_error(error-1),opparam); vprintf(translate_dll_error(error-1),opparam);
printf("\n"); printf("\n");
n_errors++; n_errors++;
} }
int EDIV_Export(char* cadena, int nparam, void* hfuncion) int EDIV_Export(char* cadena, int nparam, void* hfuncion)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
if (nparam < 0) if(nparam<0) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -73,20 +74,17 @@ int EDIV_Export(char *cadena, int nparam, void *hfuncion)
printf("export_function:\t-- ID FUNCION: %d\n" printf("export_function:\t-- ID FUNCION: %d\n"
"export_function:\tCadena exportada: %s\n" "export_function:\tCadena exportada: %s\n"
"export_function:\tN. parametros: %d\n" "export_function:\tN. parametros: %d\n"
"export_function:\tOffset de la funcion: 0x%X\n", "export_function:\tOffset de la funcion: 0x%X\n",n_externs,cadena,nparam,(unsigned int)hfuncion);
n_externs, cadena, nparam, (unsigned int)hfuncion);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -100,6 +98,7 @@ int EDIV_Export(char *cadena, int nparam, void *hfuncion)
return 1; return 1;
} }
int EDIV_Export_Entrypoint(int ep, void* hfuncion) int EDIV_Export_Entrypoint(int ep, void* hfuncion)
{ {
entrypoints[n_entrypoints].tipo=ep; entrypoints[n_entrypoints].tipo=ep;
@ -108,16 +107,17 @@ int EDIV_Export_Entrypoint(int ep, void *hfuncion)
return 0; return 0;
} }
int EDIV_Export_Priority(int priority) int EDIV_Export_Priority(int priority)
{ {
dlls[numdlls].prioridad=priority; dlls[numdlls].prioridad=priority;
return 0; return 0;
} }
int EDIV_Export_Const(char* cadena, int valor) int EDIV_Export_Const(char* cadena, int valor)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -128,20 +128,17 @@ int EDIV_Export_Const(char *cadena, int valor)
printf("export_const:\t-- ID OBJETO: %d\n" printf("export_const:\t-- ID OBJETO: %d\n"
"export_const:\tCadena exportada: %s\n" "export_const:\tCadena exportada: %s\n"
"export_const:\tValor: %d\n" "export_const:\tValor: %d\n"
"export_const:\tOffset del objeto: 0x%X\n", "export_const:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,valor,(unsigned int)o);
num_obj - 1, cadena, valor, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -153,10 +150,10 @@ int EDIV_Export_Const(char *cadena, int valor)
return 1; return 1;
} }
int EDIV_Export_Global(char* cadena, int valor) int EDIV_Export_Global(char* cadena, int valor)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -167,20 +164,17 @@ int EDIV_Export_Global(char *cadena, int valor)
printf("export_global:\t-- ID OBJETO: %d\n" printf("export_global:\t-- ID OBJETO: %d\n"
"export_global:\tCadena exportada: %s\n" "export_global:\tCadena exportada: %s\n"
"export_global:\tValor: %d\n" "export_global:\tValor: %d\n"
"export_global:\tOffset del objeto: 0x%X\n", "export_global:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,valor,(unsigned int)o);
num_obj - 1, cadena, valor, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -194,10 +188,10 @@ int EDIV_Export_Global(char *cadena, int valor)
return imem++; return imem++;
} }
int EDIV_Export_Global_Tab(char* cadena, int numregs) int EDIV_Export_Global_Tab(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -208,20 +202,17 @@ int EDIV_Export_Global_Tab(char *cadena, int numregs)
printf("export_global_tab:\t-- ID OBJETO: %d\n" printf("export_global_tab:\t-- ID OBJETO: %d\n"
"export_global_tab:\tCadena exportada: %s\n" "export_global_tab:\tCadena exportada: %s\n"
"export_global_tab:\tN.regs: %d\n" "export_global_tab:\tN.regs: %d\n"
"export_global_tab:\tOffset del objeto: 0x%X\n", "export_global_tab:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
num_obj - 1, cadena, numregs, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -236,18 +227,17 @@ int EDIV_Export_Global_Tab(char *cadena, int numregs)
ob->tglo.totalen=len+1; ob->tglo.totalen=len+1;
/* Inicializamos la tabla a 0 */ /* Inicializamos la tabla a 0 */
do do {
{
mem[imem++]=0; mem[imem++]=0;
} while (len--); } while (len--);
return ob->tglo.offset; return ob->tglo.offset;
} }
int EDIV_Export_Global_Struct(char* cadena, int numregs) int EDIV_Export_Global_Struct(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -258,20 +248,17 @@ int EDIV_Export_Global_Struct(char *cadena, int numregs)
printf("export_global_struct:\t-- ID OBJETO: %d\n" printf("export_global_struct:\t-- ID OBJETO: %d\n"
"export_global_struct:\tCadena exportada: %s\n" "export_global_struct:\tCadena exportada: %s\n"
"export_global_struct:\tN.regs: %d\n" "export_global_struct:\tN.regs: %d\n"
"export_global_struct:\tOffset del objeto: 0x%X\n", "export_global_struct:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
num_obj - 1, cadena, numregs, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -292,10 +279,10 @@ int EDIV_Export_Global_Struct(char *cadena, int numregs)
return imem; return imem;
} }
int EDIV_Export_Member_Int(char* cadena, int valor) int EDIV_Export_Member_Int(char* cadena, int valor)
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(7,cadena); dll_error(7,cadena);
return 0; return 0;
} }
@ -306,34 +293,29 @@ int EDIV_Export_Member_Int(char *cadena, int valor)
printf("export_member_int:\t-- ID OBJETO: %d\n" printf("export_member_int:\t-- ID OBJETO: %d\n"
"export_member_int:\tCadena exportada: %s\n" "export_member_int:\tCadena exportada: %s\n"
"export_member_int:\tValor: %d\n" "export_member_int:\tValor: %d\n"
"export_member_int:\tOffset del objeto: 0x%X\n", "export_member_int:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,valor,(unsigned int)o);
num_obj - 1, cadena, valor, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob2=o; ob2=o;
if ((*ob2).tipo != tnone) if ((*ob2).tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
if (ob->tipo == tsglo) if(ob->tipo==tsglo) { /* int miembro de struct global */
{ /* int miembro de struct global */
(*ob2).tipo=tvglo; (*ob2).tipo=tvglo;
(*ob2).vglo.offset=len++; (*ob2).vglo.offset=len++;
mem[imem]=valor; mem[imem]=valor;
ob->sglo.len_item++; ob->sglo.len_item++;
return imem++; return imem++;
} }
else else { /* int miembro de struct local */
{ /* int miembro de struct local */
if(struct_reserved) if(struct_reserved)
indexa_variable(v_reserved,cadena,iloc); indexa_variable(v_reserved,cadena,iloc);
(*ob2).tipo=tvloc; (*ob2).tipo=tvloc;
@ -344,10 +326,10 @@ int EDIV_Export_Member_Int(char *cadena, int valor)
} }
} }
int EDIV_Export_Member_Str(char* cadena, int tamano) int EDIV_Export_Member_Str(char* cadena, int tamano)
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(7,cadena); dll_error(7,cadena);
return 0; return 0;
} }
@ -358,37 +340,31 @@ int EDIV_Export_Member_Str(char *cadena, int tamano)
printf("export_member_str:\t-- ID OBJETO: %d\n" printf("export_member_str:\t-- ID OBJETO: %d\n"
"export_member_str:\tCadena exportada: %s\n" "export_member_str:\tCadena exportada: %s\n"
"export_member_str:\tTamano: %d\n" "export_member_str:\tTamano: %d\n"
"export_member_str:\tOffset del objeto: 0x%X\n", "export_member_str:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,tamano,(unsigned int)o);
num_obj - 1, cadena, tamano, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob2=o; ob2=o;
if ((*ob2).tipo != tnone) if ((*ob2).tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
if (ob->tipo == tsglo) if(ob->tipo==tsglo) { /* string miembro de struct global */
{ /* string miembro de struct global */
(*ob2).tipo=tcglo; (*ob2).tipo=tcglo;
(*ob2).cglo.offset=len+1; (*ob2).cglo.offset=len+1;
if (((*ob2).cglo.totalen = tamano) < 0) if (((*ob2).cglo.totalen=tamano)<0) {
{
dll_error(8,cadena); dll_error(8,cadena);
return 0; return 0;
} }
if ((*ob2).cglo.totalen > 0xFFFFF) if ((*ob2).cglo.totalen>0xFFFFF) {
{
dll_error(8,cadena); dll_error(8,cadena);
return 0; return 0;
} }
@ -401,19 +377,16 @@ int EDIV_Export_Member_Str(char *cadena, int tamano)
return (*ob2).cglo.offset; return (*ob2).cglo.offset;
} }
else else { /* string miembro de struct local */
{ /* string miembro de struct local */
(*ob2).tipo=tcloc; (*ob2).tipo=tcloc;
(*ob2).cloc.offset=len+1; (*ob2).cloc.offset=len+1;
if (((*ob2).cloc.totalen = tamano) < 0) if (((*ob2).cloc.totalen=tamano)<0) {
{
dll_error(8,cadena); dll_error(8,cadena);
return 0; return 0;
} }
if ((*ob2).cloc.totalen > 0xFFFFF) if ((*ob2).cloc.totalen>0xFFFFF) {
{
dll_error(8,cadena); dll_error(8,cadena);
return 0; return 0;
} }
@ -428,10 +401,10 @@ int EDIV_Export_Member_Str(char *cadena, int tamano)
} }
} }
int EDIV_Export_Member_Tab(char* cadena, int numregs) int EDIV_Export_Member_Tab(char* cadena, int numregs)
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(7,cadena); dll_error(7,cadena);
return 0; return 0;
} }
@ -442,26 +415,22 @@ int EDIV_Export_Member_Tab(char *cadena, int numregs)
printf("export_member_tab:\t-- ID OBJETO: %d\n" printf("export_member_tab:\t-- ID OBJETO: %d\n"
"export_member_tab:\tCadena exportada: %s\n" "export_member_tab:\tCadena exportada: %s\n"
"export_member_tab:\tN.regs: %d\n" "export_member_tab:\tN.regs: %d\n"
"export_member_tab:\tOffset del objeto: 0x%X\n", "export_member_tab:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
num_obj - 1, cadena, numregs, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob2=o; ob2=o;
if ((*ob2).tipo != tnone) if ((*ob2).tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
if (ob->tipo == tsglo) if(ob->tipo==tsglo) { /* array miembro de struct global */
{ /* array miembro de struct global */
(*ob2).tipo=ttglo; (*ob2).tipo=ttglo;
(*ob2).tglo.offset=len; (*ob2).tglo.offset=len;
(*ob2).tglo.len1=numregs; (*ob2).tglo.len1=numregs;
@ -475,8 +444,7 @@ int EDIV_Export_Member_Tab(char *cadena, int numregs)
return (*ob2).tglo.offset; return (*ob2).tglo.offset;
} }
else else { /* array miembro de struct local */
{ /* array miembro de struct local */
if(struct_reserved) if(struct_reserved)
indexa_variable(v_reserved,cadena,iloc); indexa_variable(v_reserved,cadena,iloc);
(*ob2).tipo=ttloc; (*ob2).tipo=ttloc;
@ -494,10 +462,10 @@ int EDIV_Export_Member_Tab(char *cadena, int numregs)
} }
} }
int EDIV_Export_EndStruct() int EDIV_Export_EndStruct()
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(9); dll_error(9);
return 0; return 0;
} }
@ -508,35 +476,27 @@ int EDIV_Export_EndStruct()
member=NULL; member=NULL;
if (ob->tipo == tsglo) if(ob->tipo==tsglo) { /* cierra estructura global */
{ /* cierra estructura global */ if (ob->sglo.len_item==0) {
if (ob->sglo.len_item == 0)
{
dll_error(10); dll_error(10);
return 0; return 0;
} }
if (ob->sglo.totalitems > 1) if (ob->sglo.totalitems>1) {
{
len=(ob->sglo.totalitems-1)*ob->sglo.len_item-1; len=(ob->sglo.totalitems-1)*ob->sglo.len_item-1;
do do {
{
mem[imem]=mem[imem-ob->sglo.len_item]; mem[imem]=mem[imem-ob->sglo.len_item];
imem++; imem++;
} while (len--); } while (len--);
} }
} }
else else { /* cierra estructura local */
{ /* cierra estructura local */ if (ob->sloc.len_item==0) {
if (ob->sloc.len_item == 0)
{
dll_error(10); dll_error(10);
return 0; return 0;
} }
if (ob->sloc.totalitems > 1) if (ob->sloc.totalitems>1) {
{
len=(ob->sloc.totalitems-1)*ob->sloc.len_item-1; len=(ob->sloc.totalitems-1)*ob->sloc.len_item-1;
do do {
{
loc[iloc]=loc[iloc-ob->sloc.len_item]; loc[iloc]=loc[iloc-ob->sloc.len_item];
iloc++; iloc++;
} while (len--); } while (len--);
@ -549,10 +509,10 @@ int EDIV_Export_EndStruct()
return 1; return 1;
} }
int EDIV_Export_Local(char* cadena, int valor) int EDIV_Export_Local(char* cadena, int valor)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -563,20 +523,17 @@ int EDIV_Export_Local(char *cadena, int valor)
printf("export_local:\t-- ID OBJETO: %d\n" printf("export_local:\t-- ID OBJETO: %d\n"
"export_local:\tCadena exportada: %s\n" "export_local:\tCadena exportada: %s\n"
"export_local:\tValor: %d\n" "export_local:\tValor: %d\n"
"export_local:\tOffset del objeto: 0x%X\n", "export_local:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,valor,(unsigned int)o);
num_obj - 1, cadena, valor, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -590,10 +547,10 @@ int EDIV_Export_Local(char *cadena, int valor)
return iloc++; return iloc++;
} }
int EDIV_Export_Local_Tab(char* cadena, int numregs) int EDIV_Export_Local_Tab(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -604,20 +561,17 @@ int EDIV_Export_Local_Tab(char *cadena, int numregs)
printf("export_local_tab:\t-- ID OBJETO: %d\n" printf("export_local_tab:\t-- ID OBJETO: %d\n"
"export_local_tab:\tCadena exportada: %s\n" "export_local_tab:\tCadena exportada: %s\n"
"export_local_tab:\tN.regs: %d\n" "export_local_tab:\tN.regs: %d\n"
"export_local_tab:\tOffset del objeto: 0x%X\n", "export_local_tab:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
num_obj - 1, cadena, numregs, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
@ -632,18 +586,17 @@ int EDIV_Export_Local_Tab(char *cadena, int numregs)
ob->tloc.totalen=len+1; ob->tloc.totalen=len+1;
/* Inicializamos la tabla a 0 */ /* Inicializamos la tabla a 0 */
do do {
{
loc[iloc++]=0; loc[iloc++]=0;
} while (len--); } while (len--);
return ob->tloc.offset; return ob->tloc.offset;
} }
int EDIV_Export_Local_Struct(char* cadena, int numregs) int EDIV_Export_Local_Struct(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -654,31 +607,26 @@ int EDIV_Export_Local_Struct(char *cadena, int numregs)
printf("export_local_struct:\t-- ID OBJETO: %d\n" printf("export_local_struct:\t-- ID OBJETO: %d\n"
"export_local_struct:\tCadena exportada: %s\n" "export_local_struct:\tCadena exportada: %s\n"
"export_local_struct:\tN.regs: %d\n" "export_local_struct:\tN.regs: %d\n"
"export_local_struct:\tOffset del objeto: 0x%X\n", "export_local_struct:\tOffset del objeto: 0x%X\n",num_obj-1,cadena,numregs,(unsigned int)o);
num_obj - 1, cadena, numregs, (unsigned int)o);
#endif #endif
if (creaobj) if(creaobj) {
{
dll_error(creaobj,cadena); dll_error(creaobj,cadena);
return 0; return 0;
} }
ob=o; ob=o;
if (ob->tipo != tnone) if (ob->tipo!=tnone) {
{
dll_error(5,cadena); dll_error(5,cadena);
return 0; return 0;
} }
decl_struct=1; decl_struct=1;
if (!strcmp(cadena, "reserved")) if(!strcmp(cadena,"reserved")) {
{
struct_reserved=1; struct_reserved=1;
} }
else else {
{
indexa_variable(v_local,cadena,iloc); indexa_variable(v_local,cadena,iloc);
} }

View file

@ -110,7 +110,7 @@ void _encriptar(int encode, char * fichero, char * clave)
fseek(f,0,SEEK_END); fseek(f,0,SEEK_END);
size=ftell(f); size=ftell(f);
if ((ptr=malloc(size))!=NULL) { if ((ptr=(byte *)malloc(size))!=NULL) {
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
if(fread(ptr,1,size,f) ==(unsigned int) size) { if(fread(ptr,1,size,f) ==(unsigned int) size) {
fclose(f); fclose(f);
@ -181,7 +181,7 @@ void _comprimir(int encode, char *fichero) {
fseek(f,0,SEEK_END); fseek(f,0,SEEK_END);
size=ftell(f); size=ftell(f);
if ((ptr=malloc(size))!=NULL) { if ((ptr=(byte *)malloc(size))!=NULL) {
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
if(fread(ptr,1,size,f) == size) { if(fread(ptr,1,size,f) == size) {
@ -203,7 +203,7 @@ void _comprimir(int encode, char *fichero) {
return; return;
size2=size+size/100+256; size2=size+size/100+256;
if ((ptr_dest=malloc(size2))==NULL) { if ((ptr_dest=(byte *)malloc(size2))==NULL) {
e_free(ptr); e_free(ptr);
return; return;
} }
@ -226,7 +226,7 @@ void _comprimir(int encode, char *fichero) {
size2=*(int*)(ptr+8); size2=*(int*)(ptr+8);
if ((ptr_dest=malloc(size2))==NULL) { if ((ptr_dest=(byte *)malloc(size2))==NULL) {
e_free(ptr); e_free(ptr);
return; return;
} }

File diff suppressed because it is too large Load diff

View file

@ -18,19 +18,18 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#ifdef _WIN32 #ifdef _WIN32
# include <windows.h> # include <windows.h>
#else #else
# include <stdlib.h> # include <stdlib.h>
# include <string.h> # include <string.h>
#include <stdarg.h>
#endif #endif
#include "shared.h" #include "shared.h"
#include "language.h" #include "language.h"
#include "edivcfg/iniparser.h" #include "edivcfg/iniparser.h"
static char *ediv_strlwr(char *str);
int detecta_idioma_iso(char* lang) int detecta_idioma_iso(char* lang)
{ {
@ -43,27 +42,23 @@ int detecta_idioma_iso(char *lang)
"ca", /* catalán */ "ca", /* catalán */
"eu" /* euskera */ "eu" /* euskera */
}; };
if (lang == NULL) if(lang==NULL) return DEFAULT_LANGUAGE;
return DEFAULT_LANGUAGE; if(strlen(lang)>2) lang[2]=0;
if (strlen(lang) > 2) strlwr(lang);
lang[2] = 0;
ediv_strlwr(lang);
for(i=0;i<NUM_LANGUAGES;i++) for(i=0;i<NUM_LANGUAGES;i++)
if(lang[0]==getid[i][0]) if(lang[0]==getid[i][0])
if(lang[1]==getid[i][1]) if(lang[1]==getid[i][1])
break; break;
if (i == NUM_LANGUAGES) if(i==NUM_LANGUAGES) i=DEFAULT_LANGUAGE;
i = DEFAULT_LANGUAGE;
return i; return i;
} }
int detecta_idioma() int detecta_idioma()
{ {
char* langcfg=NULL; char* langcfg=NULL;
if (ini != NULL) if (ini!=NULL) langcfg=iniparser_getstr(ini,"general:lang");
langcfg = iniparser_getstr(ini, "general:lang"); if(langcfg==NULL) {
if (langcfg == NULL)
{
#ifdef _WIN32 #ifdef _WIN32
int i; int i;
static int getid[NUM_LANGUAGES] = { static int getid[NUM_LANGUAGES] = {
@ -78,23 +73,19 @@ int detecta_idioma()
lang=GetSystemDefaultLangID()&0xff; lang=GetSystemDefaultLangID()&0xff;
for(i=0;i<NUM_LANGUAGES;i++) for(i=0;i<NUM_LANGUAGES;i++)
if (lang == getid[i]) if(lang==getid[i]) break;
break; if(i==NUM_LANGUAGES) i=DEFAULT_LANGUAGE;
if (i == NUM_LANGUAGES)
i = DEFAULT_LANGUAGE;
return i; return i;
#else #else
langcfg=getenv("LANG"); langcfg=getenv("LANG");
if (langcfg == NULL) if(langcfg==NULL) return DEFAULT_LANGUAGE;
return DEFAULT_LANGUAGE; else return detecta_idioma_iso(langcfg);
else
return detecta_idioma_iso(langcfg);
#endif #endif
} }
else else return detecta_idioma_iso(langcfg);
return detecta_idioma_iso(langcfg);
} }
char* translate_error(int num) char* translate_error(int num)
{ {
@ -143,6 +134,7 @@ char *translate_ltlex_error(int num)
return e[idioma][num]; return e[idioma][num];
} }
char* translate(int num) char* translate(int num)
{ {
static char *e[NUM_LANGUAGES][74] = { static char *e[NUM_LANGUAGES][74] = {
@ -153,45 +145,3 @@ char *translate(int num)
}; };
return e[idioma][num]; return e[idioma][num];
} }
void print_translate(int num, ...)
{
va_list arg_ptr;
const char *message = translate(num);
size_t msglen = strlen(message);
char *strbuf = malloc(msglen + 1);
va_start(arg_ptr, message);
vsprintf(strbuf, message, arg_ptr);
va_end(arg_ptr);
printf("%s", strbuf);
free(strbuf);
}
const char *get_translate(int num, ...)
{
va_list arg_ptr;
const char *message = translate(num);
size_t msglen = strlen(message);
char *strbuf = malloc(msglen + 1);
va_start(arg_ptr, message);
vsprintf(strbuf, message, arg_ptr);
va_end(arg_ptr);
return strbuf;
}
static char *ediv_strlwr(char *str)
{
unsigned char *p = (unsigned char *)str;
while (*p)
{
*p = tolower((unsigned char)*p);
p++;
}
return str;
}

View file

@ -36,275 +36,174 @@ void listado_objetos(void)
FILE * sta; FILE * sta;
char nombretab[256]; char nombretab[256];
int n,o,l; int n,o,l;
char *msg_37 = get_translate(27, fichero_prg);
strcpy(nombretab,nombreprog); strcpy(nombretab,nombreprog);
strcat(nombretab,".tab"); strcat(nombretab,".tab");
if ((sta = fopen(nombretab, "w")) == NULL) if((sta=fopen(nombretab,"w"))==NULL) {
{ printf(translate(36),nombretab);
print_translate(36, nombretab);
exit(1); exit(1);
} }
fprintf(sta, msg_37); fprintf(sta,translate(37),fichero_prg);
free(msg_37);
for (n = 1; n <= 8; n++) for (n=1;n<=8;n++) fprintf(sta,"[%u]: %u\n",n,mem[n]); fprintf(sta,"\n");
fprintf(sta, "[%u]: %u\n", n, mem[n]);
fprintf(sta, "\n");
for (n = 0; n < num_obj; n++) for (n=0;n<num_obj;n++) {
{ switch(obj[n].tipo) {
switch (obj[n].tipo) case tnone: fprintf(sta,"%5u\ttnone: %s",n,obj[n].name);
{ if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
case tnone:
fprintf(sta, "%5u\ttnone: %s", n, obj[n].name);
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
break; break;
case tcons: case tcons: fprintf(sta,"%5u\ttcons: %s",n,obj[n].name);
fprintf(sta, "%5u\ttcons: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\tvalor=%u\n",obj[n].cons.valor); fprintf(sta,"\tvalor=%u\n",obj[n].cons.valor);
break; break;
case tvglo: case tvglo: fprintf(sta,"%5u\ttvglo: %s",n,obj[n].name);
fprintf(sta, "%5u\ttvglo: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].vglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].vglo.offset);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name); else fprintf(sta,"\tvalor=%u\n",mem[o]);
else
fprintf(sta, "\tvalor=%u\n", mem[o]);
break; break;
case ttglo: case ttglo: fprintf(sta,"%5u\tttglo: %s",n,obj[n].name);
fprintf(sta, "%5u\tttglo: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].tglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].tglo.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].tglo.len1); fprintf(sta,"\tlen1=%u\n",obj[n].tglo.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].tglo.len2); fprintf(sta,"\tlen2=%u\n",obj[n].tglo.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].tglo.len3); fprintf(sta,"\tlen3=%u\n",obj[n].tglo.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].tglo.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].tglo.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tpbgl: case tpbgl: case tpwgl: case tpcgl:
case tpwgl: case tpigl: fprintf(sta,"%5u\ttp?gl: %s",n,obj[n].name);
case tpcgl: if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
case tpigl:
fprintf(sta, "%5u\ttp?gl: %s", n, obj[n].name);
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].tglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].tglo.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].tglo.len1); fprintf(sta,"\tlen1=%u\n",obj[n].tglo.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].tglo.len2); fprintf(sta,"\tlen2=%u\n",obj[n].tglo.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].tglo.len3); fprintf(sta,"\tlen3=%u\n",obj[n].tglo.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].tglo.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].tglo.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tsglo: case tsglo: fprintf(sta,"%5u\ttsglo: %s",n,obj[n].name);
fprintf(sta, "%5u\ttsglo: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].sglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].sglo.offset);
fprintf(sta,"\titems1=%u\n",obj[n].sglo.items1); fprintf(sta,"\titems1=%u\n",obj[n].sglo.items1);
fprintf(sta,"\titems2=%u\n",obj[n].sglo.items2); fprintf(sta,"\titems2=%u\n",obj[n].sglo.items2);
fprintf(sta,"\titems3=%u\n",obj[n].sglo.items3); fprintf(sta,"\titems3=%u\n",obj[n].sglo.items3);
fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sglo.totalitems); fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sglo.totalitems);
fprintf(sta,"\tlen_item=%u\n",obj[n].sglo.len_item); fprintf(sta,"\tlen_item=%u\n",obj[n].sglo.len_item);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tpsgl: case tpsgl: fprintf(sta,"%5u\ttpsgl: %s",n,obj[n].name);
fprintf(sta, "%5u\ttpsgl: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].sglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].sglo.offset);
fprintf(sta,"\titems1=%u\n",obj[n].sglo.items1); fprintf(sta,"\titems1=%u\n",obj[n].sglo.items1);
fprintf(sta,"\titems2=%u\n",obj[n].sglo.items2); fprintf(sta,"\titems2=%u\n",obj[n].sglo.items2);
fprintf(sta,"\titems3=%u\n",obj[n].sglo.items3); fprintf(sta,"\titems3=%u\n",obj[n].sglo.items3);
fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sglo.totalitems); fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sglo.totalitems);
fprintf(sta,"\tlen_item=%u\n",obj[n].sglo.len_item); fprintf(sta,"\tlen_item=%u\n",obj[n].sglo.len_item);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tvloc: case tvloc: fprintf(sta,"%5u\ttvloc: %s",n,obj[n].name);
fprintf(sta, "%5u\ttvloc: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].vloc.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].vloc.offset);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name); else fprintf(sta,"\tvalor=%u\n",loc[o]);
else
fprintf(sta, "\tvalor=%u\n", loc[o]);
break; break;
case ttloc: case ttloc: fprintf(sta,"%5u\tttloc: %s",n,obj[n].name);
fprintf(sta, "%5u\tttloc: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].tloc.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].tloc.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].tloc.len1); fprintf(sta,"\tlen1=%u\n",obj[n].tloc.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].tloc.len2); fprintf(sta,"\tlen2=%u\n",obj[n].tloc.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].tloc.len3); fprintf(sta,"\tlen3=%u\n",obj[n].tloc.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].tloc.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].tloc.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tpblo: case tpblo: case tpwlo: case tpclo:
case tpwlo: case tpilo: fprintf(sta,"%5u\ttp?lo: %s",n,obj[n].name);
case tpclo: if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
case tpilo:
fprintf(sta, "%5u\ttp?lo: %s", n, obj[n].name);
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].tloc.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].tloc.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].tloc.len1); fprintf(sta,"\tlen1=%u\n",obj[n].tloc.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].tloc.len2); fprintf(sta,"\tlen2=%u\n",obj[n].tloc.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].tloc.len3); fprintf(sta,"\tlen3=%u\n",obj[n].tloc.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].tloc.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].tloc.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tsloc: case tsloc: fprintf(sta,"%5u\ttsloc: %s",n,obj[n].name);
fprintf(sta, "%5u\ttsloc: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].sloc.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].sloc.offset);
fprintf(sta,"\titems1=%u\n",obj[n].sloc.items1); fprintf(sta,"\titems1=%u\n",obj[n].sloc.items1);
fprintf(sta,"\titems2=%u\n",obj[n].sloc.items2); fprintf(sta,"\titems2=%u\n",obj[n].sloc.items2);
fprintf(sta,"\titems3=%u\n",obj[n].sloc.items3); fprintf(sta,"\titems3=%u\n",obj[n].sloc.items3);
fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sloc.totalitems); fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sloc.totalitems);
fprintf(sta,"\tlen_item=%u\n",obj[n].sloc.len_item); fprintf(sta,"\tlen_item=%u\n",obj[n].sloc.len_item);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tpslo: case tpslo: fprintf(sta,"%5u\ttpslo: %s",n,obj[n].name);
fprintf(sta, "%5u\ttpslo: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].sloc.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].sloc.offset);
fprintf(sta,"\titems1=%u\n",obj[n].sloc.items1); fprintf(sta,"\titems1=%u\n",obj[n].sloc.items1);
fprintf(sta,"\titems2=%u\n",obj[n].sloc.items2); fprintf(sta,"\titems2=%u\n",obj[n].sloc.items2);
fprintf(sta,"\titems3=%u\n",obj[n].sloc.items3); fprintf(sta,"\titems3=%u\n",obj[n].sloc.items3);
fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sloc.totalitems); fprintf(sta,"\ttotalitems=%u\n",l=obj[n].sloc.totalitems);
fprintf(sta,"\tlen_item=%u\n",obj[n].sloc.len_item); fprintf(sta,"\tlen_item=%u\n",obj[n].sloc.len_item);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tproc: case tproc: fprintf(sta,"%5u\ttproc: %s",n,obj[n].name);
fprintf(sta, "%5u\ttproc: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\ttipo=%u\n",(int)(obj[n].proc.bloque)); fprintf(sta,"\ttipo=%u\n",(int)(obj[n].proc.bloque));
fprintf(sta,"\toffset=%u\n",obj[n].proc.offset); fprintf(sta,"\toffset=%u\n",obj[n].proc.offset);
fprintf(sta,"\tnum_par=%u\n",obj[n].proc.num_par); fprintf(sta,"\tnum_par=%u\n",obj[n].proc.num_par);
break; break;
case tfext: case tfext: fprintf(sta,"%5u\ttfext: %s",n,obj[n].name);
fprintf(sta, "%5u\ttfext: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\tcodigo=%u\n",obj[n].fext.codigo); fprintf(sta,"\tcodigo=%u\n",obj[n].fext.codigo);
fprintf(sta,"\tnum_par=%u\n",obj[n].fext.num_par); fprintf(sta,"\tnum_par=%u\n",obj[n].fext.num_par);
break; break;
case tbglo: case tbglo: fprintf(sta,"%5u\ttbglo: %s",n,obj[n].name);
fprintf(sta, "%5u\ttbglo: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1); fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2); fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3); fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case tbloc: case tbloc: fprintf(sta,"%5u\ttbloc: %s",n,obj[n].name);
fprintf(sta, "%5u\ttbloc: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1); fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2); fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3); fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case twglo: case twglo: fprintf(sta,"%5u\ttwglo: %s",n,obj[n].name);
fprintf(sta, "%5u\ttwglo: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1); fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2); fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3); fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
case twloc: case twloc: fprintf(sta,"%5u\ttwloc: %s",n,obj[n].name);
fprintf(sta, "%5u\ttwloc: %s", n, obj[n].name); if (obj[n].usado) fprintf(sta," (*) usado\n"); else fprintf(sta,"\n");
if (obj[n].usado)
fprintf(sta, " (*) usado\n");
else
fprintf(sta, "\n");
fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset); fprintf(sta,"\toffset=%u\n",o=obj[n].bglo.offset);
fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1); fprintf(sta,"\tlen1=%u\n",obj[n].bglo.len1);
fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2); fprintf(sta,"\tlen2=%u\n",obj[n].bglo.len2);
fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3); fprintf(sta,"\tlen3=%u\n",obj[n].bglo.len3);
fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen); fprintf(sta,"\ttotalen=%u\n",obj[n].bglo.totalen);
if (obj[n].member) if (obj[n].member) fprintf(sta,"\tmember of %s\n",(*obj[n].member).name);
fprintf(sta, "\tmember of %s\n", (*obj[n].member).name);
break; break;
} }
fprintf(sta,translate(38),(unsigned int)obj[n].bloque,(unsigned int)obj[n].anterior);
char *msg_38 = get_translate(38, (unsigned int)obj[n].bloque, (unsigned int)obj[n].anterior);
fprintf(sta, msg_38);
free(msg_38);
fprintf(sta,"\n"); fprintf(sta,"\n");
} }
fclose(sta); fclose(sta);
} }
/* /*
* Graba el fichero ensamblador * Graba el fichero ensamblador
*/ */
@ -317,448 +216,150 @@ void listado_ensamblador(void)
strcpy(nombreeml,nombreprog); strcpy(nombreeml,nombreprog);
strcat(nombreeml,".eml"); strcat(nombreeml,".eml");
if ((sta = fopen(nombreeml, "w")) == NULL) if((sta=fopen(nombreeml,"w"))==NULL) {
{ printf(translate(36),nombreeml);
print_translate(36, nombreeml);
exit(1); exit(1);
} }
char *msg_39 = get_translate(39, fichero_prg); fprintf(sta,translate(39),fichero_prg);
fprintf(sta, msg_39);
free(msg_39);
while (i < imem) while (i<imem) { switch ((byte)mem[i]) {
{ case lnop: fprintf(sta,"%5u\tnop",i); break;
switch ((byte)mem[i]) case lcar: fprintf(sta,"%5u\tcar %u",i,mem[i+1]); i++; break;
{ case lasi: fprintf(sta,"%5u\tasi",i); break;
case lnop: case lori: fprintf(sta,"%5u\tori",i); break;
fprintf(sta, "%5u\tnop", i); case lxor: fprintf(sta,"%5u\txor",i); break;
break; case land: fprintf(sta,"%5u\tand",i); break;
case lcar: case ligu: fprintf(sta,"%5u\tigu",i); break;
fprintf(sta, "%5u\tcar %u", i, mem[i + 1]); case ldis: fprintf(sta,"%5u\tdis",i); break;
i++; case lmay: fprintf(sta,"%5u\tmay",i); break;
break; case lmen: fprintf(sta,"%5u\tmen",i); break;
case lasi: case lmei: fprintf(sta,"%5u\tmei",i); break;
fprintf(sta, "%5u\tasi", i); case lmai: fprintf(sta,"%5u\tmai",i); break;
break; case ladd: fprintf(sta,"%5u\tadd",i); break;
case lori: case lsub: fprintf(sta,"%5u\tsub",i); break;
fprintf(sta, "%5u\tori", i); case lmul: fprintf(sta,"%5u\tmul",i); break;
break; case ldiv: fprintf(sta,"%5u\tdiv",i); break;
case lxor: case lmod: fprintf(sta,"%5u\tmod",i); break;
fprintf(sta, "%5u\txor", i); case lneg: fprintf(sta,"%5u\tneg",i); break;
break; case lptr: fprintf(sta,"%5u\tptr",i); break;
case land: case lnot: fprintf(sta,"%5u\tnot",i); break;
fprintf(sta, "%5u\tand", i); case laid: fprintf(sta,"%5u\taid",i); break;
break; case lcid: fprintf(sta,"%5u\tcid",i); break;
case ligu: case lrng: fprintf(sta,"%5u\trng %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tigu", i); case ljmp: fprintf(sta,"%5u\tjmp %u",i,mem[i+1]); i++; break;
break; case ljpf: fprintf(sta,"%5u\tjpf %u",i,mem[i+1]); i++; break;
case ldis: case lfun: fprintf(sta,"%5u\tfun %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tdis", i); case lcal: fprintf(sta,"%5u\tcal %u",i,mem[i+1]); i++; break;
break; case lret: fprintf(sta,"%5u\tret",i); break;
case lmay: case lasp: fprintf(sta,"%5u\tasp",i); break;
fprintf(sta, "%5u\tmay", i); case lfrm: fprintf(sta,"%5u\tfrm",i); break;
break; case lcbp: fprintf(sta,"%5u\tcbp %u",i,mem[i+1]); i++; break;
case lmen: case lcpa: fprintf(sta,"%5u\tcpa",i); break;
fprintf(sta, "%5u\tmen", i); case ltyp: fprintf(sta,"\n%5u\ttyp %u",i,mem[i+1]); i++; break;
break; case lpri: fprintf(sta,"%5u\tpri %u",i,mem[i+1]); i++; break;
case lmei: case lcse: fprintf(sta,"%5u\tcse %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tmei", i); case lcsr: fprintf(sta,"%5u\tcsr %u",i,mem[i+1]); i++; break;
break; case lshr: fprintf(sta,"%5u\tshr",i); break;
case lmai: case lshl: fprintf(sta,"%5u\tshl",i); break;
fprintf(sta, "%5u\tmai", i); case lipt: fprintf(sta,"%5u\tipt",i); break;
break; case lpti: fprintf(sta,"%5u\tpti",i); break;
case ladd: case ldpt: fprintf(sta,"%5u\tdpt",i); break;
fprintf(sta, "%5u\tadd", i); case lptd: fprintf(sta,"%5u\tptd",i); break;
break; case lada: fprintf(sta,"%5u\tada",i); break;
case lsub: case lsua: fprintf(sta,"%5u\tsua",i); break;
fprintf(sta, "%5u\tsub", i); case lmua: fprintf(sta,"%5u\tmua",i); break;
break; case ldia: fprintf(sta,"%5u\tdia",i); break;
case lmul: case lmoa: fprintf(sta,"%5u\tmoa",i); break;
fprintf(sta, "%5u\tmul", i); case lana: fprintf(sta,"%5u\tana",i); break;
break; case lora: fprintf(sta,"%5u\tora",i); break;
case ldiv: case lxoa: fprintf(sta,"%5u\txoa",i); break;
fprintf(sta, "%5u\tdiv", i); case lsra: fprintf(sta,"%5u\tsra",i); break;
break; case lsla: fprintf(sta,"%5u\tsla",i); break;
case lmod: case lpar: fprintf(sta,"%5u\tpar %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tmod", i); case lrtf: fprintf(sta,"%5u\trtf",i); break;
break; case lclo: fprintf(sta,"%5u\tclo %u",i,mem[i+1]); i++; break;
case lneg: case lfrf: fprintf(sta,"%5u\tfrf",i); break;
fprintf(sta, "%5u\tneg", i); case limp: fprintf(sta,"%5u\timp %u",i,mem[i+1]); i++; break;
break; case lext: fprintf(sta,"%5u\text %u",i,mem[i+1]); i++; break;
case lptr: case lchk: fprintf(sta,"%5u\tchk",i); break;
fprintf(sta, "%5u\tptr", i); case ldbg: fprintf(sta,"%5u\tdbg",i); break;
break;
case lnot:
fprintf(sta, "%5u\tnot", i);
break;
case laid:
fprintf(sta, "%5u\taid", i);
break;
case lcid:
fprintf(sta, "%5u\tcid", i);
break;
case lrng:
fprintf(sta, "%5u\trng %u", i, mem[i + 1]);
i++;
break;
case ljmp:
fprintf(sta, "%5u\tjmp %u", i, mem[i + 1]);
i++;
break;
case ljpf:
fprintf(sta, "%5u\tjpf %u", i, mem[i + 1]);
i++;
break;
case lfun:
fprintf(sta, "%5u\tfun %u", i, mem[i + 1]);
i++;
break;
case lcal:
fprintf(sta, "%5u\tcal %u", i, mem[i + 1]);
i++;
break;
case lret:
fprintf(sta, "%5u\tret", i);
break;
case lasp:
fprintf(sta, "%5u\tasp", i);
break;
case lfrm:
fprintf(sta, "%5u\tfrm", i);
break;
case lcbp:
fprintf(sta, "%5u\tcbp %u", i, mem[i + 1]);
i++;
break;
case lcpa:
fprintf(sta, "%5u\tcpa", i);
break;
case ltyp:
fprintf(sta, "\n%5u\ttyp %u", i, mem[i + 1]);
i++;
break;
case lpri:
fprintf(sta, "%5u\tpri %u", i, mem[i + 1]);
i++;
break;
case lcse:
fprintf(sta, "%5u\tcse %u", i, mem[i + 1]);
i++;
break;
case lcsr:
fprintf(sta, "%5u\tcsr %u", i, mem[i + 1]);
i++;
break;
case lshr:
fprintf(sta, "%5u\tshr", i);
break;
case lshl:
fprintf(sta, "%5u\tshl", i);
break;
case lipt:
fprintf(sta, "%5u\tipt", i);
break;
case lpti:
fprintf(sta, "%5u\tpti", i);
break;
case ldpt:
fprintf(sta, "%5u\tdpt", i);
break;
case lptd:
fprintf(sta, "%5u\tptd", i);
break;
case lada:
fprintf(sta, "%5u\tada", i);
break;
case lsua:
fprintf(sta, "%5u\tsua", i);
break;
case lmua:
fprintf(sta, "%5u\tmua", i);
break;
case ldia:
fprintf(sta, "%5u\tdia", i);
break;
case lmoa:
fprintf(sta, "%5u\tmoa", i);
break;
case lana:
fprintf(sta, "%5u\tana", i);
break;
case lora:
fprintf(sta, "%5u\tora", i);
break;
case lxoa:
fprintf(sta, "%5u\txoa", i);
break;
case lsra:
fprintf(sta, "%5u\tsra", i);
break;
case lsla:
fprintf(sta, "%5u\tsla", i);
break;
case lpar:
fprintf(sta, "%5u\tpar %u", i, mem[i + 1]);
i++;
break;
case lrtf:
fprintf(sta, "%5u\trtf", i);
break;
case lclo:
fprintf(sta, "%5u\tclo %u", i, mem[i + 1]);
i++;
break;
case lfrf:
fprintf(sta, "%5u\tfrf", i);
break;
case limp:
fprintf(sta, "%5u\timp %u", i, mem[i + 1]);
i++;
break;
case lext:
fprintf(sta, "%5u\text %u", i, mem[i + 1]);
i++;
break;
case lchk:
fprintf(sta, "%5u\tchk", i);
break;
case ldbg:
fprintf(sta, "%5u\tdbg", i);
break;
case lcar2: case lcar2: fprintf(sta,"%5u\tcar2 %u %u",i,mem[i+1],mem[i+2]); i+=2; break;
fprintf(sta, "%5u\tcar2 %u %u", i, mem[i + 1], mem[i + 2]); case lcar3: fprintf(sta,"%5u\tcar3 %u %u %u",i,mem[i+1],mem[i+2],mem[i+3]); i+=3; break;
i += 2; case lcar4: fprintf(sta,"%5u\tcar4 %u %u %u %u",i,mem[i+1],mem[i+2],mem[i+3],mem[i+4]); i+=4; break;
break; case lasiasp: fprintf(sta,"%5u\tasiasp",i); break;
case lcar3: case lcaraid: fprintf(sta,"%5u\tcaraid %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tcar3 %u %u %u", i, mem[i + 1], mem[i + 2], mem[i + 3]); case lcarptr: fprintf(sta,"%5u\tcarptr %u",i,mem[i+1]); i++; break;
i += 3; case laidptr: fprintf(sta,"%5u\taidptr",i); break;
break; case lcaraidptr: fprintf(sta,"%5u\tcaraidptr %u",i,mem[i+1]); i++; break;
case lcar4: case lcaraidcpa: fprintf(sta,"%5u\tcaraidcpa %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tcar4 %u %u %u %u", i, mem[i + 1], mem[i + 2], mem[i + 3], mem[i + 4]); case laddptr: fprintf(sta,"%5u\taddptr",i); break;
i += 4; case lfunasp: fprintf(sta,"%5u\tfunasp %u",i,mem[i+1]); i++; break;
break; case lcaradd: fprintf(sta,"%5u\tcaradd %u",i,mem[i+1]); i++; break;
case lasiasp: case lcaraddptr: fprintf(sta,"%5u\tcaraddptr %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tasiasp", i); case lcarmul: fprintf(sta,"%5u\tcarmul %u",i,mem[i+1]); i++; break;
break; case lcarmuladd: fprintf(sta,"%5u\tcarmuladd %u",i,mem[i+1]); i++; break;
case lcaraid: case lcarasiasp: fprintf(sta,"%5u\tcarasiasp %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\tcaraid %u", i, mem[i + 1]); case lcarsub: fprintf(sta,"%5u\tcarsub %u",i,mem[i+1]); i++; break;
i++; case lcardiv: fprintf(sta,"%5u\tcardiv %u",i,mem[i+1]); i++; break;
break;
case lcarptr:
fprintf(sta, "%5u\tcarptr %u", i, mem[i + 1]);
i++;
break;
case laidptr:
fprintf(sta, "%5u\taidptr", i);
break;
case lcaraidptr:
fprintf(sta, "%5u\tcaraidptr %u", i, mem[i + 1]);
i++;
break;
case lcaraidcpa:
fprintf(sta, "%5u\tcaraidcpa %u", i, mem[i + 1]);
i++;
break;
case laddptr:
fprintf(sta, "%5u\taddptr", i);
break;
case lfunasp:
fprintf(sta, "%5u\tfunasp %u", i, mem[i + 1]);
i++;
break;
case lcaradd:
fprintf(sta, "%5u\tcaradd %u", i, mem[i + 1]);
i++;
break;
case lcaraddptr:
fprintf(sta, "%5u\tcaraddptr %u", i, mem[i + 1]);
i++;
break;
case lcarmul:
fprintf(sta, "%5u\tcarmul %u", i, mem[i + 1]);
i++;
break;
case lcarmuladd:
fprintf(sta, "%5u\tcarmuladd %u", i, mem[i + 1]);
i++;
break;
case lcarasiasp:
fprintf(sta, "%5u\tcarasiasp %u", i, mem[i + 1]);
i++;
break;
case lcarsub:
fprintf(sta, "%5u\tcarsub %u", i, mem[i + 1]);
i++;
break;
case lcardiv:
fprintf(sta, "%5u\tcardiv %u", i, mem[i + 1]);
i++;
break;
case lptrwor: case lptrwor: fprintf(sta,"%5u\tptrwor",i); break;
fprintf(sta, "%5u\tptrwor", i); case lasiwor: fprintf(sta,"%5u\tasiwor",i); break;
break; case liptwor: fprintf(sta,"%5u\tiptwor",i); break;
case lasiwor: case lptiwor: fprintf(sta,"%5u\tptiwor",i); break;
fprintf(sta, "%5u\tasiwor", i); case ldptwor: fprintf(sta,"%5u\tdptwor",i); break;
break; case lptdwor: fprintf(sta,"%5u\tptdwor",i); break;
case liptwor: case ladawor: fprintf(sta,"%5u\tadawor",i); break;
fprintf(sta, "%5u\tiptwor", i); case lsuawor: fprintf(sta,"%5u\tsuawor",i); break;
break; case lmuawor: fprintf(sta,"%5u\tmuawor",i); break;
case lptiwor: case ldiawor: fprintf(sta,"%5u\tdiawor",i); break;
fprintf(sta, "%5u\tptiwor", i); case lmoawor: fprintf(sta,"%5u\tmoawor",i); break;
break; case lanawor: fprintf(sta,"%5u\tanawor",i); break;
case ldptwor: case lorawor: fprintf(sta,"%5u\torawor",i); break;
fprintf(sta, "%5u\tdptwor", i); case lxoawor: fprintf(sta,"%5u\txoawor",i); break;
break; case lsrawor: fprintf(sta,"%5u\tsrawor",i); break;
case lptdwor: case lslawor: fprintf(sta,"%5u\tslawor",i); break;
fprintf(sta, "%5u\tptdwor", i); case lcpawor: fprintf(sta,"%5u\tcpawor",i); break;
break;
case ladawor:
fprintf(sta, "%5u\tadawor", i);
break;
case lsuawor:
fprintf(sta, "%5u\tsuawor", i);
break;
case lmuawor:
fprintf(sta, "%5u\tmuawor", i);
break;
case ldiawor:
fprintf(sta, "%5u\tdiawor", i);
break;
case lmoawor:
fprintf(sta, "%5u\tmoawor", i);
break;
case lanawor:
fprintf(sta, "%5u\tanawor", i);
break;
case lorawor:
fprintf(sta, "%5u\torawor", i);
break;
case lxoawor:
fprintf(sta, "%5u\txoawor", i);
break;
case lsrawor:
fprintf(sta, "%5u\tsrawor", i);
break;
case lslawor:
fprintf(sta, "%5u\tslawor", i);
break;
case lcpawor:
fprintf(sta, "%5u\tcpawor", i);
break;
case lptrchr: case lptrchr: fprintf(sta,"%5u\tptrchr",i); break;
fprintf(sta, "%5u\tptrchr", i); case lasichr: fprintf(sta,"%5u\tasichr",i); break;
break; case liptchr: fprintf(sta,"%5u\tiptchr",i); break;
case lasichr: case lptichr: fprintf(sta,"%5u\tptichr",i); break;
fprintf(sta, "%5u\tasichr", i); case ldptchr: fprintf(sta,"%5u\tdptchr",i); break;
break; case lptdchr: fprintf(sta,"%5u\tptdchr",i); break;
case liptchr: case ladachr: fprintf(sta,"%5u\tadachr",i); break;
fprintf(sta, "%5u\tiptchr", i); case lsuachr: fprintf(sta,"%5u\tsuachr",i); break;
break; case lmuachr: fprintf(sta,"%5u\tmuachr",i); break;
case lptichr: case ldiachr: fprintf(sta,"%5u\tdiachr",i); break;
fprintf(sta, "%5u\tptichr", i); case lmoachr: fprintf(sta,"%5u\tmoachr",i); break;
break; case lanachr: fprintf(sta,"%5u\tanachr",i); break;
case ldptchr: case lorachr: fprintf(sta,"%5u\torachr",i); break;
fprintf(sta, "%5u\tdptchr", i); case lxoachr: fprintf(sta,"%5u\txoachr",i); break;
break; case lsrachr: fprintf(sta,"%5u\tsrachr",i); break;
case lptdchr: case lslachr: fprintf(sta,"%5u\tslachr",i); break;
fprintf(sta, "%5u\tptdchr", i); case lcpachr: fprintf(sta,"%5u\tcpachr",i); break;
break;
case ladachr:
fprintf(sta, "%5u\tadachr", i);
break;
case lsuachr:
fprintf(sta, "%5u\tsuachr", i);
break;
case lmuachr:
fprintf(sta, "%5u\tmuachr", i);
break;
case ldiachr:
fprintf(sta, "%5u\tdiachr", i);
break;
case lmoachr:
fprintf(sta, "%5u\tmoachr", i);
break;
case lanachr:
fprintf(sta, "%5u\tanachr", i);
break;
case lorachr:
fprintf(sta, "%5u\torachr", i);
break;
case lxoachr:
fprintf(sta, "%5u\txoachr", i);
break;
case lsrachr:
fprintf(sta, "%5u\tsrachr", i);
break;
case lslachr:
fprintf(sta, "%5u\tslachr", i);
break;
case lcpachr:
fprintf(sta, "%5u\tcpachr", i);
break;
case lstrcpy: case lstrcpy: fprintf(sta,"%5u\tstrcpy",i); break;
fprintf(sta, "%5u\tstrcpy", i); case lstrfix: fprintf(sta,"%5u\tstrfix",i); break;
break; case lstrcat: fprintf(sta,"%5u\tstrcat",i); break;
case lstrfix: case lstradd: fprintf(sta,"%5u\tstradd",i); break;
fprintf(sta, "%5u\tstrfix", i); case lstrdec: fprintf(sta,"%5u\tstrdec",i); break;
break; case lstrsub: fprintf(sta,"%5u\tstrsub",i); break;
case lstrcat: case lstrlen: fprintf(sta,"%5u\tstrlen",i); break;
fprintf(sta, "%5u\tstrcat", i); case lstrigu: fprintf(sta,"%5u\tstrigu",i); break;
break; case lstrdis: fprintf(sta,"%5u\tstrdis",i); break;
case lstradd: case lstrmay: fprintf(sta,"%5u\tstrmay",i); break;
fprintf(sta, "%5u\tstradd", i); case lstrmen: fprintf(sta,"%5u\tstrmen",i); break;
break; case lstrmei: fprintf(sta,"%5u\tstrmei",i); break;
case lstrdec: case lstrmai: fprintf(sta,"%5u\tstrmai",i); break;
fprintf(sta, "%5u\tstrdec", i); case lcpastr: fprintf(sta,"%5u\tcpastr",i); break;
break;
case lstrsub:
fprintf(sta, "%5u\tstrsub", i);
break;
case lstrlen:
fprintf(sta, "%5u\tstrlen", i);
break;
case lstrigu:
fprintf(sta, "%5u\tstrigu", i);
break;
case lstrdis:
fprintf(sta, "%5u\tstrdis", i);
break;
case lstrmay:
fprintf(sta, "%5u\tstrmay", i);
break;
case lstrmen:
fprintf(sta, "%5u\tstrmen", i);
break;
case lstrmei:
fprintf(sta, "%5u\tstrmei", i);
break;
case lstrmai:
fprintf(sta, "%5u\tstrmai", i);
break;
case lcpastr:
fprintf(sta, "%5u\tcpastr", i);
break;
case lnul: case lnul: fprintf(sta,"%5u\tnul",i); break;
fprintf(sta, "%5u\tnul", i);
break;
case lextasp: case lextasp: fprintf(sta,"%5u\textasp %u",i,mem[i+1]); i++; break;
fprintf(sta, "%5u\textasp %u", i, mem[i + 1]);
i++;
break;
default: default: fprintf(sta,"***"); break;
fprintf(sta, "***"); } fprintf(sta,"\n"); i++; }
break;
}
fprintf(sta, "\n");
i++;
}
fclose (sta); fclose (sta);
} }

View file

@ -34,15 +34,14 @@
void ltlex_error(int error) void ltlex_error(int error)
{ {
if(error==1) if(error==1)
print_translate(40, translate_ltlex_error(error)); printf(translate(40),translate_ltlex_error(error));
else else
print_translate(41, "ltlex.def", linea, translate_ltlex_error(error)); printf(translate(41),"ltlex.def",linea,translate_ltlex_error(error));
print_translate(42); printf(translate(42));
exit(1); exit(1);
} }
void analiza_ltlex(void) void analiza_ltlex(void){
{
byte *_buf, * buf; /* Buffer del texto y puntero al carácter actual */ byte *_buf, * buf; /* Buffer del texto y puntero al carácter actual */
byte cont=1; /* 0 indica final del archivo */ byte cont=1; /* 0 indica final del archivo */
@ -62,7 +61,7 @@ void analiza_ltlex(void)
/* Lo lee */ /* Lo lee */
fseek(def,0,SEEK_END); fseek(def,0,SEEK_END);
len=ftell(def); len=ftell(def);
_buf = buf = e_malloc(len + 1); _buf=buf=(byte *) e_malloc(len+1);
fseek(def,0,SEEK_SET); fseek(def,0,SEEK_SET);
len=fread(buf,1,len,def); len=fread(buf,1,len,def);
@ -75,71 +74,52 @@ void analiza_ltlex(void)
linea=1; linea=1;
do do {
{ switch (*buf++) {
switch (*buf++)
{
/* Fin de fichero */ /* Fin de fichero */
case 0: case 0:
cont = 0; cont=0; break;
break;
/* Ignoramos los espacios */ /* Ignoramos los espacios */
case ' ': case ' ':
case tab: case tab:
break; break;
/* Salta de linea */ /* Salta de linea */
case cr: case cr:
if (*buf == lf) if(*buf==lf) buf++;
buf++;
case lf: case lf:
linea++; linea++;
break; break;
/* Los ; indican línea de comentario */ /* Los ; indican línea de comentario */
case ';': case ';':
while (*buf != cr && *buf != lf) while (*buf!=cr && *buf!=lf) buf++; break;
buf++;
break;
/* El símbolo & indica definición de token */ /* El símbolo & indica definición de token */
case '&': case '&':
*buf=lower[*buf]; *buf=lower[*buf];
if (*buf>='0' && *buf<='9') if (*buf>='0' && *buf<='9')
t=(*buf++-'0')<<4; t=(*buf++-'0')<<4;
else if (*buf >= 'a' && *buf <= 'f') else
if (*buf>='a' && *buf<='f')
t=(*buf++-'a'+10)<<4; t=(*buf++-'a'+10)<<4;
else else
ltlex_error(2); ltlex_error(2);
*buf=lower[*buf]; *buf=lower[*buf];
if (*buf>='0' && *buf<='9') if (*buf>='0' && *buf<='9')
t+=(*buf++-'0'); t+=(*buf++-'0');
else if (*buf >= 'a' && *buf <= 'f') else
if (*buf>='a' && *buf<='f')
t+=(*buf++-'a'+10); t+=(*buf++-'a'+10);
else else
ltlex_error(2); ltlex_error(2);
if (*buf == cr || *buf == lf || *buf == ' ' || *buf == tab) if (*buf==cr || *buf==lf || *buf==' ' || *buf==tab) break;
break; else if (lower[*buf]) { /* Analiza una palabra reservada */
else if (lower[*buf]) _ivnom=ivnom.b; *ivnom.p++=0; *ivnom.p++=(unsigned char*)t; h=0;
{ /* Analiza una palabra reservada */ while ((*ivnom.b=lower[*buf++])) h=((byte)(h<<1)+(h>>7))^(*ivnom.b++);
_ivnom = ivnom.b; ptr=&vhash[h]; while (*ptr) ptr=(unsigned char * *)*ptr; *ptr=_ivnom;
*ivnom.p++ = 0; buf--; ivnom.b++;
*ivnom.p++ = (unsigned char *)t; } else if (t>=0x78 && t<=0x7b) { /* Analiza un delimitador de literal */
h = 0;
while ((*ivnom.b = lower[*buf++]))
h = ((byte)(h << 1) + (h >> 7)) ^ (*ivnom.b++);
ptr = &vhash[h];
while (*ptr)
ptr = (unsigned char **)*ptr;
*ptr = _ivnom;
buf--;
ivnom.b++;
}
else if (t >= 0x78 && t <= 0x7b)
{ /* Analiza un delimitador de literal */
lex_case[*buf]=(struct lex_ele*)l_lit; lex_case[*buf]=(struct lex_ele*)l_lit;
} } else { /* Analiza un nuevo símbolo */
else if ((e=lex_case[*buf])==0) {
{ /* Analiza un nuevo símbolo */
if ((e = lex_case[*buf]) == 0)
{
if (num_nodos++==max_nodos) if (num_nodos++==max_nodos)
ltlex_error(3); ltlex_error(3);
e=lex_case[*buf]=ilex_simb++; e=lex_case[*buf]=ilex_simb++;
@ -147,38 +127,26 @@ void analiza_ltlex(void)
} }
else else
buf++; buf++;
while (*buf != ' ' && *buf != tab && *buf != cr) while (*buf!=' ' && *buf!=tab && *buf!=cr) {
{ if (lower[*buf]) ltlex_error(4);
if (lower[*buf])
ltlex_error(4);
if (e->siguiente==0) if (e->siguiente==0)
if (num_nodos++ == max_nodos) if (num_nodos++==max_nodos) ltlex_error(3);
ltlex_error(3); else e=e->siguiente=ilex_simb++;
else else {
e = e->siguiente = ilex_simb++;
else
{
e=e->siguiente; e=e->siguiente;
while (e->caracter!=*buf && e->alternativa) while (e->caracter!=*buf && e->alternativa)
e=e->alternativa; e=e->alternativa;
if (e->caracter != *buf) if (e->caracter!=*buf) {
{ if (num_nodos++==max_nodos) ltlex_error(3);
if (num_nodos++ == max_nodos) else e=e->alternativa=ilex_simb++;
ltlex_error(3);
else
e = e->alternativa = ilex_simb++;
} }
} }
e->caracter=*buf++; e->caracter=*buf++;
} }
e->token=t; e->token=t;
} } break;
break; }} while (cont);
}
} while (cont);
e_free(_buf); e_free(_buf); _buf=NULL;
_buf = NULL; fclose(def); def=NULL;
fclose(def);
def = NULL;
} }

View file

@ -45,8 +45,7 @@ void get_rawname(char *completo, char *rawname)
int i; int i;
for(i=strlen(completo)-1;i>0;i--) for(i=strlen(completo)-1;i>0;i--)
if (completo[i] == '\\' || completo[i] == '/') if(completo[i]=='\\' || completo[i]=='/') {
{
p=&completo[i+1]; p=&completo[i+1];
break; break;
} }
@ -55,17 +54,21 @@ void get_rawname(char *completo, char *rawname)
i=strlen(rawname); i=strlen(rawname);
#ifdef _WIN32 #ifdef _WIN32
if (rawname[i - 4] == '.' && (rawname[i - 3] == 'd' || rawname[i - 3] == 'D') && (rawname[i - 2] == 'l' || rawname[i - 2] == 'L') && (rawname[i - 1] == 'l' || rawname[i - 1] == 'L')) if (rawname[i-4]=='.' && (rawname[i-3]=='d' || rawname[i-3]=='D')
&& (rawname[i-2]=='l' || rawname[i-2]=='L')
&& (rawname[i-1]=='l' || rawname[i-1]=='L'))
rawname[i-4]=0; rawname[i-4]=0;
#else #else
if (rawname[i - 3] == '.' && (rawname[i - 2] == 's' || rawname[i - 2] == 'S') && (rawname[i - 1] == 'o' || rawname[i - 1] == 'O')) if(rawname[i-3]=='.' && (rawname[i-2]=='s' || rawname[i-2]=='S')
&& (rawname[i-1]=='o' || rawname[i-1]=='O'))
rawname[i-3]=0; rawname[i-3]=0;
#endif #endif
} }
/* compara prioridades de dos dlls, para el qsort descendente */ /* compara prioridades de dos dlls, para el qsort descendente */
int compara(const void* _a, const void* _b) int compara(const void* _a, const void* _b)
{ {
@ -81,6 +84,7 @@ int compara2(const void *_a, const void *_b)
return dlls[a].prioridad<dlls[b].prioridad?1:(dlls[a].prioridad>dlls[b].prioridad?-1:0); return dlls[a].prioridad<dlls[b].prioridad?1:(dlls[a].prioridad>dlls[b].prioridad?-1:0);
} }
void dll_func() void dll_func()
{ {
char dllkey[256]="dll_priority:"; char dllkey[256]="dll_priority:";
@ -120,7 +124,8 @@ void dll_func()
/* Busca las DLLs que hay en el directorio */ /* Busca las DLLs que hay en el directorio */
buscafich = _findfirst(mask, &fichero_dll); buscafich = _findfirst(mask, &fichero_dll);
if (buscafich==-1) if (buscafich==-1)
print_translate(43); /* no hay dlls */ printf(translate(43)); /* no hay dlls */
#ifdef _DEBUG #ifdef _DEBUG
printf("dbg: DLL encontrada: %s\n",fichero_dll.name); printf("dbg: DLL encontrada: %s\n",fichero_dll.name);
@ -136,11 +141,10 @@ void dll_func()
carga=0; carga=0;
if (carga) if (carga)
if (!leedll()) if(!leedll()) {
{
dlls[numdlls].prioridad=0; dlls[numdlls].prioridad=0;
/* guarda el nombre de fichero en la tabla de DLLs */ /* guarda el nombre de fichero en la tabla de DLLs */
dlls[0].nombre = e_malloc(strlen(rawname) + 1); dlls[0].nombre=(char*)e_malloc(strlen(rawname)+1);
strcpy(dlls[0].nombre,rawname); strcpy(dlls[0].nombre,rawname);
/* importa las funciones de la DLL */ /* importa las funciones de la DLL */
@ -151,10 +155,8 @@ void dll_func()
} }
/* hace lo mismo con el resto */ /* hace lo mismo con el resto */
while (1) while(1) {
{ if(_findnext(buscafich,&fichero_dll)==0) {
if (_findnext(buscafich, &fichero_dll) == 0)
{
#ifdef _DEBUG #ifdef _DEBUG
printf("dbg: DLL encontrada: %s\n",fichero_dll.name); printf("dbg: DLL encontrada: %s\n",fichero_dll.name);
#endif #endif
@ -164,17 +166,12 @@ void dll_func()
get_rawname(fichero_dll.name,rawname); get_rawname(fichero_dll.name,rawname);
strcpy(dllkey,"dll_priority:"); strcpy(dllkey,"dll_priority:");
strcat(dllkey,rawname); strcat(dllkey,rawname);
if (ini) if(ini) if(iniparser_getint(ini,dllkey,0)<=P_NUNCA) carga=0;
if (iniparser_getint(ini, dllkey, 0) <= P_NUNCA) if(carga) if(!leedll()) {
carga = 0; dlls[numdlls].nombre=(char*)e_malloc(strlen(rawname)+1);
if (carga)
if (!leedll())
{
dlls[numdlls].nombre = e_malloc(strlen(rawname) + 1);
strcpy(dlls[numdlls].nombre,rawname); strcpy(dlls[numdlls].nombre,rawname);
dlls[numdlls].usado=0; dlls[numdlls].usado=0;
if (ini) if(ini) dlls[numdlls].prioridad=iniparser_getint(ini,dllkey,dlls[numdlls].prioridad);
dlls[numdlls].prioridad = iniparser_getint(ini, dllkey, dlls[numdlls].prioridad);
numdlls++; numdlls++;
} }
} }
@ -184,21 +181,17 @@ void dll_func()
#else /* si estamos en Linux */ #else /* si estamos en Linux */
if (ini) if(ini) dir=iniparser_getstr(ini,"dll:nixdll");
dir = iniparser_getstr(ini, "dll:nixdll"); if(!dir) dir="so";
if (!dir)
dir = "so";
directorio=opendir(dir); directorio=opendir(dir);
if (!directorio) if(!directorio) {
{ printf(translate(44),dir); /* no hay directorio so/ */
print_translate(44, dir); /* no hay directorio so/ */
exit(1); exit(1);
} }
/* Busca las .so */ /* Busca las .so */
while ((fichero_dll = readdir(directorio)) != 0) while ((fichero_dll = readdir(directorio)) != 0) {
{
/* Salta los directorios actual '.' y padre ".." */ /* Salta los directorios actual '.' y padre ".." */
if (strcmp(fichero_dll->d_name, ".") == 0) if (strcmp(fichero_dll->d_name, ".") == 0)
continue; continue;
@ -206,8 +199,7 @@ void dll_func()
if (strcmp(fichero_dll->d_name, "..") == 0) if (strcmp(fichero_dll->d_name, "..") == 0)
continue; continue;
if (fichero_dll->d_type == DT_REG) if(fichero_dll->d_type==DT_REG) {
{
char dllkey[256]="dll_priority:"; char dllkey[256]="dll_priority:";
#ifdef _DEBUG #ifdef _DEBUG
printf("dbg: Librería encontrada: %s/%s\n",dir,fichero_dll->d_name); printf("dbg: Librería encontrada: %s/%s\n",dir,fichero_dll->d_name);
@ -219,17 +211,14 @@ void dll_func()
strcpy(dllkey,"dll_priority:"); strcpy(dllkey,"dll_priority:");
strcat(dllkey,rawname); strcat(dllkey,rawname);
if (ini) if (ini) {
{
if (iniparser_getint(ini,dllkey,0) <= P_NUNCA) if (iniparser_getint(ini,dllkey,0) <= P_NUNCA)
carga=0; carga=0;
} }
if (carga) if(carga) {
{ if(!leedll()) {
if (!leedll()) dlls[numdlls].nombre=(char*)e_malloc(strlen(rawname)+1);
{
dlls[numdlls].nombre = e_malloc(strlen(rawname) + 1);
strcpy(dlls[numdlls].nombre,rawname); strcpy(dlls[numdlls].nombre,rawname);
dlls[numdlls].usado=0; dlls[numdlls].usado=0;
@ -245,7 +234,7 @@ void dll_func()
#endif #endif
if(numdlls==0) if(numdlls==0)
print_translate(43); /* no hay librerias */ printf(translate(43)); /* no hay librerias */
nuevo_orden=e_malloc(numdlls*4); nuevo_orden=e_malloc(numdlls*4);
for(i=0;i<numdlls;i++) for(i=0;i<numdlls;i++)
@ -258,8 +247,10 @@ void dll_func()
for(i=0;i<numdlls;i++) for(i=0;i<numdlls;i++)
printf("dbg: %d - %s - prioridad: %d\n",i,dlls[i].nombre,dlls[i].prioridad); printf("dbg: %d - %s - prioridad: %d\n",i,dlls[i].nombre,dlls[i].prioridad);
#endif #endif
} }
void dll_func2() void dll_func2()
{ {
int i=numdlls; int i=numdlls;
@ -270,36 +261,30 @@ void dll_func2()
for(i=0;i<numdlls;i++) for(i=0;i<numdlls;i++)
nuevo_orden[i]=i; nuevo_orden[i]=i;
for (numdlls = 0; numdlls < i; numdlls++) for(numdlls=0;numdlls<i;numdlls++) {
{ if((dlls[numdlls].prioridad>P_NUNCA) && (dlls[numdlls].usado || dlls[numdlls].prioridad>=P_SIEMPRE)) {
if ((dlls[numdlls].prioridad > P_NUNCA) && (dlls[numdlls].usado || dlls[numdlls].prioridad >= P_SIEMPRE))
{
#ifdef _DEBUG #ifdef _DEBUG
printf("dbg: Se requiere %s (id=%d)\n",dlls[numdlls].nombre,numdlls); printf("dbg: Se requiere %s (id=%d)\n",dlls[numdlls].nombre,numdlls);
#endif #endif
#ifdef _WIN32 #ifdef _WIN32
if (ini) if(ini) dir=iniparser_getstr(ini,"dll:windll");
dir = iniparser_getstr(ini, "dll:windll"); if(!dir) dir="dll";
if (!dir)
dir = "dll";
sprintf(fichdll,"%s\\%s.dll",dir,dlls[numdlls].nombre); sprintf(fichdll,"%s\\%s.dll",dir,dlls[numdlls].nombre);
#else #else
if (ini) if(ini) dir=iniparser_getstr(ini,"dll:nixdll");
dir = iniparser_getstr(ini, "dll:nixdll"); if(!dir) dir="so";
if (!dir)
dir = "so";
sprintf(fichdll,"%s/%s.so",dir,dlls[numdlls].nombre); sprintf(fichdll,"%s/%s.so",dir,dlls[numdlls].nombre);
#endif #endif
if (leedll()) if(leedll()) {
{ printf(translate(45),dlls[numdlls].nombre); /* error al cargar libreria */
print_translate(45, dlls[numdlls].nombre); /* error al cargar libreria */
exit(1); exit(1);
} }
} }
} }
} }
int leedll() int leedll()
{ {
TYPEOF_ExportaFuncs *ExportaFuncs; TYPEOF_ExportaFuncs *ExportaFuncs;
@ -309,9 +294,8 @@ int leedll()
/* Carga la DLL */ /* Carga la DLL */
hDLL=LoadDLL(fichdll); hDLL=LoadDLL(fichdll);
if (hDLL == NULL) if(hDLL==NULL) {
{ printf(translate(46),fichdll); /* no puedo cargar libreria */
print_translate(46, fichdll); /* no puedo cargar libreria */
return 1; return 1;
} }
@ -319,9 +303,8 @@ int leedll()
ExportaFuncs=NULL; ExportaFuncs=NULL;
ExportaFuncs=(TYPEOF_ExportaFuncs *)GetDLLProcAddress(hDLL,"ExportaFuncs"); ExportaFuncs=(TYPEOF_ExportaFuncs *)GetDLLProcAddress(hDLL,"ExportaFuncs");
if (ExportaFuncs == NULL) if(ExportaFuncs==NULL) {
{ printf(translate(47),fichdll); /* exportafuncs no encontrado */
print_translate(47, fichdll); /* exportafuncs no encontrado */
FreeDLL(hDLL); FreeDLL(hDLL);
return 1; return 1;
} }
@ -341,9 +324,8 @@ int leedll()
/* Carga la DLL */ /* Carga la DLL */
hDLL=dlopen(fichdll,RTLD_NOW); hDLL=dlopen(fichdll,RTLD_NOW);
if (!hDLL) if(!hDLL) {
{ printf(translate(46),fichdll,dlerror()); /* no puedo cargar libreria */
print_translate(46, fichdll, dlerror()); /* no puedo cargar libreria */
return 1; return 1;
} }
@ -353,9 +335,8 @@ int leedll()
ExportaFuncs=(TYPEOF_ExportaFuncs *) dlsym(hDLL,"ExportaFuncs"); ExportaFuncs=(TYPEOF_ExportaFuncs *) dlsym(hDLL,"ExportaFuncs");
if ((errordll = dlerror()) != NULL) if((errordll=dlerror())!=NULL) {
{ printf(translate(47),fichdll,errordll); /* exportafuncs no encontrado */
print_translate(47, fichdll, errordll); /* exportafuncs no encontrado */
dlclose(hDLL); dlclose(hDLL);
return 1; return 1;
} }

View file

@ -137,10 +137,10 @@ void indexa_variable(tipo_t tipo, char* nombre, int ptr)
#endif #endif
if(varindex) { if(varindex) {
varindex=realloc(varindex,sizeof(varindex_t)*(num_indexed_vars+1)); varindex=(varindex_t*)realloc(varindex,sizeof(varindex_t)*(num_indexed_vars+1));
} }
else { else {
varindex=e_malloc(sizeof(varindex_t)*(num_indexed_vars+1)); varindex=(varindex_t*)e_malloc(sizeof(varindex_t)*(num_indexed_vars+1));
} }
varindex[num_indexed_vars].hash=h; varindex[num_indexed_vars].hash=h;
varindex[num_indexed_vars].tipo=tipo; varindex[num_indexed_vars].tipo=tipo;

View file

@ -137,7 +137,7 @@ void _encriptar(int encode, char * fichero, char * clave)
if ((f=fopen(fichero,"rb"))!=NULL) { if ((f=fopen(fichero,"rb"))!=NULL) {
fseek(f,0,SEEK_END); fseek(f,0,SEEK_END);
size=ftell(f); size=ftell(f);
if ((ptr=malloc(size))!=NULL) { if ((ptr=(byte *)malloc(size))!=NULL) {
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
if(fread(ptr,1,size,f) ==(unsigned int) size) { if(fread(ptr,1,size,f) ==(unsigned int) size) {
fclose(f); fclose(f);
@ -224,7 +224,7 @@ void _comprimir(int encode, char *fichero)
if ((f=fopen(fichero,"rb"))!=NULL) { if ((f=fopen(fichero,"rb"))!=NULL) {
fseek(f,0,SEEK_END); fseek(f,0,SEEK_END);
size=ftell(f); size=ftell(f);
if ((ptr=malloc(size))!=NULL) { if ((ptr=(byte *)malloc(size))!=NULL) {
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
if(fread(ptr,1,size,f) == size) { if(fread(ptr,1,size,f) == size) {
fclose(f); fclose(f);
@ -245,7 +245,7 @@ void _comprimir(int encode, char *fichero)
return; return;
stub_size=(int)size; stub_size=(int)size;
size2=size+size/100+256; size2=size+size/100+256;
if ((ptr_dest=malloc(size2))==NULL) { if ((ptr_dest=(byte *)malloc(size2))==NULL) {
free(ptr); free(ptr);
return; return;
} }
@ -268,7 +268,7 @@ void _comprimir(int encode, char *fichero)
return; return;
size2=*(int*)(ptr+8); size2=*(int*)(ptr+8);
stub_size=(int)size2; stub_size=(int)size2;
if ((ptr_dest=malloc(size2))==NULL) { if ((ptr_dest=(byte *)malloc(size2))==NULL) {
free(ptr); free(ptr);
return; return;
} }

View file

@ -124,7 +124,7 @@ static int AddDLLReference(void *pImageBase, char *svName, DWORD dwFlags)
} }
// Add new dll to list // Add new dll to list
cur=malloc(sizeof(IMAGE_PARAMETERS)); cur=(IMAGE_PARAMETERS *)malloc(sizeof(IMAGE_PARAMETERS));
if(cur==NULL) { if(cur==NULL) {
LeaveCriticalSection(&g_DLLCrit); LeaveCriticalSection(&g_DLLCrit);
return -1; return -1;

View file

@ -49,14 +49,13 @@
#define TRANSLATE_RUNTIME_ERROR 7 #define TRANSLATE_RUNTIME_ERROR 7
#define TRANSLATE_CRITICAL_ERROR 8 #define TRANSLATE_CRITICAL_ERROR 8
int idioma; int idioma;
/* comunes */ /* comunes */
int detecta_idioma(); int detecta_idioma();
char* translate(int num); char* translate(int num);
char* translate_dll_error(int num); char* translate_dll_error(int num);
const char *get_translate(int num, ...);
void print_translate(int num, ...);
/* compilador */ /* compilador */
char* translate_error(int num); char* translate_error(int num);

View file

@ -124,7 +124,7 @@ static int AddDLLReference(void *pImageBase, char *svName, DWORD dwFlags)
} }
// Add new dll to list // Add new dll to list
cur=malloc(sizeof(IMAGE_PARAMETERS)); cur=(IMAGE_PARAMETERS *)malloc(sizeof(IMAGE_PARAMETERS));
if(cur==NULL) { if(cur==NULL) {
LeaveCriticalSection(&g_DLLCrit); LeaveCriticalSection(&g_DLLCrit);
return -1; return -1;

View file

@ -79,7 +79,9 @@ int offset;
return 0; return 0;
}*/ }*/
// Errores específicos en la ejecución de una DLL // Errores específicos en la ejecución de una DLL
void dll_error(int error, ...) void dll_error(int error, ...)
{ {
va_list opparam; va_list opparam;
@ -87,11 +89,11 @@ void dll_error(int error, ...)
va_start(opparam,error); va_start(opparam,error);
sprintf(mensaje, get_translate(3, fichdll)); sprintf(mensaje,translate(3), fichdll);
vsprintf(mensaje, get_translate(translate_dll_error(error)), opparam); vsprintf(mensaje,translate_dll_error(error),opparam);
#ifdef _WIN32 #ifdef _WIN32
MessageBox(0,mensaje,print_translate((4),MB_ICONERROR); MessageBox(0,mensaje,translate(4),MB_ICONERROR);
#else #else
printf("%s\n",mensaje); printf("%s\n",mensaje);
#endif #endif
@ -102,10 +104,11 @@ void dll_error(int error, ...)
exit(-1); exit(-1);
} }
int EDIV_Export(char* cadena, int nparam, void* hfuncion) int EDIV_Export(char* cadena, int nparam, void* hfuncion)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -116,8 +119,7 @@ int EDIV_Export(char *cadena, int nparam, void *hfuncion)
printf("export_function:\t-- ID FUNCION: %d\n" printf("export_function:\t-- ID FUNCION: %d\n"
"export_function:\tCadena exportada: %s\n" "export_function:\tCadena exportada: %s\n"
"export_function:\tN. parametros: %d\n" "export_function:\tN. parametros: %d\n"
"export_function:\tOffset de la funcion: 0x%X\n", "export_function:\tOffset de la funcion: 0x%X\n",n_externs,cadena,nparam,(unsigned int)hfuncion);
n_externs, cadena, nparam, (unsigned int)hfuncion);
#endif #endif
/* if(creaobj) { /* if(creaobj) {
@ -148,7 +150,7 @@ int EDIV_Export(char *cadena, int nparam, void *hfuncion)
/*#define actfunc dlls[numdlls-1].ext_funcs[dlls[numdlls-1].nfuncs] /*#define actfunc dlls[numdlls-1].ext_funcs[dlls[numdlls-1].nfuncs]
actfunc.cadena=e_malloc(strlen(cadena)+1); actfunc.cadena=(char*)e_malloc(strlen(cadena)+1);
strcpy(actfunc.cadena,cadena); strcpy(actfunc.cadena,cadena);
actfunc.nparam = nparam; actfunc.nparam = nparam;
actfunc.hfuncion = hfuncion;*/ actfunc.hfuncion = hfuncion;*/
@ -159,6 +161,7 @@ int EDIV_Export(char *cadena, int nparam, void *hfuncion)
return 1; return 1;
} }
int EDIV_Export_Entrypoint(int ep, void* hfuncion) int EDIV_Export_Entrypoint(int ep, void* hfuncion)
{ {
entrypoints[n_entrypoints].tipo=ep; entrypoints[n_entrypoints].tipo=ep;
@ -167,16 +170,17 @@ int EDIV_Export_Entrypoint(int ep, void *hfuncion)
return 0; return 0;
} }
int EDIV_Export_Priority(int priority) int EDIV_Export_Priority(int priority)
{ {
dlls[numdlls].prioridad=priority; dlls[numdlls].prioridad=priority;
return 0; return 0;
} }
int EDIV_Export_Const(char* cadena, int valor) int EDIV_Export_Const(char* cadena, int valor)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -211,10 +215,10 @@ int EDIV_Export_Const(char *cadena, int valor)
return 1; return 1;
} }
int EDIV_Export_Global(char* cadena, int valor) int EDIV_Export_Global(char* cadena, int valor)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -247,10 +251,10 @@ int EDIV_Export_Global(char *cadena, int valor)
return dimem++; return dimem++;
} }
int EDIV_Export_Global_Tab(char* cadena, int numregs) int EDIV_Export_Global_Tab(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -294,10 +298,10 @@ int EDIV_Export_Global_Tab(char *cadena, int numregs)
return offset; return offset;
} }
int EDIV_Export_Global_Struct(char* cadena, int numregs) int EDIV_Export_Global_Struct(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -341,10 +345,10 @@ int EDIV_Export_Global_Struct(char *cadena, int numregs)
return dimem; return dimem;
} }
int EDIV_Export_Member_Int(char* cadena, int valor) int EDIV_Export_Member_Int(char* cadena, int valor)
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(7,cadena); dll_error(7,cadena);
return 0; return 0;
} }
@ -389,10 +393,10 @@ int EDIV_Export_Member_Int(char *cadena, int valor)
return len++; return len++;
} }
int EDIV_Export_Member_Str(char* cadena, int tamano) int EDIV_Export_Member_Str(char* cadena, int tamano)
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(7,cadena); dll_error(7,cadena);
return 0; return 0;
} }
@ -467,12 +471,13 @@ int EDIV_Export_Member_Str(char *cadena, int tamano)
len+=tamano; len+=tamano;
return offset; return offset;
} }
int EDIV_Export_Member_Tab(char* cadena, int numregs) int EDIV_Export_Member_Tab(char* cadena, int numregs)
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(7,cadena); dll_error(7,cadena);
return 0; return 0;
} }
@ -532,10 +537,10 @@ int EDIV_Export_Member_Tab(char *cadena, int numregs)
return offset; return offset;
} }
int EDIV_Export_EndStruct() int EDIV_Export_EndStruct()
{ {
if (!decl_struct) if(!decl_struct) {
{
dll_error(9); dll_error(9);
return 0; return 0;
} }
@ -574,23 +579,20 @@ int EDIV_Export_EndStruct()
// iloc+=ob->sloc.totalitems*ob->sloc.len_item; // iloc+=ob->sloc.totalitems*ob->sloc.len_item;
} }
*/ */
if (len == 0) if(len==0) dll_error(10);
dll_error(10);
if (slocal) if(slocal) diloc+=len*nregs;
diloc += len * nregs; else dimem+=len*nregs;
else
dimem += len * nregs;
decl_struct=0; decl_struct=0;
return 1; return 1;
} }
int EDIV_Export_Local(char* cadena, int valor) int EDIV_Export_Local(char* cadena, int valor)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -623,10 +625,10 @@ int EDIV_Export_Local(char *cadena, int valor)
return diloc++; return diloc++;
} }
int EDIV_Export_Local_Tab(char* cadena, int numregs) int EDIV_Export_Local_Tab(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -671,10 +673,10 @@ int EDIV_Export_Local_Tab(char *cadena, int numregs)
return offset; return offset;
} }
int EDIV_Export_Local_Struct(char* cadena, int numregs) int EDIV_Export_Local_Struct(char* cadena, int numregs)
{ {
if (decl_struct) if(decl_struct) {
{
dll_error(6,cadena); dll_error(6,cadena);
return 0; return 0;
} }
@ -719,6 +721,7 @@ int EDIV_Export_Local_Struct(char *cadena, int numregs)
return diloc; return diloc;
} }
//////////////// ////////////////
/// Call_Entrypoint /// Call_Entrypoint
////////////// //////////////
@ -727,14 +730,11 @@ int Call_Entrypoint(int ep, ...)
{ {
va_list opparam; va_list opparam;
int i,c=0; int i,c=0;
for (i = 0; i < n_entrypoints; i++) for(i=0;i<n_entrypoints;i++) {
{ if(entrypoints[i].tipo==ep) {
if (entrypoints[i].tipo == ep)
{
c++; c++;
va_start(opparam,ep); va_start(opparam,ep);
switch (ep) switch(ep) {
{
// void funcion(void) // void funcion(void)
case EDIV_set_video_mode: case EDIV_set_video_mode:
@ -812,6 +812,7 @@ int Call_Entrypoint(int ep, ...)
funcion_ep(_imem,_nombreprg,_lin,_dbg); funcion_ep(_imem,_nombreprg,_lin,_dbg);
} }
#endif /* DBG */ #endif /* DBG */
} }
} }
} }

View file

@ -63,13 +63,13 @@ void error(int num, ...)
char mensaje[256]; char mensaje[256];
va_start(opparam,num); va_start(opparam,num);
sprintf(mensaje, get_translate(0), num); sprintf(mensaje,translate(0), num);
vsprintf(mensaje,translate_runtime_error(num-100),opparam); vsprintf(mensaje,translate_runtime_error(num-100),opparam);
#ifdef _WIN32 #ifdef _WIN32
ventanuka=GetActiveWindow(); ventanuka=GetActiveWindow();
//MessageBox( //MessageBox(
MessageBox(ventanuka, mensaje, print_translate(1), MB_ICONERROR); MessageBox(ventanuka,mensaje,translate(1),MB_ICONERROR);
#else #else
printf("%s\n",mensaje); printf("%s\n",mensaje);
#endif #endif
@ -77,6 +77,7 @@ void error(int num, ...)
stub_quit(num); stub_quit(num);
} }
/* critical_error ( numero, parametros [...] ) /* critical_error ( numero, parametros [...] )
* *
* Interrumpe el programa con un mensaje de error. No es posible trazar. * Interrumpe el programa con un mensaje de error. No es posible trazar.
@ -90,11 +91,11 @@ void critical_error(int num, ...)
char mensaje[256]; char mensaje[256];
va_start(opparam,num); va_start(opparam,num);
sprintf(mensaje, get_translate(0), num); sprintf(mensaje,translate(0), num);
vsprintf(mensaje,translate_critical_error(num),opparam); vsprintf(mensaje,translate_critical_error(num),opparam);
#ifdef WIN32 #ifdef WIN32
MessageBox(0, mensaje, print_translate(2), MB_ICONERROR); MessageBox(0,mensaje,translate(2),MB_ICONERROR);
#else #else
printf("%s\n",mensaje); printf("%s\n",mensaje);
#endif #endif
@ -102,6 +103,7 @@ void critical_error(int num, ...)
stub_quit(num); stub_quit(num);
} }
/* custom_error (tipo, mensaje) /* custom_error (tipo, mensaje)
* *
* Permite a las DLLs generar sus propios errores, para que no dependan de los * Permite a las DLLs generar sus propios errores, para que no dependan de los
@ -120,7 +122,7 @@ void critical_error(int num, ...)
void custom_error(tipoerror tipo, char* mensaje) void custom_error(tipoerror tipo, char* mensaje)
{ {
#ifdef WIN32 #ifdef WIN32
MessageBox(0, mensaje, print_translate(tipo), MB_ICONERROR); MessageBox(0,mensaje,translate(tipo),MB_ICONERROR);
#else #else
printf("%s\n",mensaje); printf("%s\n",mensaje);
#endif #endif

View file

@ -25,11 +25,13 @@
*/ */
#include <assert.h> #include <assert.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
//#include <SDL/SDL.h>
#include "extern.h" #include "extern.h"
#include "edivfont.h"
//#include "kernel.h" //#include "kernel.h"
#include "inte.h" #include "inte.h"
#include "main.h" #include "main.h"
@ -46,7 +48,7 @@ int ini_interprete()
first_loaded = 1 ; first_loaded = 1 ;
pila_max = 1024 ; pila_max = 1024 ;
if ((pila=malloc(4*pila_max))==NULL) if ((pila=(int*)malloc(4*pila_max))==NULL)
critical_error(4); // no se pudo reservar memoria para la pila critical_error(4); // no se pudo reservar memoria para la pila
sp = 0 ; //por si acaso sp = 0 ; //por si acaso

View file

@ -18,19 +18,21 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
/**** ¡¡¡ OJO CON LAS COMAS !!! ****/ /**** ¡¡¡ OJO CON LAS COMAS !!! ****/
#ifdef _WIN32 #ifdef _WIN32
# include <windows.h> # include <windows.h>
#else #else
# include <stdlib.h> # include <stdlib.h>
# include <string.h> # include <string.h>
#include <stdarg.h>
#endif #endif
#include "shared.h" #include "shared.h"
#include "language.h" #include "language.h"
int detecta_idioma_iso(char* lang) int detecta_idioma_iso(char* lang)
{ {
int i; int i;
@ -42,20 +44,18 @@ int detecta_idioma_iso(char *lang)
"ca", // catalán "ca", // catalán
"eu" // euskera "eu" // euskera
}; };
if (lang == NULL) if(lang==NULL) return DEFAULT_LANGUAGE;
return DEFAULT_LANGUAGE; if(strlen(lang)>2) lang[2]=0;
if (strlen(lang) > 2)
lang[2] = 0;
strlwr(lang); strlwr(lang);
for(i=0;i<NUM_LANGUAGES;i++) for(i=0;i<NUM_LANGUAGES;i++)
if(lang[0]==getid[i][0]) if(lang[0]==getid[i][0])
if(lang[1]==getid[i][1]) if(lang[1]==getid[i][1])
break; break;
if (i == NUM_LANGUAGES) if(i==NUM_LANGUAGES) i=DEFAULT_LANGUAGE;
i = DEFAULT_LANGUAGE;
return i; return i;
} }
int detecta_idioma() int detecta_idioma()
{ {
#ifdef _WIN32 #ifdef _WIN32
@ -72,20 +72,17 @@ int detecta_idioma()
lang=GetSystemDefaultLangID()&0xff; lang=GetSystemDefaultLangID()&0xff;
for(i=0;i<NUM_LANGUAGES;i++) for(i=0;i<NUM_LANGUAGES;i++)
if (lang == getid[i]) if(lang==getid[i]) break;
break; if(i==NUM_LANGUAGES) i=DEFAULT_LANGUAGE;
if (i == NUM_LANGUAGES)
i = DEFAULT_LANGUAGE;
return i; return i;
#else #else
char* langcfg=getenv("LANG"); char* langcfg=getenv("LANG");
if (langcfg == NULL) if(langcfg==NULL) return DEFAULT_LANGUAGE;
return DEFAULT_LANGUAGE; else return detecta_idioma_iso(langcfg);
else
return detecta_idioma_iso(langcfg);
#endif #endif
} }
char* translate(int id_cadena) char* translate(int id_cadena)
{ {
static char *msg[NUM_LANGUAGES][5]= { static char *msg[NUM_LANGUAGES][5]= {
@ -97,6 +94,7 @@ char *translate(int id_cadena)
return msg[idioma][id_cadena]; return msg[idioma][id_cadena];
} }
/* /*
* NOTA: los huecos vacíos (184..199) son de errores no usados en DIV2, por favor * NOTA: los huecos vacíos (184..199) son de errores no usados en DIV2, por favor
* aprovechadlos para añadir nuevos errores. * aprovechadlos para añadir nuevos errores.
@ -112,8 +110,10 @@ char *translate_runtime_error(int num)
}; };
return e[idioma][num]; return e[idioma][num];
} }
char* translate_critical_error(int num) char* translate_critical_error(int num)
{ {
static char *e[NUM_LANGUAGES][10] = { static char *e[NUM_LANGUAGES][10] = {
@ -126,6 +126,7 @@ char *translate_critical_error(int num)
return e[idioma][num]; return e[idioma][num];
} }
char* translate_dll_error(int num) char* translate_dll_error(int num)
{ {
static char *e[NUM_LANGUAGES][10] = { static char *e[NUM_LANGUAGES][10] = {
@ -137,31 +138,3 @@ char *translate_dll_error(int num)
return e[idioma][num]; return e[idioma][num];
} }
void print_translate(int num, ...)
{
va_list arg_ptr;
const char *message = translate(num);
size_t msglen = strlen(message);
char *strbuf = malloc(msglen + 1);
va_start(arg_ptr, message);
vsprintf(strbuf, message, arg_ptr);
va_end(arg_ptr);
printf("%s", strbuf);
free(strbuf);
}
const char *get_translate(int num, ...)
{
va_list arg_ptr;
const char *message = translate(num);
size_t msglen = strlen(message);
char *strbuf = malloc(msglen + 1);
va_start(arg_ptr, message);
vsprintf(strbuf, message, arg_ptr);
va_end(arg_ptr);
return strbuf;
}

View file

@ -68,7 +68,7 @@ void dll_func() // ke original, no? XD
// guarda el nombre de fichero en la tabla de DLLs // guarda el nombre de fichero en la tabla de DLLs
printf("\nGuardando el nombre de la dll..."); printf("\nGuardando el nombre de la dll...");
dlls[0].nombre=e_malloc(strlen(fichero_dll.name)+1); dlls[0].nombre=(char*)e_malloc(strlen(fichero_dll.name)+1);
strcpy(dlls[0].nombre,fichero_dll.name); strcpy(dlls[0].nombre,fichero_dll.name);
printf("\nGuardado el nombre de la dll..."); printf("\nGuardado el nombre de la dll...");
@ -86,7 +86,7 @@ void dll_func() // ke original, no? XD
strcat(fichdll,fichero_dll.name); strcat(fichdll,fichero_dll.name);
// dlls[numdlls].nfuncs=0; // dlls[numdlls].nfuncs=0;
if(!leedll()) { if(!leedll()) {
dlls[numdlls].nombre=e_malloc(strlen(fichero_dll.name)+1); dlls[numdlls].nombre=(char*)e_malloc(strlen(fichero_dll.name)+1);
strcpy(dlls[numdlls].nombre,fichero_dll.name); strcpy(dlls[numdlls].nombre,fichero_dll.name);
dlls[numdlls].usado=0; dlls[numdlls].usado=0;
numdlls++; numdlls++;
@ -126,7 +126,7 @@ void dll_func() // ke original, no? XD
strcat(fichdll,fichero_dll->d_name); strcat(fichdll,fichero_dll->d_name);
// dlls[numdlls].nfuncs=0; // dlls[numdlls].nfuncs=0;
if(!leedll()) { if(!leedll()) {
dlls[numdlls].nombre=e_malloc(strlen(fichero_dll->d_name)+1); dlls[numdlls].nombre=(char*)e_malloc(strlen(fichero_dll->d_name)+1);
strcpy(dlls[numdlls].nombre,fichero_dll->d_name); strcpy(dlls[numdlls].nombre,fichero_dll->d_name);
dlls[numdlls].usado=0; dlls[numdlls].usado=0;
numdlls++; numdlls++;

View file

@ -155,7 +155,7 @@ int main(int argc, char* argv[])
} }
if ((mem=malloc(4*imem_max+1032*5+16*1025+3))!=NULL){ if ((mem=(int*)malloc(4*imem_max+1032*5+16*1025+3))!=NULL){
mem=(int*)((((int)mem+3)/4)*4); mem=(int*)((((int)mem+3)/4)*4);
@ -169,7 +169,7 @@ int main(int argc, char* argv[])
nullstring[3]=imem_max+1+258*3; mem[nullstring[3]-1]=0xDAD00402; nullstring[3]=imem_max+1+258*3; mem[nullstring[3]-1]=0xDAD00402;
memcpy(mem,mimem,40); memcpy(mem,mimem,40);
if ((ptr=malloc(len))!=NULL) { if ((ptr=(byte*)malloc(len))!=NULL) {
read(f,ptr,len); read(f,ptr,len);
@ -205,9 +205,9 @@ int main(int argc, char* argv[])
read(f,&num_indexed_vars,4); read(f,&num_indexed_vars,4);
read(f,&len_descomp,4); read(f,&len_descomp,4);
read(f,&len,4); read(f,&len,4);
ptr=e_malloc(len); ptr=(byte*)e_malloc(len);
read(f,ptr,len); read(f,ptr,len);
vartemp=e_malloc(len_descomp); vartemp=(byte*)e_malloc(len_descomp);
if(uncompress(vartemp,&len_descomp,ptr,len)) { if(uncompress(vartemp,&len_descomp,ptr,len)) {
free(ptr); free(ptr);
free(vartemp); free(vartemp);
@ -215,7 +215,7 @@ int main(int argc, char* argv[])
critical_error(1); // error leyendo el código del programa critical_error(1); // error leyendo el código del programa
} }
varindex=e_malloc(num_indexed_vars*sizeof(varindex_t)); varindex=(varindex_t*)e_malloc(num_indexed_vars*sizeof(varindex_t));
ptr=vartemp; ptr=vartemp;
for(i=0;i<num_indexed_vars;i++) { for(i=0;i<num_indexed_vars;i++) {
@ -244,9 +244,9 @@ int main(int argc, char* argv[])
lseek(f,start_lin,SEEK_SET); lseek(f,start_lin,SEEK_SET);
read(f,&descomp_size,4); read(f,&descomp_size,4);
read(f,&comp_size,4); read(f,&comp_size,4);
progcomp=e_malloc(comp_size); progcomp=(char*)e_malloc(comp_size);
read(f,progcomp,comp_size); read(f,progcomp,comp_size);
prog=e_malloc(descomp_size); prog=(char*)e_malloc(descomp_size);
if(uncompress(prog,&descomp_size,progcomp,comp_size)) { if(uncompress(prog,&descomp_size,progcomp,comp_size)) {
close(f); close(f);
free(prog); free(prog);
@ -255,7 +255,7 @@ int main(int argc, char* argv[])
} }
free(progcomp); free(progcomp);
read(f,&linsize,4); read(f,&linsize,4);
lin=e_malloc(linsize*4*4+4); lin=(int*)e_malloc(linsize*4*4+4);
lin[0]=linsize; lin[0]=linsize;
for(i=0;i<linsize;i++) { for(i=0;i<linsize;i++) {

View file

@ -88,7 +88,7 @@ int main(int argc, char* argv[])
fseek(f,0,SEEK_END); fseek(f,0,SEEK_END);
tamano=ftell(f); tamano=ftell(f);
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
if((buffer=malloc(tamano))==NULL) { if((buffer=(char*)malloc(tamano))==NULL) {
printf("Error: memoria insuficiente\n"); printf("Error: memoria insuficiente\n");
exit(3); exit(3);
} }
@ -140,7 +140,7 @@ int main(int argc, char* argv[])
tamano=ftell(f); tamano=ftell(f);
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
if((buffer=malloc(tamano+1))==NULL) { if((buffer=(char*)malloc(tamano+1))==NULL) {
printf("Error: memoria insuficiente\n"); printf("Error: memoria insuficiente\n");
exit(5); exit(5);
} }
@ -253,7 +253,7 @@ void situame(char* actual, char* ant, char* sig, char* sup)
tam=ftell(fi); tam=ftell(fi);
fseek(fi,0,SEEK_SET); fseek(fi,0,SEEK_SET);
if((buf=malloc(tam+1))==NULL) { if((buf=(char*)malloc(tam+1))==NULL) {
printf("Error: memoria insuficiente\n"); printf("Error: memoria insuficiente\n");
exit(14); exit(14);
} }
@ -363,7 +363,7 @@ void lee_titulo(char* fixero1, char* titulo)
tam=ftell(fi); tam=ftell(fi);
fseek(fi,0,SEEK_SET); fseek(fi,0,SEEK_SET);
if((buf=malloc(tam+1))==NULL) { if((buf=(char*)malloc(tam+1))==NULL) {
printf("Error: memoria insuficiente\n"); printf("Error: memoria insuficiente\n");
exit(11); exit(11);
} }
@ -477,7 +477,7 @@ void procesa_subindice(char* actual)
tam=ftell(fi); tam=ftell(fi);
fseek(fi,0,SEEK_SET); fseek(fi,0,SEEK_SET);
if((buf=malloc(tam+1))==NULL) { if((buf=(char*)malloc(tam+1))==NULL) {
printf("Error: memoria insuficiente\n"); printf("Error: memoria insuficiente\n");
exit(20); exit(20);
} }

View file

@ -79,7 +79,7 @@ int main(int argc, char* argv[])
exit(4); exit(4);
} }
ico=e_malloc(tamanyo); ico=(unsigned char*)e_malloc(tamanyo);
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
fread(ico,tamanyo,1,f); fread(ico,tamanyo,1,f);
fclose(f); fclose(f);
@ -92,7 +92,7 @@ int main(int argc, char* argv[])
fseek(f,0,SEEK_END); fseek(f,0,SEEK_END);
tamanyo=ftell(f); tamanyo=ftell(f);
fseek(f,0,SEEK_SET); fseek(f,0,SEEK_SET);
exe=e_malloc(tamanyo); /* no creo ke pase nada por unos 125 kb... exe=(unsigned char*)e_malloc(tamanyo); /* no creo ke pase nada por unos 125 kb...
eso si, cuando se puedan meter el PAK y eso si, cuando se puedan meter el PAK y
las DLL's en el exe, va a haber ke cambiar las DLL's en el exe, va a haber ke cambiar
esto... */ esto... */