Main procedure was not defined(EOF)

Started by HaCkZJuaNN, December 20, 2008, 12:11:21 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

HaCkZJuaNN

Tengo este código:

[code language="bennu"]
import "mod_say.dll"
import "libvideo.dll"
import "librender.dll"
import "mod_key.dll"
import "mod_video.dll"

include "C:\Archivos de programa\JSoftware\JSciences\JMath\JMath.prg"
include "C:\Archivos de programa\JSoftware\JUtilities\JDisplay3D\JDisplay3D.prg"

private
   jdisplay3d_camara camara_principal;
   jmath_vector_3d posicion;
   jmath_vector_2d posicion_resultante;
end

begin
   set_mode(1024,768,16,mode_window);
   set_fps(0,0);
   
   graph = load_map("C:\Archivos de programa\JSoftware\JSciences\JPhysics\esfera.map");
   
   write_var(0,1000,750,2,fps);

   camara_principal.posicion.x = 0;
   camara_principal.posicion.y = 0;
   camara_principal.posicion.z = 0;
   camara_principal.angulo_XY = 0;
   camara_principal.angulo_YZ = 0;
   camara_principal.angulo_XZ = 0;
   camara_principal.distancia_pantalla = 500;
   
   posicion.x = 500;
   posicion.y = 200;
   posicion.z = 300;
   
   while(!key(_esc))
      jdisplay3d_coordenadas_pantalla(posicion,camara_principal);
      
      x = 512+posicion_resultante.x;
      y = 384-posicion_resultante.y;
      
      frame;
   end
end
   
[/code]

y me da el siguiente error: "...pruebas.prg:8:error:Main procedure was not defined(EOF)", además de un montón de warnings por variables redeclaradas, aunque creo que eso no es importante. (La línea 8 es la del primer include)

Es absurdo, porque ni el fin del archivo está en la línea 8 ni el main procedure no está definido(se puede ver claramente que hay un begin y un end del proceso principal).

Es con la wip 15(creo) de windows.

También he probado a añadir "Program pruebas;" antes y después del include, y no hay ningún cambio. Parece una tontería, pero no logro dar con el problema.

Gracias por todo.

SplinterGU

include e import necesitan ";"
luego no se que tenes en esos includes.
No es absurdo, hay que ver que tenes en los includes, ya que podes tener algun bloque mal cerrado, entonces el begin que tenes en el principal puede no ser considerado como el main.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

HaCkZJuaNN

No es problema de los includes, he probado comentándolos y me salta el mismo error, pero en la línea del último import. Obviamente al comentar los includes, si corrigiera ese fallo me saltarían otros por haberlos quitado, pero el primero que me sale es el mismo, luego el problema no tiene que ver con eso.

SplinterGU

obviamente no es una prueba valida, porque faltan las definiciones de los tipos de datos que estas usando.
sigue siendo valido el error, hay que tener el codigo completo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

no puedo probar el codigo completo, porque no lo pusiste, por lo menos deberias poner las estructuras, para poder probar, pero proba paso a paso, esto:

1) quitale el .dll a los import
2) pone ";" en los include y import, a menos que uses "#" para los includes, el import debe llevar ";"
3) no uses paths absolutos, usa paths relativos y barras de division no barras invertidas.

luego, cuando pongas un ejemplo con un bug, pone algo completo y compilable... y si estas tan seguro de que esto o aquello no es el problema y que es otro, por favor decime cual es el problema... cuando digo algo de probar o esto o aquello, aunque parezca absurdo, para mi tiene mucho sentido, porque conozco como es internamente esto, entonces las preguntas que hago me guian a donde puede estar el problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

HaCkZJuaNN

Vale, el problema estaba en las extensiones de los imports, al quitar ".dll", funciona sin problemas.

Ahora me surge una nueva duda, siguen sin poderse hacer functions que retornen un dato de un tipo definido por el usuario? He probado y he comprobado que con strings sí funciona. Me explico:

Esto sí funciona:

[code language="bennu"]
function string minombre()
begin
    return "Fulanito";
end

begin
    say(minombre());
end
[/code]

Pero esto no:
[code language="bennu"]
type vector
    float x;
    float y;
end

function vector mivector()
private
    vector resultado;
end
begin
    resultado.x = 1;
    resultado.y = 2;
   
    return(resultado);
end

private
    vector v;
end
begin
    v = mivector();
    say(v.x);
end
[/code]

Y ni que decir tiene que si en vez de eso, al final pongo esto:
[code language="bennu" options="singleline"]say(mivector().x)[/code]

funciona todavía menos.

Creo que esto debería poder funcionar así, ya que por ejemplo si nos fijamos en Visual Basic, este tiene un follón de tipos de variables distintas(propias del lenguaje, eso sí, pero realmente no veo la diferencia), y te permiten hacer todas estas cosas tratando a todos los tipos de variables por igual, y sobre todo, creo que si esto no se permite o no funciona, el lenguaje pierde su carácter matemático y lógico.

