ARCHIVO HTML DE HISTORIA =========================== La historia del hispascal comienza una aburrida tarde en la que pensé: ¿Por qué no hacer un pascal en Español? Conocía desde hace tiempo el freepascal que tenía el codigo abierto así que me dije: Cambio el archivo donde tienen especificadas las palabras reservadas y aú, ya está traducido. Ja... Tras varios intentos con un archivo llamado tokens.pas consegui cambiar muchos de ellos, pero... el compilador no me compilaba porque necesitaba el rtl (run time library) ahora traducido a las nuevas palabras reservadas. Y... había muchos archivos... y qué mal... eso era perder tiempo manualmente traducir todos los archivos. Al principio pensé en hacerme un traductor de palabras reservadas para traducirlo pero me dijé: ¿Por qué reinventar la rueda? Así que primero les pregunté a los del freepascal en un foro por algun trozo del codigo del IDE que tienen del fp, concretamente con la función reemplazar... bueno muy complicado. Luego me encontré un programa llamado "Another pas to html converter" ¡Guauh! Era bastante fácil de entender así que... tras una primera versión que tiraba mucho de disco duro (ficheros), hize otra que usaba listas enlazadas con lo que iba mucho más rápida. Está version es la versión del pashis.exe que ahí hoy en día pero tiene algun fallo cuando se encuentra algun numero en algun comentario. Pero bueno... ahí está y me ahorro mucho trabajo. A la hora de trabajar con el hispascal "a mano" como hay que trabajar ahora hay tres fases: 1- Modificar el codigo fuente del nuevo compilador 2- Modificar el rtl del nuevo compilador 3- Compilar (y más cosas) para crear el nuevo compilador. 4- Probar a compilar archivos hispascal (muy simples e ir complicandolos) con el nuevo compilador e ir probandolos. 5- Volver al 1 y al 2 hasta que salga bien. 6- Modificar el codigo fuente de algunas librerias muy usadas como puede ser la crt. 7- Otras cosas antes del lanzamiento al publico. Segun creo estoy en el 84% o así de conseguir que compile cualquier cosa. Así que vayamos por el punto 1: ARCHIVO HTML DEL MODIFICAR EL CODIGO FUENTE DEL NUEVO COMPILADOR ================================================================================= Modificar el codigo fuente del nuevo compilador ================================================ Veamos tenemos el codigo fuente del freepascal... pero necesitamos generar uno nuevo. Bueno yo trabaja en el directorio d:\bailalo\s6 por razones que no vienen a cuento... y en d:\bailalo\s6\pp tenía el codigo fuente del freepascal. Así lo que hize fue hacerme una copia al pp2. (¿Por qué no pp2... el segundo... rapido de escribir?) Así que así estamos. d:\bailalo\s6\pp d:\bailalo\s6\pp2 Bueno... todo empezo como decía con el tokens.pas... PONERLO AL PRINCIPIO DEL MODIFICAR EL CODIGO.... ===== Antes de todo. Vamos a ver los buenos programadores como los del freepascal conforme van cambiando el codigo fuente lo ponen en forma de comentario abajo del codigo... como yo creía que en dos días estaba hecho no lo hize. Así que estos cambios conforme me acuerde estarán en estos html o txt si no los llego a pasar a html. === FIN DE PONERLO AL .... De momento todos los cambios que comente son cambios ya realizados... cuando no estén realizados se especificará ad hoc. Aunque creía que todos los cambios los había realizado en pp2 la cosa es que los cambios relativos al compilador están hechos en pp\source\compiler y todo lo relativo al rtl está hecho en pp2\source ... um... quizas en el futuro haya que cambiarlo pero por ahora no merece la pena... porque si lo hice así sería por algo. pp\source\compiler\tokens.pas El tokens.pas tiene 3 o mas cambios: 1) Tiene una matriz con palabras reservadas en ingles (las que no están con un _ al principio) están hay que traducirse al español cuidando dos cosas: a) Han de estar en orden, primero en tamaño y luego por igual tamaño en orden alfabetico. Es decir primero se ordena segun la longitud de la palabra y ante dos palabras de la misma longitud se pone primero la que iría antes en una ordenación alfabetica. b) Las palabras reservadas tal cual las vemos en pascal equivalen a una matriz más arriba, que son las palabras tal cual pero con un _ delante de ellas. Por ejemplo, no sé, function tendrá su equivalente como: _function. Está matriz superior habrá que ordenarla de tal manera que concuerde con la inferior (palabras tal cual) que en el apartado anterior hemos ordenado. 2) y 3) Cuando se definen las matrices en el tokens.pas original hay dos lineas que especifican desde 2 hasta el "la maxima longitud de palabra reservada". Bueno pues como en Español tenemos las conjunciones o e y, que son las que vamos a usar en vez de OR y AND. Así que esos 2 hay que cambiarlos a 1. 4) Si os fijais bien hay unos comentarios primero con unos numeros sin orden y otros con orden... son claro para no perder el orden de correspondencia entre las dos matrices citadas anteriormente. Hay además una traducción explicita en cada linea cambiada. (Por ejemplo: GOTO --> VESA) 5) Introduje una función o una serie de instrucciones para comprobar que el tokens.pas iba bien, crea un fichero que no sirve para nada. Estas instrucciones son: === Instrucciones procedure create_tokenidx; { create an index with the first and last token for every possible token length, so a search only will be done in that small part } var t : ttoken; miarchivo : text; (*file of string[tokenidlen];*) begin assign(miarchivo,'reserva.txt'); rewrite(miarchivo); fillchar(tokenidx^,sizeof(tokenidx^),0); for t:=low(ttoken) to high(ttoken) do begin if not arraytokeninfo[t].special then begin if ord(tokenidx^[length(arraytokeninfo[t].str),arraytokeninfo[t].str[1]].first)=0 then begin(* Para que solo escriba con el if*) tokenidx^[length(arraytokeninfo[t].str),arraytokeninfo[t].str[1]].first:=t; write(miarchivo,(arraytokeninfo[t].str)); writeln(miarchivo,''); end;(* Para que solo escriba con el if *) tokenidx^[length(arraytokeninfo[t].str),arraytokeninfo[t].str[1]].last:=t; end; end; close(miarchivo); end; === Fin de instrucciones ===Estas instrucciones hay que compararlas con el tokens.pas no vaya a ser que hayamos borrado una cosa que estaba bien del tokens.pas y la hayamos "cagado". === ===Esto ponerlo con el color "Te estoy contando una historia" No tarde en darme cuenta que aunque cambiase todo el rtl a las nuevas palabras reservadas el tokens.pas no era el unico que influia. === Esto ponerlo... fin Nota: La correspondencia de las palabras claves del Pascal al Hispascal están en los archivos antes.txt(Para Pascal) y despues.txt (Su equivalente en Hispascal) del directorio s6\cambiar tokens ===El antes.txt y despues.txt hay que ponerlos como dos html y diferentes y luego en forma de tabla en un solo html====== Aquí adjunto "copiado y pegado" el antes.txt y el despues.txt antes.txt ========== OR AND IN IS XOR MOD AS AT OR AND OF IN IS NOT XOR IF WITH ASM END DO READ MOD USES CASE AS NIL ELSE TYPE GOTO FOR DOWNTO NEAR CLASS FAIL FALSE TO FAR STRING NEW SET EXIT ON FORWARD INDEX BEGIN NAME OBJECT REPEAT BREAK UNIT ARRAY TRUE FILE DEFAULT WRITE EXCEPT EXPORTS EXTERNAL FINALLY FUNCTION MESSAGE PRIVATE PUBLIC SELF SYSTEM ABSOLUTE CPPCLASS CONTINUE DYNAMIC THEN LABEL EXPORT STORED UNTIL INHERITED INTERFACE LIBRARY SYSCALL STDCALL WHILE OPERATOR PROGRAM RECORD REGISTER ABSTRACT IOCHECK NODEFAULT ASMNAME OTHERWISE PROPERTY PROTECTED PUBLISHED RESIDENT RESULT OVERLOAD ASSEMBLER INLINE INTERRUPT SAFECALL INTERNPROC FINALIZATION RESOURCESTRING PROCEDURE OPENSTRING IMPLEMENTATION INITIALIZATION SAVEREGISTERS STATIC TRY WRITE WRITELN ASSIGNED READ READLN OFS SIZEOF TYPEOF LOW HIGH SUCC EXCLUDE INCLUDE BREAK CONTINUE STR ASSERT ADDR void word ulong longint qword int64 char widechar shortstring longstring ansistring widestring openshortstring boolean void_pointer char_pointer void_farpointer openchararray file s32real s64real s80real parent length mlength SINGLE DOUBLE EXTENDED POINTER FARPOINTER SHORTSTRING LONGSTRING STRINGANSI WIDESTRING BOOLEAN BYTEBOOL WORDBOOL LONGBOOL CHAR WIDECHAR TEXT INT64 TYPEDFILE openchararray DWORD NEAR FAR LABEL LLABEL INTEGER shortint smallInt longword ===Fin del antes.txt ==== despues.txt =========== O Y EN ES OR RES COMO A O Y DE EN ES NO OR SI CON ENS FIN HAZ LEE RES USA CASO COMO NULO SINO TIPO VESA PARA BAJAA CERCA CLASE FALLO FALSO HASTA LEJOS LINEA NUEVO PONER SALIR SOBRE EMPUJA INDICE INICIO NOMBRE OBJETO REPITE ROMPER UNIDAD VECTOR VERDAD ARCHIVO DEFECTO ESCRIBE EXCEPTO EXPORTA EXTERNO FINALME FUNCION MENSAJE PRIVADO PUBLICO SIMISMO SISTEMA ABSOLUTO CLASECPP CONTINUA DINAMICO ENTONCES ETIQUETA EXPORTAR GUARDADO HASTAQUE HEREDADO INTERFAZ LIBRERIA LLAMASIS LLAMASTD MIENTRAS OPERADOR PROGRAMA REGISTRO REGISTRAR ABSTRACTO CHEQUEOES NODEFECTO NOMBREENS OTRAFORMA PROPIEDAD PROTEGIDO PUBLICADO RESIDENTE RESULTADO SOBRECARGA ENSAMBLADOR ENTRELINEAS INTERRUMPIR LLAMASEGURA PROCINTERNO FINALIZACION STRINGFUENTE PROCEDIMIENTO STRINGABIERTO IMPLEMENTACION INICIALIZACION SALVAREGISTROS ESTATICO PRUEBA ESCRIBE ESCRIBELN ASIGNADO LEE LEELN DES DETAMANO DETIPO BAJO ALTO SUC EXCLUYE INCLUYE ROMPER CONTINUA LIN ASERT DIREC vacio palabra largou entlargo palq ent64 car caramplio lincorta linlarga linansi linamplia lincortaabierta booleano puntero_vacio puntero_car punterolejano_vacio vectorcarabierto archivo reals32 reals64 reals80 padre longitud mlongitud SIMPLE DOBLE EXTENDIDO PUNTERO PUNTEROLEJANO LINCORTA LINLARGA LINANSI LINAMPLIA BOOLEANO BOOLBYTE BOOLPAL BOOLLARGO CAR CARAMPLIO TEXTO ENT64 ARCHIVOTIPADO vectorcarabierto PALD CERCA LEJOS ETIQUETA ETIQUETAL ENTERO entcorto Entpequeno pallarga ====Fin de despues.txt==== ===Te cuento una historia Vamos a ver a parte del tokens.pas tambien modifique otros archivos, lo que como no estoy seguro cogeré los que me parezcan que no serán seguramente todos. De momento veo que en el directorio: bailalo\s6\ppesp hay de esos archivos que son como copias de seguridad de archivos que seguramente haya modificado. Estos son: scanner.pas ra386att.pas ra386dir.pas psystem.pas symtable.pas === Fin te cuento... ==== bailalo\s6\pp\source\compiler\scanner.pas ===Descripción de archivo Este archivo creo que comprueba la sintaxis o al menos la traduce a tokens para que el freepascal la pueda entender. ===Fin descripción de archivo En la función: function is_keyword(const s:string):boolean; if not (length(s) in [1..tokenidlen]) then (* Cambio el 1 por el 2 para que admita tokens de 1 char *) En la función: {**************************************************************************** Token Scanner ****************************************************************************} procedure tscannerfile.readtoken; if (pattern[1]<>'_') and (length(pattern) in [1..tokenidlen]) then (* Cambio el 2 por el 1 para que admita tokens de 1 char *) ==== Para el futuro scanner.pas se podría usar para sustituto del pashis. Pero eso más en adelante. === Fin de Para el futuro ==== bailalo\s6\pp\source\compiler\ra386att.pas En: const cambio: token2str : array[tasmtoken] of tasmkeyword=( (* Cambio .word por .palabra *) (* Cambio .text por .texto *) (* Cambio integer por entero *) '','Label','LLabel','string','entero', 'float',',','(', ')',':','.','+','-','*', ';','identifier','register','opcode','/','$', '.byte','.palabra','.long','.quad','.globl', '.align','.balign','.p2align','.ascii', '.asciz','.lcomm','.comm','.single','.double','.tfloat', '.data','.texto','FIN', (* Cambio por end por fin y type por tipo *) 'TIPO','%','<<','>>','!','&','|','^','~'); === Para el futuro Ojo con el FIN que está en mayusculas habrá que mirar como estaba el end en el archivo original y si estaba en minusculas este pasarlo a minusculas. Podríamos cambiar algunos de estos strings para que concidan con los del tokens.pas es decir que "los cojan" de ahí para que luego para traducir a otros lenguajes sea más fácil. En ra386att.pas probablemente haya más cambios, pero mirandolo por encima no he encontrado nada. === Fin de Para el futuro === bailalo\s6\pp\source\compiler\ra386dir.pas Aparentemente este no está modificado. Habrá que mirar en el directorio ppesp si se hizo alguna modificación y... lo miro y aparentemente nada. Pero otro día hay que mirarlo con mayor detenimiento. === bailalo\s6\pp\source\compiler\psystem.pas === Te cuento una historia Aqui la fecha está cambiada así que seguro que hay algún cambio === Fin de Te cuento una historia Viendo el archivo se ve claramente lo que he cambiado, muchas palabras claves han cambiado. === Futuro Habrá que preguntar en la lista de correo si al cambiar el psystem.pas que es el que interpreta la unidad system estamos obligando a traducir todo el rtl a hispascal cuando no hace falta. === Fin de Futuro === bailalo\s6\pp\source\compiler\symtable.pas ===Futuro Estas lineas hay que ver si se han de cambiar y cambiarlas en su caso: const overloaded_names : array [first_overloaded..last_overloaded] of string[16] = ('plus','minus','star','slash','equal', 'greater','lower','greater_or_equal', 'lower_or_equal', 'sym_diff','starstar', 'as','is','in','or', 'and','div','mod','not','shl','shr','xor', 'assign'); Además: No encuentro nada cambiado en un futuro hay que mirar porque seguro que hay algo cambiado ===Fin de Futuro 2- HTML DEL Modificar el rtl del compilador =================================== Esto no tiene ningun secreto es coger palabra reservada por palabra reservada, y no strings, salvo excepciones... e ir traduciendo. Para eso usamos la utilidad PASHIS y luego verificamos que se ha traducido bien al compilar y ver los fallos que suelen ser: a) Variables del pascal antiguo que ahora pasan a ser palabras reservadas. Es decir por ejemplo la variable vesa en pascal es una palabra reservada en hispascal. Y como bien sabeis las palabras reservadas no se pueden usar como variables y mejor así porque sino no detectaríamos los fallos. === REGLA A SEGUIR PROPIA DEL HISPASCAL Así que la regla a seguir es: añadir al principio la primera letra de la palabra. vesa pasa a ser vvesa. === FIN REGLA... b) Numeros de los comentarios, normalmente del final, que se traducen mal... hay que arreglarlos manualmente respetando el comentario original de los desarrolladores del freepascal. ESTO A DE ESTAR AQUI DENTRO DEL MODIFICAR EL RTL... Y A LA VEZ COPIADO EN UN HTML APARTE TITULADO... COMO USAR LA UTILIDAD PASHIS USO DE LA UTILIDAD PASHIS ========================== ===Te cuento una historia -- Inicio El PASHIS no tiene una mierda de comentarios... quizas alguno. Pero es un ejemplo de lo que no se debe hacer en programación. Pero para mi representa una proeza porque consegui que gracias al algoritmo de otro para aislar palabras reservadas poder cambiarlas y... así poder traducir el hispascal. Si necesitais usar el codigo mandadme un email con lo que no entendais. E intentaré que lo entendais. Ah, y encima el codigo está mitad en ingles y en español, ya la ostia hay que saber 3 idiomas para entenderlo: pascal, inglés y español. ===Te cuento una historia -- Fin La utilidad PASHIS si no mal recuerdo se encuentra en el directorio: bailalo\s6\cambiar tokens ===Esto añadirlo como nota ==== La utilidad PASHIS tiene bugs y por ello necesita ser mejorada. El codigo fuente de la misma está en bailalo\s6\cambiar tokens El archivo principal es: pashis.pas y se necesitan estos dos archivos para poder compilarlo: upashtm.pp reser.pp En un futuro hay que hacer que funcione de la siguiente manera: ***Las variables pascal que van a ser palabras reservadas del hispascal renombrarlas como: ellas mismas y delante la primera letra de ellas. ejemplo pasa a ser eejemplo **** Y luego aplicar el algoritmo que usa ahora el programa. Hay que tener cuidado de que en el antes.txt y el despues.txt no se encuentren dos palabras iguales, es decir, por ejemplo var y var que no se traduce, porque entonces var se traduciría a vvar y nosotros no queremos eso. El antes.txt y el despues.txt solo tendrán palabras diferentes. Ya haremos una tabla html con la correspondencia entre Pascal e Hispascal incluyendo palabras reservadas que se incluyen igual. Y para que funcione en el directorio donde este el pashis se necesita el antes.txt y el despues.txt. Por eso el BAT (Más en adelante) los copia temporalmente al directorio donde los archivos que estes traduciendo. ===Fin de esto añadirlo como nota ==== Su sintaxis es: PASHIS archivo_origen.ext o PASHIS archivo_origen.ex Donde ext es una extensión de 3 letras y ex es una extensión de 2 letras. No obstante esto lo podemos automatizar con un BAT llamado: JAJA.BAT La explicación esta en el archivo como.txt que aquí "copio y pego": =Como usar el pashis mediante el jaja Sintaxis tipo: jaja jeje *.EXT UNIDAD Los *.EXT se convertiran en *.sal y entonces habra que borrar los *.ext y renombrar los *.sal a *.ext. La palabra UNIDAD habrá cambiarla por la unidad donde teneis descomprimido el zip del hispascal, es decir si lo teneis en d:\bailalo, como debería de ser para pasar en directorio los *.inc a *.sal traducidos. Así pues habría que escribir: jaja jeje *.inc D: Coge todos los *.pp por ejemplo y los convierte en *.sa Y coge todos los *.inc por ejemplo y los convierte en *.sal Recalcar que extensión de longitud 2: sa, longitud 3: sal. ¿Porque esto... tu traduces los inc por ejemplo. Corriges los sal con el original inc al lado para ver que es lo que tiene que hacer el programa... y una vez has comprobado todos los ficheros por encima borras los *.inc. Y renombras los *.sal a *.inc. Analogamente hay que hacer lo mismo con los *.pp Un esquema: *.inc ==> *.sal *.sal ==Corregimos==> *.sal Borramos *.inc Renombrarmos los *.sal a *.inc NOTA MUY IMPORTANTE SOBRE EL PASHIS PARA QUE FUNCIONE EN CUALQUIER DIRECTORIO DEBEIS AÑADIRLO EN EL PATH EN NUESTRO EJEMPLO ANTERIOR DEBEREIS ESCRIBIR: PATH=%PATH%;D:\BAILALO\S6\CAMBIA~1 Todo esto hay que repetirlo para todos los directorios del pp2 que cuelgan de source ARCHIVO HTML DEL: 3- Compilar (y más cosas) para crear el nuevo compilador. === Te cuento una historia Este es el punto del que menos me acuerdo de como se hacía. === Fin de Te cuento una historia He encontrado un archivo readme. en bailalo\s6\pp\source\compiler que me dice de ejecutar: mppc386.bat Pero este me sobreescribiría el ppc386 que tengo en ese directorio no me vale. Y me parece que no lo compilaba así. Veamos en un pdf online. http://www.freepascal.org/docs/prog.pdf Este en concreto. Y nos vamos a Compiling the Compiler yourself. Y a Compiling by hand. Hay varias opciones, seguramente haya usado varias, y me haya quedado con una de ellos. No me acuerdo cual use. Voy a copiar las instrucciones, para tenerlas presentes si alguna vez las cambian. === Extracto del prog.pdf F.4 Compiling by hand Compiling by hand is difficult and tedious, but can be done. We’ll treat the compilation of RTL and compiler separately. F.4.1 Compiling the RTL To recompile the RTL, so a new compiler can be built, at least the following units must be built, in the order specified: loaders the program stubs, that are the startup code for each pascal program. These files have the .as extension, because they are written in assembler. They must be assembled with the GNU as assembler. These stubs are in the OS-dependent directory, except for LINUX, where they are in a processor dependent subdirectory of the linux directory (i386 or m68k). system the system unit. This unit is named differently on different systems:  Only on GO32v2, it’s called system.  For LINUX it’s called syslinux.  For WINDOWS NT it’s called syswin32.  For OS/2 it’s called sysos2 This unit resides in the OS-dependent subdirectories of the RTL. strings The strings unit. This unit resides in the inc subdirectory of the RTL. dos The dos unit. It resides in the OS-dependent subdirectory of the RTL. Possibly other units will be compiled as a consequence of trying to compile this unit (e.g. on LINUX, the linux unit will be compiled, on go32, the go32 unit will be compiled). objects the objects unit. It resides in the inc subdirectory of the RTL. To compile these units on a i386, the following statements will do: ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 -Us -Sg syslinux.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/strings.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 dos.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/objects.pp These are the minimum command-line options, needed to compile the RTL. For another processor, you should change the i386 into the appropriate processor. For another operating system (target) you should change the syslinux in the appropriate system unit file, and you should change the target OS setting (-T). Depending on the target OS there are other units that you may wish to compile, but which are not strictly needed to recompile the compiler. The following units are available for all plaforms: objpas Needed for Delphi mode. Needs -S2 as an option. Resides in the objpas subdirectory. sysutils many utility functions, like in Delphi. Resides in the objpas directory, and needs -S2 to compile. typinfo functions to access RTTI information, like Delphi. Resides in the objpas directory. math math functions like in Delphi. Resides in the objpas directory. mmx extensions for MMX class Intel processors. Resides in in the i386 directory. getopts a GNU compatible getopts unit. resides in the inc directory. heaptrc to debug the heap. resides in the inc directory. F.4.2 Compiling the compiler Compiling the compiler can be done with one statement. It’s always best to remove all units from the compiler directory first, so something like rm *.ppu *.o on LINUX, and on DOS del *.ppu del *.o After this, the compiler can be compiled with the following command-line: ppc386 -Tlinux -Fu../rtl/linux -di386 -dGDB pp.pas So, the minimum options are: 1. The target OS. Can be skipped if you’re compiling for the same target as the compiler you’re using. 2. A path to an RTL. Can be skipped if a correct ppc386.cfg configuration is on your system. If you want to compile with the RTL you compiled first, this should be ../rtl/OS (replace the OS with the appropriate operating system subdirectory of the RTL). 3. A define with the processor you’re compiling for. Required. 4. -dGDB is not strictly needed, but is better to add since otherwise you won’t be able to compile with debug information. Table F.1: Possible defines when compiling FPC Define does what USE_RHIDE Generates errors and warnings in a format recognized by RHIDE. TP Needed to compile the compiler with Turbo or Borland Pascal. Delphi Needed to compile the compiler with Delphi from Borland. GDB Support of the GNU Debugger. I386 Generate a compiler for the Intel i386+ processor family. M68K Generate a compiler for the M68000 processor family. USEOVERLAY Compiles a TP version which uses overlays. EXTDEBUG Some extra debug code is executed. SUPPORT_MMX only i386: enables the compiler switch MMX which allows the compiler to generate MMX instructions. EXTERN_MSG Don’t compile the msgfiles in the compiler, always use external messagefiles (default for TP). NOAG386INT no Intel Assembler output. NOAG386NSM no NASM output. NOAG386BIN leaves out the binary writer. 5. -Sg is needed, some parts of the compiler use goto statements (to be specific: the scanner). So the absolute minimal command line is ppc386 -di386 -Sg pp.pas You can define some other command-line options, but the above are the minimum. A list of recog-nised options can be found in table (F.1). This list may be subject to change, the source file pp.pas always contains an up-to-date list. === Fin extracto prog.pdf Bueno ya está. Voy a remirarmela otra vez. Vamos a ver segun nos dice antes de poder hacer un nuevo compilador tenemos que tener compilado el rtl. Deberemos ejecutar: ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 -Us -Sg syslinux.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/strings.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 dos.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/objects.pp que traducido a lo que es nuestro DOS será: ppc386 -TGO32V2 -b- -Fi../inc -Fi../i386 -FE. -di386 -Us -Sg system.pp ppc386 -TGO32V2 -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/strings.pp ppc386 -TGO32V2 -b- -Fi../inc -Fi../i386 -FE. -di386 dos.pp ppc386 -TGO32V2 -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/objects.pp Creo que no me equivoco al poner como target GO32V2, DOS no me suena como tal. Vale y cambio el syslinux.pp por system.pp Ahora me surge la duda donde demonios (en que directorio) ¿hay que ejecutar esto? Bueno vamos a suponer... que lo hacemos en ... tal y como están los directorios no veo donde hay que hacerlo... bueno... creo que el rtl al final no lo compile. Este punto más tarde lo revisaré. === Futuro En fpc-devel Preguntar la mejor manera de compilar un nuevo compilador con un nuevo rtl y si ese rtl hay que cambiarlo o no. === Fin de Futuro Vayamos con compilar el compilador. Primero en el directorio del compilador: bailalo\s6\pp\source\compiler *** Nota Para que esto funcione ha de estar en el path, el ppc386 que es el compilador original del pascal que se encuentra en: bailalo\s6\pp\bin\go32v2 Por ejemplo, para añadir el path sería: path=%path%;d:\bailalo\s6\pp\bin\go32v2 *** Fin Nota hay que borrar los *.ppu y los *.o del *.ppu y del *.o Luego la instrucción: ppc386 -Tlinux -Fu../rtl/linux -di386 -dGDB pp.pas que será para nosotros: ppc386 -TGO32V2 -Fu..\rtl\go32v2 -di386 -dGDB pp.pas He estado mirando y... el directorio bailalo\s6\pp\source\rtl\go32v2 no existe... voy a suponer que... YA ME ACUERDO... Compile el compilador sin el rtl. Y esto se hace así: ppc386 -di386 -Sg pp.pas en el directorio: bailalo\s6\pp\source\compiler Esto te crea, si va bien que aun no lo he comprobado, un pp.exe que es el que se copia al directorio pp2\bin\go32v2 y se borra el pp.exe de donde estaba antes, es decir del bailalo\s6\pp\source\compiler. Con esto ya tenemos nuestro compilador: pp.exe que sin embargo necesita buscar un rtl... para compilar cualquier tipo de archivo. === Futuro Comprobar que la compilación en verdad es así. Porque sino no se puede repetir el proceso y... es una faena. Yo tenía un problema con la inclusión de más de 3 directorios en la linea de comandos, o aquí o en el siguiente apartado de compilar archivos hispascal. Hay que ver ese error. Yo recuerdo que había que hacer algo de ensamblador y que necesitabamos unas utilidades gnu para ensamblar. === Fin de Futuro HTML DEL 4- Probar a compilar archivos hispascal (muy simples e ir complicandolos) con el nuevo compilador e ir probandolos. Ahora trabajaremos siempre en el directorio pp2\bin\go32v2 === Te cuento una historia. Bueno esto ya me acuerdo más . === Fin de Te cuento una historia. Vamos a ver las instrucciones para hacer esto están en el comando.txt del pp2\bin\go32v2 Que aqui copio y pego y explico: pp -Fu..\..\source\rtl\go32v2\ -Fi..\..\source\rtl\inc -Fi..\..\source\rtl\inc\graph -Fi..\..\source\rtl\i386 -di386 -vo -Sg pru.pas pp -Fu..\..\source\rtl\go32v2\ -Fi..\..\source\rtl\inc -Fi..\..\source\rtl\inc\graph -Fi..\..\source\rtl\i386 -di386 -va -Sg pru.pas La primera linea de comandos compila enseñando la información minima debug (para encontrar errores) y la segunda la máxima. Cuando haya algun error usaremos la -va pero si compila aparentemente bien ¿por qué ver todo el proceso? Le estoy diciendo que me incluya los siguientes directorios de unidades: ..\..\source\rtl\go32v2 Y los siguientes directorios de "include". No se muy bien lo que significa pero los otros los incluimos como unidades y estos como incude. ..\..\source\rtl\inc ..\..\source\rtl\inc\graph ..\..\source\rtl\i386 Y el -di386 es obligatorio porque usamos un procesador 386 (No estoy seguro de la explicación pero este parametro es obligatorio). Y el -Sg tambien es obligatorio. === Nota aclarativa Estos directorios de antes, son en realidad. d:\bailalo\s6\pp2\source\rtl\go32v2 d:\bailalo\s6\pp2\source\rtl\inc d:\bailalo\s6\pp2\source\rtl\inc\graph d:\bailalo\s6\pp2\source\rtl\i386 === Fin Nota aclarativa Claro está el pru2.pas se puede cambiar por otro archivo hispascal, de echo la primera prueba fue con pru.pas. === Nota futuro Miro un momento los directorios que logro incluir: d:\bailalo\s6\pp2\source\rtl\go32v2 d:\bailalo\s6\pp2\source\rtl\inc d:\bailalo\s6\pp2\source\rtl\inc\graph d:\bailalo\s6\pp2\source\rtl\i386 Y me fijo, a ver, si falta alguno del rtl, No, aparentemente ninguno. Lo del error de directorios quizas nunca fue. === Fin Nota futuro === HTML DEL 5- Volver al 1 y al 2 hasta que salga bien. No hay nada que explicar es muy obvio. === HTML DEL 6- Por ejemplo lo que es la unidad crt, que en un programa pascal se usa con uses crt; que yo creo he traducido como usa. Entonces será: usa crt; Y buscará la libreria crt... y esa libreria tiene por ejemplo...la función: === Te cuento una historia Bueno esto se queda... esto en mi desarrollo no lo probé. Así que no sé si por ejemplo la unidad crt ya se encuentra ... === Fin Te cuento una historia bueno lo miro un momento... La libreria está en: PP2\source\rtl\go32v2 así que no hay que incluirla manualmente desde la linea de comandos. Bueno la cosa está... la veo y no está traducida. Cosas como: clrscr,keypressed y readkey que son muy usadas están sin traducir. === Futuro No hay que traducir todas las librerias. Sólo las fundamentales para el estudio didáctico del hispascal. === Fin Futuro De esto nos ocuparemos una vez el compilador vaya medio bien. === HTML DEL 7- Otras cosas antes del lanzamiento al publico. Primero hay que hablar con los del fpc-devel para ver: 1) Como instalo la nueva distribución con su instalador, 1a) Sin traducirlo a Español. 1b) Traduciendolo al Español. 2) Como instala su instalador... y ofrecer un instalador como el de nullsoft, freeware, de interfaz gráfica más comoda. Segundo hay que portarlo a WIN32 o se hace a partir del win32 del 1.0.4 o a partir del dos cambiando cuatro cosas nada más. Ya que me parece que en Windows no hay multitarea en DOS. Tercero. No hay que perder de vista las aplicaciones PASHIS y la posible HISPAS. Y tampoco la aplicación ipcute, que puede ser el ide por defecto si llegamos a un acuerdo con su desarrollador. Ipcute tiene actualmente su pagina web en: www.ipcute.com http://ipcute.free.fr/ipaccueil.php3 http://ipcute.free.fr/ipwelcome.php3 Cuarto. Hay que buscar los que hicieron manuales en español de Pascal y pedirles renombren unas cuantas palabras clave a hispascal. Quinto. Un manual para los que quieran portar el hispascal a otro lenguaje. Y bueno una vez lo consigan... download de los ejecutables. Estado de la documentación: ----------------------------- Arreglado lo del pashis. Arreglado lo del tokens.pas excepto: Acordarse, al final de escribir la documentacion, de las instrucciones añadidas en el tokens.pas que puede ser que sobreescriban una función que sí valía. Añadido el scanner y el ra386att todos ellos del pp. Añadido el ra386dir.pas,el psystem.pas y el symtable.pas. Importante de acordarse: Habrá que preguntar en la lista de correo si al cambiar el psystem.pas que es el que interpreta la unidad system estamos obligando a traducir todo el rtl a hispascal cuando no hace falta. Establecido un poco de orden ahora sabemos casí seguro que hemos terminado los puntos 1 y 2. Así que a la próxima hay que seguir con punto 3, recordar que para compilar el compilador hacia la forma paso a paso más larga, antes de mirarlo en el pdf de freepascal, mirar a ver si lo tengo apuntado en algun txt. Sólo falta pasar la documentación a html. Revisar los puntos escritos ad hoc para revisar. Y crear los html necesarios, a parte de los 7 principales, añadir estos html: Futuro - (Recopilación de tareas a hacer los desarrolladores) Documentación "contada" Documentación sin contar Como usar basicamente el MSDOS para desenvolverse como desarrollador de hispascal Principios de pascal con links a manuales de pascal. Links a manuales de hispascal