por ROBIMEX2002 » Lun Mar 16, 2009 10:30 pm
Los nombres se guardan tal y como son, en una parte del ejecutable que después será cargada en memoria, luego este tiene una tabla de Offsets que apuntan a la memoria en si, de echo para poder saber en que parte del ejecutable se encuentra cada nombre de equipo (como cualquier otra cosa) hay que calcular el offset verdadero obteniendo el Offset virtual que hay en el ejecutable y restándole la dirección de inicio de memoria.
Lugo para saber cuando un nombre termina (la longitud del texto), se comprueba el Byte 0 o Byte vacio (NullChar de ahora en adelante) que será el final del texto.
Los nombres son guardados con más o menos relleno, a veces hay suerte y tiene más con lo que se puede escribir más y otras no, lo importante es que siempre debes dejar al menos un NullChar al final entre este y el siguiente nombre con el fin de que el programa así como el propio juego no lea más allá.
Un ejemplo:
Supongamos que los puntos son NullChar.
En el ejecutable, cada texto va seguido del otro separado por unos ceros (NullChar):
Austria....AUS..Belgium...BEL....
Esto sería para los 2 primeros equipos, seguiría así mas o menos para los demás.
El primer puntero apunta a la A de Austria, el segundo a la A de AUS, tercero a la B de Belgium.. etc.
¿Que pasaría si nos pasamos los punteros por el forro ?
Austria probando.elgium...BEL....
Al leer Austria, leería "Austria probando" ya que el primer NullChar está despues de la "o".
Al leer el nombre corto AUS, leería "bando" (el puntero es el mismo y la byte 0 está después de la o)
Al leer Belgium, que leería? nada. ¿nada? si, porque en ese puntero hay un NullChar nada más llegar, así que no llegaría a leer más allá.
Desastroso verdad?
Entonces mejor no comerse los punteros. si entre Austria.... y AUS hay 11 bytes usemos estos.
Vale pero hay otro problema, el NullChar de división.
Si ponemos:
Austria 123AUS..Belgium...BEL....
Leeríamos "Austria 123AUS", "AUS", "Belgium", esto también quedaría feo.
Así que en definitiva solo hay 10 bytes de espacio:
Austria 12.AUS..Belgium...BEL....
Leeríamos, "Austria 12", "AUS", "Belgium"...
Así sería lo correcto.
Si esá chunga la cosa, ya no creo que sea un fallo del programa , pero, se podrían cambiar los punteros de forma que se pueda meter más texto ?
Buena pregunta...
Si, se podría... Pero, (siempre hay peros)
Hay otro problema. Si comenzamos a modificar los punteros, y meter lo que nos plazca, al final nos comeremos varios nombres de equipos.
Puesto que esto es una tabla y como tal tiene un tamaño, digamos 500 bytes y todos están ocupados por nombres, si le damos más tamaño a un nombre hay que quitarle a otro para compensar.
posdata es un texto que lei de abscroll cuando estaba viendo sobre el tema del sles,saludos jugon