Página 1 de 2

Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 19:57
por dondiego
Tengo que compilar un código en pascal y me da un montón de errores, es de una utilidad que necesito para un proyecto del doom que tenía abandonado, quiero pasar el ejecutable dos a uno de consola de windows para que funcione en SO modernos. He pillado el dev-pascal que trae el freepascal pero nada. El código ofensivo es este:

Re: Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 20:05
por calantra
Es pascal.

Re: Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 20:12
por dondiego
Gracias, lo suponía. Ahora cómo lo compilo?

Re: Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 20:15
por jltursan
Usando flags de compilacion y con ensamblador embebido me temo que toca averiguar con que compilador exacto se compilaba el original y con eso, buscar la explicacion de cada flag especificado. Luego buscas los equivalentes del freepascal y listos (casi na)

Este es justo el trabajo habitual en cualquier migracion, estas cerquita pero siempre te da por saco lo justo para amargarte un par de dias ;-)

Re: Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 20:32
por zup
Pues yo empezaría a probar con los switches -Mtp (compatibilidad con Borland Pascal o Turbo Pascal) y -Mdelphi, a ver qué pasa. Además de eso (suponiendo que el origen sea Borland/Turbo Pascal, que es muy probable) quizás necesites echar un ojo a este artículo.

Re: Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 20:49
por dondiego
La compatibilidad con turbo pascal ya estaba puesta, he cambiado la sintaxis de ensamblador a intel y la cosa ha mejorado pero me da error de '16 bit references not supported', el asm lo tengo algo oxidao (y todo).

Re: Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 20:55
por zup
Pues por ahí van los tiros. Imagino que Freepascal solo soporta hacer código de 32 bits.

¿Necesitas que funcione o portarlo a sistemas modernos? Si te vale con que funcione, puedo pasarte un Turbo Pascal a ver si te vale; si no... vas a tener que reescribir las partes en ensamblador.

Re: Qué es esta mierda? (PASCAL?)

Publicado: 04 May 2016, 21:14
por dondiego
También dice 'invalid effective address'. El original es un ejecutable dos de 16 bits, yo quiero generar código win32 que funcione en windows 7. Hay que ver qué cambios tengo que hacer.
Edito: De todas formas me da un error de identificador desconocido 'PrefixSeg' así que el código está mal.

Re: Qué es esta mierda? (PASCAL?)

Publicado: 05 May 2016, 01:12
por mcleod_ideafix
dondiego escribió:También dice 'invalid effective address'. El original es un ejecutable dos de 16 bits, yo quiero generar código win32 que funcione en windows 7. Hay que ver qué cambios tengo que hacer.

Pues de momento, olvidarte de ese código en ensamblador, que sólo funciona en modo real y con 16 bits. No usa ninguna cosa especial, así que lo suyo es inferir qué hace y reescribirlo en PASCAL. Hay un primer bloque de ensamblador que parece ser que busca unas variables de entorno: eso también tendrás que hacerlo en PASCAL.

Re: Qué es esta mierda? (PASCAL?)

Publicado: 05 May 2016, 10:09
por Uto
Despues de años programando en Pascal, te puedo decir al 99% seguro que eso es Turbo Pascal.

Por lo demás, ya te han dicho todo. La primera funcion en ASM existe en freepascal (GetEnv, unidad DOS == > http://www.freepascal.org/docs-html/rtl/dos/getenv.html)

En cuanto a la funcionalidad de que si le pasas '' como parámetro devuelva el full path del ejecutable, siempre que solo quieras compilar para Win32 puedes usar ParamStr(0) que da exactamente eso. Si quieres que sea portable es un poco más lioso, especialmente en linux pero también en OSX tiene su aquel. Aquí puedes ver como lo solucioné yo recientemente para otro programa:

https://github.com/Utodev/ngPAWS/blob/m ... config.pas (en la función TConfig.FullPath)

Las otras funciones en ensamblador, como ya te han dicho, primero te toca entender que hacen y así pasarlas a pascal.