HispaMSX

Re: [hispamsx] Programa en C para MSX (hilo de www.msx.org)

2006-09-10 19:38:20
David Lucena escribió:
La versión con punteros también me funciona. Una curiosidad: ¿Las variables que usas son globales o locales a la función? Estas que ahora uso son locales por lo que las define en pila. Si son
globales quizá esté en el tratamiento de éstas el bug.

      int i;
      int i2;
      int i3;
      int pos_ult;
      int pos_prim;
      int pos_nick;
      char tempchar[1];
      char buf[100];
buf[0] = '\0'; putchar( 0x1b );
      putchar( 0x45 );
      LOGLN("Begin");
pos_nick = 13;
      i3 = pos_nick;
      pos_prim = 0;
      i = 100;

      printf( "pos_nick %d\n\r", pos_nick );
      printf( "i3 %d\n\r", i3 );
      printf( "pos_prim %d\n\r", pos_prim );
      for( i2=pos_prim+1; *((int*)(&i2)) < pos_nick; i2++ )
      {
            LOGLN("Inside");
tempchar[0] = ((char*)0x8000)[i2];
            printf( "Enviar version %c\n\r", tempchar[0] );
      }
      printf( "pos_nick %d\n\r", pos_nick );
      printf( "i3 %d\n\r", i3 );
      printf( "pos_prim %d\n\r", pos_prim );
      printf( "i2 %d\n\r", i2 );

      printf( "Hola\r\n" );
while(1);


El bug es mas difícil aun de tratar por eso me tiene loco, si compilo la versión 09 de c-irccom no falla (al menos en ese punto que es donde el cliente de irc responde a un CTCP VERSION) pero en este que es la versión 10 si falla. Aun peor falla aquí y en otros puntos del programa no, por eso llegue a la conclusión que decía antes de la contaminación de las variables. Esto seria el caso del png: el for de 1 a 12 el índice no contiene en realidad un 1 aunque al imprimirlo si salga, voy a acceder por punteros a nivel byte en vez de int a las variables y así ver el valor real de la variable en memoria, aunque lo único que podría ser en vez de 1, -1, con lo cual seguiría funcionando el for: (-1 a 12). El problema podría estar en el 12 que fuese -12 entonces si que debería pasarse el for de largo: (1 a -12), pero resulta que el nuevo truco (por punteros) solo afecta al 1, (supongo que ya nadie me sigue).


Bueno, las variables son globales y todo esta en la función main. Adjunto los fuentes tal y como estan, fallan todos los comandos ctcp (toda esa area), pero los for por ejemplo que scanean al principio de cada bucle del programa lo que se ha recibido (linea 339) para encontrar cada parte del mensaje (usuario/canal de origen/destino, comanto ctcp, etc), o los de (linea: 646, 660, 669) que imprimen por pantalla los mensajes de los usuarios y el servidor, si funcionan, y son las mismas variables siempre.

Una locura vamos.

He subido toda la carpeta del programa, dentro va el fuente y todo los resultados de la compilación.

http://hideoworld.iespana.es/msx/irc.rar

No le recomiendo a nadie que use lo que hay dentro en el msx pues esta en estado catastrófico, aunque si hay algún valiente alla el.


Un saludo.

<Anterior en la conversación] Conversación actual [Siguiente en la conversación>