Un saludo y gracias por todo.

SplinterGU

en teoria no deberia retornar un dato definido por el usuario, si funciona estamos en un problema... no olvides que esto es bennu, no es visual basic... posiblemente te devuelva el puntero al dato, aunque si este es local al proceso, se va a destruir cuando este muere, pero si usas un malloc quizas te retorne el puntero a ese dato...
no empecemos con charlas filosoficas de que deberia ser o no, que es logico o no, porque hay lenguajes que manejan datos por valor o por referencia, bennu maneja los datos por referencia... asi que no hay nada ilogico en esto... por el contario es ilogico pensar en que porque algo funciona de una manera en un lenguaje, en todo el resto debe funcionar igual.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

HaCkZJuaNN

Bueno, si quieres no entro en una discusión filosófica, pero si esto no se permite algunas acciones se complican muchísimo y algo que se podría realizar en una sola línea ocupa 10 líneas y hay que declarar un montón de variables que no harían falta, y un montón de punteros de por medio, "&"s y "*"s, etc... Por ejemplo, siguiendo el ejemplo de los vectores, si quiero hacer operaciones con vectores(sumar vectores, producto vectorial, por ejemplo), la misma cadena de operaciones, si funcionara lo que yo propongo:

[code language="bennu"]
private
    vector v1;
    vector v2;
    vector v3;
end
begin
    v1.x = 2;
    v1.y = 3;
    v2.x = 1;
    v2.y = 4;

    v3 = suma(v1,producto_vectorial(suma(v1,v1),suma(v1,v2)));
end
[/code]

Mientras que con punteros sería:

[code language="bennu"]
private
    vector v1;
    vector v2;
    vector v3;
    vector v4;
    vector v5;
    vector v6;
end
begin
    v1.x = 2;
    v1.y = 3;
    v2.x = 1;
    v2.y = 4;

    suma(v1,v1,&v3);
    suma(v1,v2,&v4);
    producto_vectorial(v3,v4,&v5);
    suma(v1,v5,&v6);
end
[/code]

Yo sólo estoy diciendo que sería mucho más intuitivo y útil, pero entiendo que si realmente no se puede debido a la estructura del lenguaje, pues no te comas el coco para incluirlo, pero lo que no quiero es que te niegues en rotundo sino que lo consideres, si es posible.

Ya sé que lo que funciona en un lenguaje no tiene porque funcionar en todos, era sólo por poner un ejemplo de lo que es más intuitivo y fácil de usar.

Un saludo.

SplinterGU

#8
Te olvidas de algo muy basico, la performance y el stack...
Partiendo de la base de que en computacion, todo lo que sea virtual, se puede hacer, con menor o mayor rendimiento o requerimientos de recursos, mas o menos trabajo... Lo que sucede es que muchas veces para evitar dar una larga explicacion de cosas y por qué es mejor esto o aquello, me resulta mas simple decir "no se puede..."
Por ejemplo, hacer lo que vos decir se podria hacer, no esta actualmente preparado Bennu para eso, filosoficamente tiene otro comportamiento logico (que no es incoherente)... pero para hacerlo, requeriria tocar bastante codigo, y con la consiguiente ruptura de compatibilidad de comportamiento logico que lleva actualmente.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

HaCkZJuaNN

De acuerdo, bajaré la cabeza y lo haré así...

SplinterGU

Fixed extension problem with import statement
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

osk

Hola.
Vuelvo a reflotar este tema porque resulta que estoy intentando (re)compilar la librería de sqlite de Coldev para Bennu (y así tenerla en Linux también pero no tengo mucha idea y me cuesta muchooo!!!) y resulta que me en ejecutar un prg de prueba me sale el error que da título a este post.
He averiguado que  el error lo causa alguna de las líneas siguientes de módulo sqlite, porque si las comento ya da otro error:

char * __bgdexport( mod_sqlite3, globals_def ) =
   "TYPE SqlResult\n"
   " int cols;\n"
   " int rows;\n"
   " int currentRow;\n"
   "END;\n" ;

DLVARFIXUP  __bgdexport( mod_sqlite3, globals_fixup )[] =
{
   { "SqlResult.cols", NULL, -1, -1 },
   { "SqlResult.rows", NULL, -1, -1 },
   { "SqlResult.currentRow", NULL, -1, -1 },
   { NULL, NULL, -1, -1 }
};


En principio, la idea de las líneas anteriores era poder tener un TYPE para poderlo usar en cualquier código Bennu.

Muchas gracias por adelantado.

SplinterGU

por el momento no se pueden definir type desde una dll.

es un TODO
Download Lastest BennuGD Release: http://www.bennugd.org/node/2