Planeta Lazarus en castellano

July 04, 2008

javivf

Lazarus, MS Access y uso de imagenes (Bitmap)

MS Access guarda las imagenes en campos de tipo objeto OLE. La informacion que guarda es el stream del archivo .bmp con una cabecera que contiene la aplicacion con la que tiene que abrir el stream. El stream entero es inservible para trabajar directamente con freepascal/Lazarus asi que lo que viene a continuacion es una manera de usar ese objeto OLE para incrustarlo en un Dbf y poder trabajar mas agilmente en Lazarus.

A continuacion vamos a mostrar distintos contenidos de streams para entender que vamos haciendo.

Archivo BMP :

streambmp

Como se puede ver “BM” marca el inicio del stream.

Archivo BMP incrustado en un campo de tipo objeto OLE de MS Access :

streammdb

Aqui se puede observar la cabecera que comentabamos antes.

Archivo BMP incrutado en un campo de tipo BLOB en un Dbf :

streamdbf

Observamos que la cabecera se reduce en comparacion al objeto OLE.

Para conseguir nuestro objetivo lo primero que tenemos que hacer es determinar la posicion del “BM” para poder extraer la informacion que nos interesa, para este fin usamos la siguiente funcion:

function buscaPosicionBM(STmp : TStream) : Integer;
var
i : Integer;
begin
STmp.Seek(0,0);
for i:=0 to 100 do
begin
if STmp.ReadByte = 66 then
if STmp.ReadByte = 77 then
buscaPosicionBM:=STmp.Position-2;
end;
end;

Y a continuacion toda la chicha, o sea, cargamos el objeto OLE en un stream, le quitamos la informacion innecesaria para nosotros y lo metemos en un campo blob de un Dbf.

procedure carga;
var
Stream, StreamClean : TStream;
FieldStr : String;
PFieldStr : PChar;
posicion : Integer;
begin

// Cargamos el objeto OLE al Stream
Stream := TMemoryStream.Create;
Stream := q.CreateBlobStream(q.FieldByName(’DIBUJO’), bmRead);

// Conseguimos la posicion del “BM”
posicion :=buscaPosicionBM(Stream);

// Creamos el stream para añadir despues al Dbf
StreamClean := TMemoryStream.Create;

// Añadimos la cabecera para el Dbf
StreamClean.WriteByte(3);
StreamClean.WriteByte(0);
StreamClean.WriteByte(0);
StreamClean.WriteByte(0);
StreamClean.WriteByte(98);
StreamClean.WriteByte(109);
StreamClean.WriteByte(112);

// Nos posicionamos correctamente y copiamos la informacion necesaria
Stream.Seek(posicion, soFromBeginning);
StreamClean.Position:=7;
StreamClean.CopyFrom(Stream,Stream.Size - posicion);
StreamClean.Seek(0,0);
SetLength(FieldStr, StreamClean.Size);
PFieldStr := PChar(FieldStr);
StreamClean.Read(PFieldStr^, StreamClean.Size);

// Volcamos el Stream creado al Dbf
reportDbf.Append;
reportDbf.FieldByName(’Codigo’).Assign(q.FieldByName(’Codigo’));
reportDbf.FieldByName(’descripcion’).Assign(q.FieldByName(’descripcion’));
reportDbf.FieldByName(’dibujo’).Value := FieldStr;
reportDbf.Post;

// Liberamos recursos
Stream.Free;
archivoLog.Free;
end;

Comentar que q es un TSQLQuery de SQLdb, reportDbf es un TDbf y he usado el programa Hexplorer para ver los entresijos de los streams.

Si algo no ha quedado muy claro me dejais un comentario e intentare explicarme lo mejor que pueda O:)

July 04, 2008 06:00 PM

June 20, 2008

javivf

Se acerca Lazarus 0.9.26

Lo comenta Vincent Snijders en el blog Lazarus Development.
Como resumen del articulo se puede decir que el pasado 13 de junio salio a la luz la primera release candidate de fpc 2.2.2 y que Lazarus 0.9.26 vendra despues de la salida de la version estable del compilador.

Empieza la expectación! ;)

June 20, 2008 07:05 AM

June 09, 2008

llodra

Link : Leer Archivos XML con Lazarus

En este blog hay información muy útil para leer archivos XML desde una aplicacion creada con Lazarus.

desarrollolibre.wordpress.com

June 09, 2008 09:25 PM

June 06, 2008

javivf

Documentacion Free Pascal Run-Time Library (RTL) y Free Component Library (FCL)

Siguiendo con la saga , se ha habilitado el acceso a la documentacion de la FCL en http://planetalazarus.alasombra.net/fcl/ y la documentacion de la RTL en http://planetalazarus.alasombra.net/rtl

Los links estan permanentemente en el menu de la derecha del planeta lazarus :)

PD : gracias Vincent por el tip!

June 06, 2008 12:57 PM

June 05, 2008

llodra

Versiones Daily Snapshot de Lazarus + Truco

lazarus Después de probar varias versiones de Lazarus intentando compilar para varias plataformas, he tenido que recurrir a las versiones daily snapshot para conseguirlo. Las versiones oficiales (a día de hoy 0.94) no son capaces de compilar para WinCE de una manera sencilla, hay que reconstruir todo el IDE de Lazarus y aun así, muchos de los widget LCL no funcionan en WinCE. Pero las versiones 0.95 de Lazarus, si permiten utilizar la gran mayoría de widgets LCL, y no ofrecen ninguna dificultad para compilar en las plataformas Win32/64 y WinCE. Descargar daily snapshots.

Instalando para Windows ™ la versión 0.95 de Lazarus y la versión “crosscompiling” correspondiente, sólo hay que configurar las “opciones del compilador” -> “Tipo de Widget LCL” como “WinCE”, y en la pestaña “Código” de esa misma ventana, seleccionar la plataforma del Sistema Operativo (OS Objetivo) como “WinCE” y el Procesador (CPU Objetivo) como “arm”.

Una vez hecho esto, ya se puede compilar para WinCE.

TRUCO : Los ejecutables para WinCE que crea Lazarus, son muy grandes (unos 10MB). Existe una utilidad llamada : arm-wince-strip.exe que se encuentra en el directorio : “\lazarus\fpc\2.2.1\bin\i386-win32″ que reduce el tamaño del ejecutable un 80%. Para que funcione correctamente, se tiene que habilitar la opción “Remover los símbolos del ejecutable” de las Opciones del Compilador” -> “Enlazador/Linker”.

Más utilidades para WinCE. Y para el desarrollo sobre Win-CE.

June 05, 2008 12:09 PM

May 28, 2008

javivf

Conociendo Lazarus Data Desktop

Lazarus Data Desktop es una herramienta desarrolada por Michael Van Canneyt cuyo principal objetivo es mantener un diccionario de datos.
Se puede encontrar en el directorio tools de Lazarus a partir de la revision 11472.

Estareis pensando : “La definicion muy bonita pero, ¿que se puede hacer con Lazarus Data Desktop?

Pues alla vamos, (extraido del anuncio original )

- Se puede conectar con DBF, Oracle, Interbase, Mysql (4, 4.1 and 5), PostgreSQL, SQLite3 y sobre ODBC.
- Edicion del diccionario de datos ( Incluyendo la importacion de informacion de bases de datos existentes )
- Genera las consultas SQL CREATE TABLE, SELECT, INSERT, DELETE y UPDATE a partir del diccionario
- Navegar por la estructura de la base de datos.
- Navegar y modificar la informacion de las tablas.

Personalmente me parece una muy buena herramienta, aunque me falta investigar en profundidad el paquete datadict ya que es el que realmente le saca provecho a los diccionarios de datos dentro del mismo Lazarus.

May 28, 2008 12:55 PM

April 28, 2008

javivf

Y Lazarus llega a la revision 15000 !

Hace un mes y medio abri un ranking en all-rankings.com sobre quien iba a ser el “commiter” que hiciera la revision 15000 de Lazarus ( uno que tiene tiempo para aburrirse el dia de su cumpleaños… :P ) y el ganador del ranking ha sido el mismo que ha hecho el commit! Enhorabuena para Mattias!!! :D

Obviemente tambien hay que dar la enhorabuena a TODOS los desarrolladores de LazarusFreePascal que hacen posible que dia a dia vayan esos proyectos por buen camino y avanzando.

Para destacar, a estas alturas, se podria comentar que la version 0.9.26 de Lazarus saldrá un par de semanas despues de que este listo FreePascal 2.2.2. Tambien se puede destacar el soporte para unicode en windows a partir de fpc 2.2.1

Y poco mas tengo que decir, saludos a todos!

April 28, 2008 11:01 PM

April 24, 2008

develazarus

Un nuevo proyecto


Luego de una gran ausencia en este recién iniciado blog ( solo llevo unos cuantos posts) el contenido será movido hacia otro blog, en el cual se juntara el conocimiento de un grupo de amigos para ayudar a los recién iniciados en el mundo les software libre a desarrollar software :)

Por lo que este blog pasa a formar parte de desarrollolibre.wordpress.com, donde encontrarán mas información  sobre Lazarus y otros sabores de IDES en el mundo del GNU/Linux :)

Así que todos quedan invitados a visitar el nuevo sitio, éste quedara como archivo hasta que wordpress decida eliminarlo por inactividad :P

Saludos!!

April 24, 2008 06:35 AM

April 15, 2008

javivf

Comunidad Hispana de FreePascal y Lazarus

El pasado dia 7 se dio a conocer en la web de lazarus el nuevo foro en castellano que podemos aprovechar para exponer dudas, ayudar y compartir conocimientos sobre Lazarus y FreePascal. Lo podemos encontrar en www.hispalazarus.tk

Tambien me gustaria recordar a los “lazarienses” que disponemos de otros medios para mantenernos en contacto.

Lista de correo : http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Planet : http://planetalazarus.alasombra.net/
IRC : irc.freenode.net , canal #lazarus-es

Despues de esto, espero que nos veamos pronto!

April 15, 2008 08:09 PM

March 26, 2008

javivf

Video demostracion LRUT

He hecho un screencast sobre el funcionamiento de LRUT con CamStudio que podeis encontrar en mi espacio de eSnips.

Bien, despues de esta frase os preguntareis ¿Que es LRUT? ¿Que es CamStudio? ¿Que es eSnips? .

Pues contesto a modo de telegrama por que ya no son horas…

- LRUT es una aplicacion a la que llevo unos meses dedicando algo de tiempo libre con el inestimable soporte de jesusra.

- CamStudio es una utilidad para Windows ( pero opensource ) que permite realizar la grabación de todo lo que sucede en tu escritorio, grabando tanto la pantalla completa, como ventanas o zonas definidas ( a falta de xvidcap ;) )

- eSnips  es una web donde te dan 5GB de espacio para subir archivos ( como maximo de 100MB cada uno / 50MB si son .zip o .rar) pudiendo tener carpetas privadas.

Saludos! :D

March 26, 2008 11:44 PM

March 25, 2008

ToroOS

Toro 0.03 esta listo!

Se ha implementado el Stack TCP-IP y se ha creado un driver para tarjetas de red ethernet ne2000 , tambien se han solucionado gran cantidad de bugs .
Saludos Matias Vara .

March 25, 2008 08:49 PM

February 19, 2008

Lord_ZealoN

Dos instalaciones de Lazarus/FPC en MacOs

Por fin he conseguido instalar Lazarus/FPC en Leopard. Cosa que me ha costado sudar sangre, ya que no había manera que ni Fink ni MacPorts, me instalasen correctamente las librerías gdk.

Para quien no lo sepa, FreePascal es un compilador libre de Pascal disponible para una infinidad de arquitecturas. La descripción que nos ofrece la wikipedia para FreePascal y Lazarus es:

Free Pascal (o FPK Pascal) es un compilador Pascal portable, libre y de código abierto, que representa una alternativa a los productos comerciales Turbo Pascal y Delphi. Su entorno en modo texto es muy similar al de Turbo Pascal de Borland, pero con más opciones. También existen entornos de desarrollo para Windows con Dev-Pascal de Bloodshed.

Lazarus es una herramienta visual para la programación en lenguaje de programación Pascal, disponible para los sistemas operativos Windows, GNU/Linux y Mac OS X.
Se trata de una alternativa gratuita a Delphi, desarrollada como proyecto de software libre a partir de Free Pascal. La web y la mayoría de la documentación están en inglés, pero el entorno de desarrollo (IDE) sí está traducido al español en gran parte.

Lazarus corriendo sobre MacOS

Una vez hechas las presentaciones, y resuelta mi pequeña incidencia, ahora, necesito tener dos instalaciones distintas.
¿Por qué? Lazarus, actualmente, está compilado por defecto para visualizarse sobre GTK1 (y bajo X11), algo que lo hace algo horrible a la vista, pero ésto, es sólo por defecto, ya que se puede compilar (aunque muchos de los widgetsets no son estables o completos aún, pero trabajan activamente en ello) para GTK2, Carbon, QT, etc…

Mi idea es tener mi instalación de Lazarus “stable” para no tener problemas en el día a día, pero además, tener otra instalación más (o las que hagan falta), para pruebas. Una de ellas, será un Lazarus descargado directamente del svn y tras posterior compilación, “construir” el entorno pero usando Carbon, para que se vea de una manera nativa.

Para aquellos interesados, toda la instalación de Lazarus, es realizada en la carpeta /usr/local/share/lazarus, y según me han comentado, para tener dos instalaciones distintas, es tan sencillo como simplemente copiarlo, fácil, sencillo, y para toda la familia.

Puesto en la oficina no tengo mi MacBook, no puedo probarlo ahora mismo, así que ya contaré mi aventura en otro momento.

De momento, os puedo decir que, puesto necesito una pequeña aplicación para hacer un seguimiento de las incidencias con nuestros clientes (entre otros mil proyectos más), iré comentando su desarrollo para que podáis adentraros en el mundo de desarrollo con este entorno.

ShareThis

February 19, 2008 09:39 AM

February 05, 2008

javivf

freepascal y lazarus version SVN para WinCE

En esta entrada se trata como llegar a tener nuestro propio fpc para arm-wince desde SVN y poderlo usar en lazarus.

Como va siendo habitual no se va a tratar nada que no este en el articulo WinCE port o en el articulo Windows CE Interface del wiki de lazarus.

Simplemente es una guia paso a paso partiendo del escenario descrito en la entrada freepascal y lazarus version SVN sobre winXP/w2k de este mismo blog.

1.- Descargamos e “instalamos” arm-wince-binutils.zip

Descargamos las herramientas necesarias para crear ejecutables arm-wince desde el ftp de freepascal en esta direccion ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip

Descomprimiremos el archivo dentro de C:\lazarus e incluiremos C:\lazarus\arm-wince-binutils al PATH del sistema.

2.- Compilacion e instalacion del fpc

Simplemente accedemos al directorio donde tenemos los fuentes y compilamos con los parametros necesarios.

cd c:\lazarus\fpc

make clean CPU_TARGET=arm OS_TARGET=wince install

Una vez terminada la compilacion e instalacion debemos copiar  ppcrossarm.exe al directorio donde tenemos los binarios para i386-win32

copy compiler\ppcrossarm.exe c:\pp\bin\i386-win32

En este punto ya tenemos fpc preparado para compilar para la plataforma arm-wince ejecutando ppcrossarm programa.pas

3.- Preparando lazarus

Para ello debemos compilar LCL para la plataforma arm-wince del siguiente modo

cd c:\lazarus\ide\lcl

cd c:\lazarus\lcl

make OS_TARGET=wince CPU_TARGET=arm PP=C:\pp\bin\i386-win32\ppcrossarm.exe

Una vez esto debemos configurar nuestro lazarus y nuestro proyecto para que cree el binario para arm-wince

- Cambiamos la ruta del compilador en ”Entorno > Opciones del entorno” y sustituimos ppc386.exe por  ppcrossarm.exe

- Cambiamos el OS y la CPU obejtivo en “Proyecto > Opciones del Compilador” en la pestaña ”Código” poniendo WinCE y arm respectivamente

- Cambiamos el tipo de Widget LCL “Proyecto > Opciones del Compilador” en la pestaña ”Rutas” poniendo WinCE

En este punto ya tenemos todo dispuesto para desarrollar proyectos wince con lazarus :)

PD:Hay que comentar que yo use la revision 10221 del fpc, con lo que si no os compila con alguna otra revision quiere decir que algo mal hay en esa revision. Podeis solucionarlo actualizando vuestros fuentes a la revision 10221 del siguiente modo:

svn -r 10221 update

O a la revision que sepais que compila bien cambiando 10221 por el numero de revision que querais…

Un saludo y a compilar!

February 05, 2008 12:59 PM

January 24, 2008

llodra

Software DICOM

Colección de Software DICOM gratuito para Windows, Linux y Mac OS X.

EzDICOM : Programa Visor de Imágenes DICOM programado en Delphi con código fuente.
MRIcro y MRICron : Conversor a formato Analyze de imágenes médicas.
DICOMWorks : Visor DICOM , puede crear CDs DICOM, exportar a PowerPoint, e-mail, FTP, … A mediados de este año (2008) se espera una nueva versión.
Osirix : Visor exclusivo para Mac, con capacidad de reconstrucción volumétrica de imágenes médicas. El software es Open Source, pero hay varias empresas que dan soporte al programa, una de ellas es Kanteron Systems.
PACS dcm4chee : Este software esta especializado en el almacenamiento masivo de imágenes médicas (PACS). Funciona sobre JBoss y es multiplataforma.
K-Pacs : Workstation DICOM, con funciones de almacenamiento y búsqueda en red (query / retrive). Tienen 2 versiones, una gratuita con algunas funciones avanzadas desactivadas y otras de pago que incorporan reconstrucción en 3D.
Amide : Programa en continuo desarrollo para analizar datos volumétricos en imágenes médicas. Programado en GTK+ funciona sobre múltiples plataformas.
Aeskulap : Otro visor DICOM con funciones de red, permite buscar estudios en PACS. Multiplataforma.
Oviyam : Visor Web para imágenes DICOM, integrado con dcm4chee mediante el protocolo WADO.

January 24, 2008 02:48 PM

January 09, 2008

javivf

Documentacion LCL ( Lazarus Component Library )

Se ha habilitado el acceso a la documentacion de la LCL en http://planetalazarus.alasombra.net/lcl/ (Se intentara actualizar con frecuencia ;) )

No es mas que un mirror de su version original

January 09, 2008 06:37 PM

December 31, 2007

llodra

HowTo : Lazarus + SQLite + WinCE + KOLCE

lazarus Estupendo tutorial de javivf’s blog y Daniel Rincón, para crear aplicaciones con Lazarus y Freepascal que funcionen en Windows CE, y con soporte para la el motor de bases de datos SQLite.

December 31, 2007 09:38 AM

December 30, 2007

ToroOS

Toro Habla!

Bueno luego de un gran periodo de inactividad debido a mis estudios he retomado el Stack TCP-IP , en el screenshot se puede ver a TORO respondiendo un telnet , ha sido una ardua tarea pero va encaminada , en muy poco tiempo tendre lista la nueva version .
Un saludo Matias E. Vara

December 30, 2007 05:21 PM

December 26, 2007

llodra

Instalar Freepascal + Lazarus en Mac OS X

Logo LazarusDespués de probar varias veces a instalarlo sin leer los foros de Lazarus, me he leído los foros de Lazarus, por que no había manera de hacerlo ir.
Ahí va el “como” del meollo :

- Descargar X11 para Mac OS X 10.2 de aquí e instalarlo. Para las versiones posteriores de Mac OS X lo puedes encontrar en el DVD de Instalación.
- Instalar XCODE del DVD de Instalación de Mac OS X. Si no lo tienes, puedes ir a la página de desarrollo de apple, darte de alta y descargartelo (ocupa mucho, casi un gigabyte).
- Instalar Fink. Fink es un gestor de paquetes apt, que permite descargar infididad de paquetes Open Source preparados/portados para Mac OS X.
- Actualizar o Instalar las librerias GTK. En el terminal del Mac escribir :
sudo apt-get update
sudo apt-get install glib glib-shlibs gtk+-shlibs gdk-pixbuf gdk-pixbuf-shlibs

- Descargarse e Instalar Freepascal y Lazarus. Nota : hay que bajarse las dmg del codigo fuente de Freepascal, además de los binarios de Lazarus y Freepascal.
- Ejecutar Lazarus. Abrir X11 (aparecerá el xTerm) y escribir :
cd /usr/local/share/lazarus/
./lazarus

- Para añadir un icono de lazarus en Applications, hay que añadir una nueva aplicación desde el menu de customización de las aplicaciones poner el nombre y en el comando poner : /usr/local/share/lazarus/lazarus.

Fuente : http://wiki.lazarus.freepascal.org/Installing_Lazarus_on_MacOS_X

December 26, 2007 11:52 AM

December 05, 2007

javivf

Nuevos iconos para Lazarus version SVN (0.9.25 beta)

Ultimamente se estan sustituyendo los iconos con un gusto bastante acertado, hace unos dias fueron los del paquete SQLdb…

09240925-sqldb.jpg

Y hoy he visto que han cambiado los de la pestaña “Standard”…

09240925-1.jpg

Y el trabajo de Laurent sigue surgiendo en cada actualizacion. Desde aqui, GRACIAS :)

December 05, 2007 04:01 PM

October 25, 2007

SiR-HaCk

Lazarus-Es ya tiene lista!!

Lazarus como algunos ya saben es un IDE de programación para Freepascal, cada día me va sorprendiendo mas de las novedades que se le va añadiendo y sobre todo los controles que tanto los desarrolladores como personas allegadas al proyecto van desarrollando, mejorando, si usted es un usuario de lazarus les recomiendo que bajen la [...]

October 25, 2007 05:45 PM

October 02, 2007

ToroOS

Articulo sobre Sistemas Operativos

Aqui les dejo el link a un articulo que he publicado en la Revista SL , espero sus comentarios ,
Un saludo Matias Vara .

October 02, 2007 02:18 AM

September 04, 2007

SiR-HaCk

Lazarus y formularios MDI

Como todos ya sabemos lazarus no tiene implementación de formularios MDI, sobre todo en lo que es GTK1 y GTK2, pero me comentaron que con QT4 si se puede tener formularios MDI. Yo también soy de las personas que le gusta tener formularios MDI y no tener las ventanas sueltas, bueno encontré [...]

September 04, 2007 08:10 PM

August 16, 2007

llodra

Leaf2 : Engine 3D para Delphi y FreePascal

Esta “engine” 3D es compatible con Delphi y Freepascal, se basa en el API de OpenGL para renderizar y es multiplataforma (Win32, Linux, MacOS X en desarrollo). Está orientada a la creación de juegos o aplicaciones en primera persona.

Entre las características más destacables del motor 3D, cabe destacar estas :

  • OpenGL
  • Octrees para manejar escenas
  • Multiplataforma
  • motor de Sprites (escalado, rotación y transparencias)
  • Animación de esqueletos
  • Shaders
  • Efectos físicos
  • Efectos 3D de Sonido
  • Librería Matemática
  • Lenguaje script
  • Texturas (JPEG, TG, BMP, …)
  • Modelos (LMX, 3DS, OBJ, MS3D, MD2, …)
  • Formatos de sonido: WAV, OGG.
  • Servidor/Cliente de Red UDP, incluso soporte HTTP y SMTP (email)
  • Sistema extensible de Interfaz de Usuario (GUI)
  • Soporte para Joystick y Video (sólo win32)

No usa componentes visuales, asi que desde el IDE no se pueden ir agregando componentes a un formulario (TForm). El sistema que utiliza es el de Clases dividas en diferentes unidades (UNIT). Así que si deseas utilizar este motor 3D, tienes que utilizar la clausula USES.

Dispone de varios tutoriales para aprender el funcionamiento del motor 3D. Y se puede descargar el código fuente de aquí.

August 16, 2007 09:05 AM

August 12, 2007

SiR-HaCk

Lenguaje de programación Lazarus FPC multiplataforma

Muchos programadores del entorno Windows están migrando a al espectacular Visual Studio .Net y lo mismo están haciendo sus homólogos de Linux al proyecto MONO o en ambos de los casos aceptando al tan popular Java, pero una de las preguntas que todos se hacen ¿Por qué migran de lenguaje de programación? Y lo [...]

August 12, 2007 12:57 AM

August 11, 2007

llodra

Lazarus + GLScene

Hay un web que ha realizado (hace algún tiempo) un instalador del compilador FreePascal (FPK) + el IDE Lazarus + GLScene : www.skinhat.com/lazarus/.

Las versiones, tanto del compilador e IDE como la de GLScene, son antiguas, pero si alguien se decide a investigar las posibilidades de esta combinación, es un modo rápido para comenzar.

Cabe destacar la licencia OpenSource de todas las aplicaciones y la posibilidad de poder acceder tanto a freepascal como a Lazarus desde Linux o MacOSX.

GLSCene son una serie de componentes para kylix, delphi, borland c++ y lazarus (freepascal), creados para permitir desarrollar rápidamente aplicaciones que utilicen la librería 3D OpenGL. Su diseño modular permite crear una escena en 3D desde el IDE, a la que se le pueden añadir objetos, texturas, efectos y obtener una aproximación del resultado mientras se crea la aplicación. Todos los parámetros son accesibles desde las propiedades del objeto.

Lo mejor de estas librerías es que no tienes que aprender todos los comandos OpenGL para poder empezar a programar en 3D (aunque no te vas a librar de tener que echarles un vistazo). Cada componente encapsula las operaciones básicas de la librería asociadas a un objeto en particular.

Características de GLScene :

  • Estructura Jerárquica de Objetos
  • Escena Interactiva
  • Acceso rápido a las funciones de cada objeto de la escena
  • Objetos predefinidos (cámaras, luces, cubos, meshes, … )
  • Soporte para objetos 2D y 1D
  • Acceso directo a funciones OpenGL
  • Efectos Especiales predefinidos
  • Importación de objetos desde 3DStudio
  • Librerías de Materiales
  • Transparencias, canales alpha, texturas comprimidas
  • Uso automático del hardware acelerador 3D disponible
  • Sombras (dinámicas, mapas)
  • Sistemas de Partículas
  • Animación de objetos, esqueletos, suavizado de la animación.
  • Posibilidad de crear GUI en 3D
  • Soporte para librerías de terceros (ODE Physics, SDL, CG NVIDIA, … )

August 11, 2007 11:29 AM

July 16, 2007

ToroOS

Trabajando con Stack TCP-IP

Hola, dejo este post para comentar por donde ando con TORO, ahora me encuentro desarrollando un driver para la placa de red ne2000 , tambien he desarrollado un Cache para la manipulacion de gran cantidad de paquetes , y me encuentro escribiendo los drivers para los protocolos del stack tcp-ip .
Espero poder liberar todo el Stack TCP-IP para la version 0.03
, un saludo Matias E. Vara .

July 16, 2007 04:01 PM

July 12, 2007

develazarus

Generando un archivo XML


Ahora toca el turno de generar el archivo XML, anteriormente habíamos visto como leer un archivo en formato XML, en el cual habíamos utilizado las librerías proporcionadas por Free Pascal, ahora usaremos otras que son nativas para Lazarus, y aprenderemos como añadir paquetes :D

Primero creemos la Interfaz, colocando los siguientes componentes:

Componente Nombre(Name) Caption
TForm Form1 Creando XML
TButton BtnCrear &Crear
TEdit EdComentario  

Creador de XML

Ahora necesitamos ingresar el código, pero antes llamamos a las librerías que necesitamos para que podamos escribir en XML, que en este caso serán las librerías para lazarus: Laz_DOM y Laz_XMLWrite, para ello debemos añadir un paquete a los requeridos del proyecto, esto lo logramos pulsando el menú Proyecto -> Inspector de Proyecto, con esto nos mostrará una ventana con todos los archivos y paquetes con que se compila nuestra aplicación, pulsamos sobre el botón añadir y luego a la pestaña Nuevo Requerimiento:

Requerimientos

Y seleccionamos CodeTools, que es el paquete que contiene las cabeceras que necesitamos (laz_dom.pas y laz_xmlwrite.pas), esto lo pueden verificar si van a la carpeta components/codetools en donde este instalado lazarus.

Luego de esto, debemos verificar que en la ventana del inspector del proyecto aparezca CodeTools, en la lista de paquetes requeridos:

Ventana del inspector de proyecto

Ahora debemos agregar Laz_DOM y Laz_XMLWrite a la clausula Uses e ingresamos el código para el evento OnClick del BtnCrear:

procedure TForm1.BtnCrearClick(Sender: TObject);
var
  Doc : TXMLDocument;
  DomNodo, DomRaiz, DomDato : TDOMNode;
begin
  //Creamos un documento
  Doc:=TXMLDocument.Create;
  //Creamos la raiz del documento
  //nombrandolo “ejemplo”
  DomRaiz:=Doc.CreateElement(‘ejemplo’);
  //despues de añadir un nodo al documento este es vaciado
  Doc.AppendChild(DomRaiz);
  //por lo tanto recuperamos el puntero
  DomRaiz:=Doc.DocumentElement;
  //Creamos el primer Nodo del documento
  DomNodo:=Doc.CreateElement(‘PrimerDato’);
  //Hacemos un casting a la variable DomNodo
  //de tipo TDOMElement para poder
  //colocarle atributos.
  TDOMElement(DomNodo)['atributo']:=‘algunvalor’;
  //agregamos el nodo al nodo raiz
  DomRaiz.AppendChild(DomNodo);
  //Como la variable DomNodo ha sido vaciada
  //podemos crear otro nodo con la misma
  //variable
  DomNodo:=Doc.CreateElement(’segundoDato’);
  //creamos tambien un nodo de texto
  DomDato:=Doc.CreateTextNode(‘contenido’);
  //asignacion de parametro al nodo
  TDOMElement(DomNodo)['tipo']:=‘cadena’;
  //Añadimos el nodo de texto al nodo DOMNodo
  DomNodo.AppendChild(DomDato);
  //Al primer nodo hijo (PrimerDato) de la raiz
  //le añadimos el nodo contenido en DomNodo
  DomRaiz.ChildNodes.Item[0].AppendChild(DomNodo);
  //creamos otro nodo pero de comentario
  //con el texto del TEdit
  DomDato:=Doc.CreateComment(EdComentario.Text);
  //añadimos directamente el nodo de comentario
  //al mismo nivel que “PrimerDato”
  DomRaiz.AppendChild(DomDato);
  //Escribimos el archivo
  WriteXMLFile(Doc,‘prueba.xml’);
  //Liberamos Memoria.
  Doc.Free;
end;

Compilamos, y estamos listos.

Esto nos creará un archivo prueba.xml como este:

<?xml version=”1.0″?>
<ejemplo>
  <PrimerDato atributo=“algunvalor”>
    <segundoDato tipo=“cadena”>contenido</segundoDato>
  </PrimerDato>
  <!–Escriba su comentario–>
</ejemplo>

Ahora puede probar abrirlo con el proyecto que hicimos anteriormente :)

July 12, 2007 04:29 AM

July 09, 2007

develazarus

Solución de problemas con lecturas de XML


Después de hacer una búsqueda intensiva, he encontrado algunos fallos con lecturas de archivos xml, especialmente cuando contienen caracteres como “ñ” o vocales tildadas.

Simplemente es cuestión de crear un archivo que le indique a las librerías gtk en que codificación deben leer los archivos.

Deben crear o modificar un archivo en su home, llamado .gtkrc.mine si usan gtk y .gtkrc-2.0 si usan gtk2 para Lazarus.

style “default-text” {
fontset = “-*-arial-medium-r-normal–*-100-*-*-*-*-iso8859-1,\
-*-helvetica-medium-r-normal–*-100-*-*-*-*-*-*”
}

class “GtkWidget” style “default-text”

Luego puede compilar de nuevo su código y verán los resultados.

July 09, 2007 05:57 AM

July 02, 2007

DhabyX

Nuevo Blog!!


 Captura develazarus

Recién hace un par de semanas abrí un blog con un amigo, Polux, el cual será dedicado a uno de mis lenguajes favoritos, Object Pascal, y con la IDE que mas me ha gustado para desarrollo de aplicaciones, Lazarus, si están interesados pueden verla en develazarus.wordpress.com; aún va en fase de inicios, pero de a poco ira creciendo :)

July 02, 2007 07:00 PM

develazarus

Leer Archivos XML con Lazarus I


XML es un formato de archivo bastante entendible para guardar documentos estructurados o pasar información de programa a programa, por lo que se hace necesario conocerlo, Free Pascal tiene librerías necesarias para poder leer y escribir en este formato, fáciles de aprender e igualmente de aplicar, en este primer post solo veremos como acceder y leer los archivos XML obteniendo los datos fácilmente.

Abrimos Lazarus y creamos un nuevo proyecto. Luego en el formulario colocamos estos componentes y les colocamos las propiedades siguientes:

Componente Nombre(Name) Caption
TForm FLMXL Lector XML
TButton BtnLeer &Leer XML
TButton BtnCerrar &Cerrar
TMemo Memo

Colocando los componetes tomando como ejemplo la siguiente imágen:

FormularioXML

Y guardamos el proyecto.

Para acceder a las funciones de manejo de XML en Lazarus o Free Pascal solamente debemos llamar a las librerías DOM y XMLRead, añadiéndolas a la lista de librerías en la clausula uses.

Ahora necesitamos un archivo XML para las pruebas, dentro del cual escribiremos lo siguiente:

<?xml version=”1.0″?>
<ejemplo>
  <ejemploinfo>
    <autor>develazarus</autor>
    <fecha>1 de Julio de 2007</fecha>
    <dato>primer dato</dato>
    <dato>Segundo dato</dato>
    <dato>Tercer dato</dato>
    <dato>Cuarto dato</dato>
    <val tipo=“dato cadena”>inspeccionando</val>
  </ejemploinfo>
  <texto>
    <cabecera>Esto es la cabecera</cabecera>
    <linea>Esto es una linea de texto.</linea>
  </texto>
</ejemplo>

lo guardamos con el nombre “ejemplo.xml” dentro de la carpeta donde guardamos el proyecto, para que sea fácilmente accesible desde el código.

El código XML es tratado por las librerías como un conjunto de nodos, por lo que podríamos ejemplificar el archivo anterior de la siguiente manera:

Nodos XML

En XML todo empieza con el nodo raiz, que en el caso de nuestro archivo es “ejemplo”, luego estan los nodos hijos de la raiz, que son ejemploinfo y texto, y estos a su vez son nodos padre de cada uno de los nodos que están abajo.

Cada nodo puede tener datos o atributos, los datos o valores de los nodos que vemos en el archivo ejemplo.xml, como por ejemplo el de autor (develazarus), es otro nodo, un nodo hijo del nodo autor, si obtuviésemos el valor del nodo autor no nos devolvería nada. Los datos y atributos de cada nodo son tratados como nodos hijos, esto es algo que hay que tener en cuenta.

Pero empecemos para ver como funciona ya en Lazarus:

En el evento onClick de BtnLeer colocamos:

procedure TFLXML.BtnLeerClick(Sender: TObject);
var
  //variable de tipo TXMLDocument para cargar documentos XML
  Doc :  TXMLDocument;
  i, j : integer;
begin
  Doc := TXMLDocument.Create;
  //cargando el archivo XML
  ReadXMLFile(Doc, ‘ejemplo.xml’);
  Memo.Lines.Clear;
  //obteniendo el nombre del nodo raiz
  Memo.Lines.Add(‘Archvo tipo : ‘+Doc.DocumentElement.NodeName);
  //trabajando con los nodos inferiores a la raiz
  with Doc.DocumentElement.ChildNodes do
  begin
    {la variable “Count”, propiedad de ChildNodes
     contiene el numero total de nodos hijos que existen
     en este caso en el nodo raiz}
    for i := 0 to (Count - 1) do
    begin
      {Item[i] es el nodo al que vamos a acceder y su propiedad
       NodeName nos devuelve el nombre del nodo}
      Memo.Lines.Add(intToStr(i)+‘. ‘+Item[i].NodeName);
      {ahora usamos la propiedad Count pero ahora de los nodos
       con los que estamos trabajando}
      for j := 0 to (Item[i].ChildNodes.Count - 1) do
      begin
        {ahora entraremos a los nodos hijos de los nodos
         anteriores}
        with Item[i].ChildNodes do
        begin
          {Item[j].FirstChild nos devuelve el primer nodo hijo y
           NodeValue es la propiedad que nos devolvera el valor
           o contenido de ese nodo}
          Memo.Lines.Add(IntToStr(i)+‘.’+IntToStr(j)+‘ ‘
            + Item[j].NodeName + ‘ -> ‘
            + Item[j].FirstChild.NodeValue);
          if Item[j].NodeName = ‘val’ then
            Memo.Lines.Add(‘  Atrbuto “tipo” del nodo val = ‘
            + Item[j].Attributes.GetNamedItem(‘tipo’).NodeValue);
              {Para obtener los atributos de un nodo
               utilizamos la propiedad Attributes}
        end;
      end;
    end;
  end;
  Doc.Free;
  //es necesario liberar la memoria que ocupo la variable Doc
end;

y en evento onClick de BtnCerrar colocamos:

procedure TFLXML.BtnCerrarClick(Sender: TObject);
begin
  Close;
end;

Solo nos resta compilar y ejecutar la aplicación, esto lo podemos hacer fácilmente con la tecla F9 ;)

Luego de esto ya tendremos nuestra aplicación leyendo los datos del archivo XML.

Lector de XML Funcionando

Basado en iformación de:
Homepage Von Thomas Zastrow -> FPC y XML (inglés)
XML Tutorial -> Tutorial explicativo de XML (inglés)
Document Object Model -> Especificación del modelo DOM (inglés)
Lazarus wiki -> Tutorial de Lazarus con XML (inglés)

July 02, 2007 04:41 AM

June 27, 2007

develazarus

Como instalar Lazarus


Para comenzar con pie derecho este blog, comenzaremos con la instalación de Lazarus, en la página de la wiki de Lazarus pueden encontrar instrucciones de como instalar Lazarus tanto en Linux, MacOS, BSD, etc. tanto en Ingles como en Español.

Para Linux encontraremos información para las distribuciones Debian, Ubuntu, Mandriva y Suse.

En otro blog he colocado instrucciones de como instalar Lazarus en Slackware 11, modificando el script para instalarlo en ubuntu.

Enlaces
Wiki de Lazarus en ingles | http://wiki.lazarus.freepascal.org/Installing_Lazarus
Wiki de Lazarus en Español | http://wiki….Installing_Lazarus/es
Instalación en Slackware | http://slackdhabyx…instalando-lazarus-en-slackware/

June 27, 2007 06:24 AM

June 24, 2007

develazarus

Hola Mundo!


Hola Mundo! este es el primer post en este blog que se dedicará a aportar el granito de arena a la comunidad que se dedica a la programación en Lazarus, y especialmente para la comunidad de habla hispana.

Como siempre al iniciarse en el mundo de la programación está el clásico “hola mundo” les dejo el hola mundo al estilo Object Pascal :D

develazarus.wordpress.Caption:=’Hola Mundo!’

June 24, 2007 09:20 PM

May 24, 2007

Darksoul

Instalando lazarus y fp desde las fuentes en Ubuntu Feisty.

1-Descargar desde aquí la ultima versión de lazarus y fp (compilador de free pascal).
2-Lazarus tiene algunas dependencias, comprobar que se tienen instalados los siguientes paquetes y sino instalar desde apt-get o synaptic:
libgdk-pixbuf-dev
libgtk1.2-dev
debhelper
3-Descomprimir el fichero de fp.
tar -xvz fpc-2.0.4.i386-linux.tar
4-Entrar en la carpeta y ejecutar
sudo ./install.sh
Esto instalara el compilador de free pascal en el sistema.
5-Descomprimir el fichero de lazarus.
tar -xvz lazarus-0.9.22-1.tar.gz
6-Acceder a la carpeta de lazarus y ejecutar:
make clean all

Con esto quedara todo instalado, para ejecutarlo desde la carpeta de lazarus ejecutar:
./startlazarus

lazarus.png

May 24, 2007 08:07 PM

May 16, 2007

ToroOS

Toro 0.02

La version 0.02 de Toro ya esta lista , implementa un Sistema de Archivo Virtual y drivers para discos ATA y EXT2 Filesystem. Es recomendable bajar la documentacion actualizada para su compilacion de http://toro.sourceforge.net
Un saludo Matias Vara.

May 16, 2007 04:47 AM

May 13, 2007

Darksoul

Herramientas RAD en Linux.

Pequeña lista de herramientas RAD para linux, aunque la mayoría aun se alejan mucho de herramientas comerciales como VB de Microsoft o Delphi de Borland algunas siendo herramientas libres logran buenos resultados.

Hbasic

Es un entorno de desarrollo hecho en QT, usa una sintaxis en lenguaje Basic y parte del entorno es similar a los IDE de basic ya existentes.
La instalación es sencilla y aunque intenta imitar en lo posible la interfaz de Visual Basic no llega a ser demasiado intuitivo.

Kbasic


Es un entorno de desarrollo en basic, el entorno tiene versiones para Linux, Mac OS X y Windows, lo que permite una potabilidad de los proyectos realizados entre las 3 plataformas.
La sintaxis es 100% compatible con VB6.

Phoenix Object Basic

Es un RAD orientado a objetos para plataformas linux y windows. Usa sintaxis Basic para el desarrollo de aplicaciones y un entorno visual para el desarrollo de interfaces gráficas. Los ejecutables son bastante pequeños lo que permite una rápida ejecución de las aplicaciones.

Gambas

Entorno de desarrollo basado en Basic con orientación a objetos. Permite una forma sencilla de diseñar las interfaces gráficas de una aplicación, acceso a distinta bases de datos como MySql o SQLite , aplicaciones KDE con DCOP , creación de aplicaciones 3D con OpenGL…
Esta en constante desarrollo y tiene una comunidad amplia de usuarios lo que permite encontrar ayuda o manuales de manera sencilla.

Visual Tcl

Entorno escrito Tcl/Tk y genera código puro en Tcl/Tk (No necesita librerías externas), permite generar binarios para linux y windows.

Boa Constructor

Boa Constructor es un IDE de Python y un constructor de GUI para wxPython. Ofrece una forma visual para la creación y modificación de frames,un inspector de objetos ,editor del código, generación de documentación en html, un depurador y ayuda integrada.

QtEZ

Entorno de desarrollo para X11 y QT3 ,permite el diseño de GUI utilizando el toolkit de QT y generar completamente un proyecto en C++ con Makefile para la distribucion de los programas.

Lazarus

Lazarus es un entorno de desarrollo de FreePascal,su estetica intenta imitar a la de los entornos delphi de Borland. Existen versiones de lazarus para Linux,FreeBSD,MacOSX y windows ,permitiendo exportar completamente los proyectos de una a otra plataforma. Al igual que delphi permite añadir componentes a la herramienta lo que puede darle bastantes funcionalidades nuevas. La sintaxis aunque muy parecida a la que se usa en delphi no es 100% compatible con este, y no hay compatibilidad por tanto entre componentes.

Eclipse

Uno de los entornos java mas usados actualmente,aunque la herramienta esta desarrollada puramente en java atreves de la multitud de plugins que hay disponible permite programar en una larga lista de lenguajes (C,C++,Php,python..) . Eclipse no incluye el diseño de GUI pero existen multitud de plugins para poder diseñar las interfaces. Estos plugins lamentablemente suelen ser bastantes pesados y ralentizan el entorno.

Netbeans

Entorno de desarrollo puro en java, permite el diseño de interfaces graficas de una manera mas ligeras que el resto de entornos en java.

wxDesigner

wxDesigner es un entorno visual para el desarrollo de aplicaciones usando las librería wxWidgets. Soporta C++, Python, Perl, C# y XML.
Esta disponible para Linux,FreeBSD,MacOSX y Windows.

wxPerl

No es exactamente una herramienta RAD pero puede ser de ayuda, es una utilidad para desarrollar interfaces graficas en Perl usando el toolkit de wxWidgets en C++.

KDE Studio Gold

Es un entorno comercial para el desarrollo de aplicaciones en kde.

Las que mejor resultado parecen dar son Lazarus y Gambas,por ser de la lista las mas populares sera mas fácil encontrar documentación y ejemplos de estas herramientas. Ambas cuentan con una comunidad de usuarios españoles.

Cabe mencionar algunos intentos de crear un entorno RAD para linux ya extintas como gBasic (basic), fpgui (otra implementacion grafica de free pascal) y sobretodo a Kylix (Intento de Borland de portar Delphi a linux).

May 13, 2007 08:22 PM

May 03, 2007

llodra

Crosscompiling con Lazarus

El otro dia, buscando la manera de crear aplicaciones programadas en pascal para PocketPC (ARM), encontré una versión de Lazarus y FreePascal adaptadas para WindowsCE. Tras leer un poco el Wiki de FreePascal, me puse manos a la obra con el tema.
1 - Me descargé Lazarus 2.1.3 y Lazarus Crosscomplier para WinCE - ARM 2.1.3 de aqui y de aqui.
2 - Instalé la versión completa de Lazarus 2.1.3 para Win32, y luego la versión crosscompiler de Lazarus (también versión 2.1.3).
3 - Comprobé que compilaba para Win32.
4 - Cambié en opciones del compilador : el tipo de Widget LCL a wince y añadií en Other Units Files esto : $(LazarusDir)\lcl\interfaces\$(TargetOS)\
5 - En la pestaña de “Procesador” hay que indicar la opción -T cual es el S.O. objetivo : wince y la opción -P es la CPU objetivo : arm.
6 - Después de estos cambios, ya se puede compilar para wince y arm. Eso sí, hay alguna limitaciones, asi que recomiendo leer el artículo de la Wiki de FreePascal.

Después de unas cuantas pruebas, hay q ver lo que ocupa un simple proyecto para wince, casi 10MB.

En el próximo post, la instalación del debugger.

May 03, 2007 02:40 PM

February 23, 2007

ToroOS

Trabajando en el Filesystem

Hola, dejo este post para comentar en que estoy trabajando . Me encuentro escribiendo los drivers para discos ATA con soporte de 8 unidades . En un futuro proximo lo actualizare para disco SATA con la controladora AHCI de Intel , de la cual es la unica que se encuentra informacion en la red.
Por otro lado estoy escriiendo un Filesystem tipo el Virtual Filesystem y pienso crear un driver minimo para EXT2.
Espero todo esto poder entregarlo en la proxima version .
Un saludo Matias Vara.

February 23, 2007 09:54 PM

February 21, 2007

llodra

Ultimas versiones de Lazarus para descargar

Aqui esta el link. De todos modos, vale la pena visitar la página oficial de Lazarus para enterarte de los ports de controles de Delphi para Lazarus, como por ejemplo TurboPower Orpheus.

February 21, 2007 10:50 PM

January 27, 2007

ToroOS

Toro 0.01 !

Bueno luego de 6 meses de trabajo renace TORO , en breve subire documentacion explicando paso a paso su compilacion , las caracteristicas las pueden encontrar aqui .
Un saludo Matias Vara.

January 27, 2007 09:25 PM

January 24, 2007

ToroOS

Algun Screen.

Aqui les dejo un ScreenShot de Toro 0.01 booteando sobre un AMD x86-64 con SMP en QEMU:
https://sourceforge.net/project/screenshots.php?group_id=109734&ssid=51547

January 24, 2007 12:00 AM

December 07, 2006

ToroOS

Buenas Nuevas

Toro sigue vivo , silencio significa mucho trabajo ,supongo que en dos meses liberare un nuevo paquete , ya he portado gran parte del codigo de la RTL para Win32 como el driver de memoria , driver the threads , soporte para Multiprocesamiento paralelo (ya lo he emulado con bochs con hasta 8 procesadores) .
La idea -repito- es poder dividir una aplicacion en miles de threads ejecutandose en paralelo , para eso se implemento un modelo de thread cooperativo , tambien se implementaron mejoras como cambios de contextos por software , no se utiliza la instruccion "lock" , etc .
Todo incluido en una RTL para FPC .
Un saludo Matias Vara .

December 07, 2006 10:48 PM

August 05, 2006

ToroOS

Toro rtl

Hola , bueno querria poder explicar un poco en que estoy trabajando en este momento , puesto que la direccion del proyecto se modifico bastante de la original .
Bueno como sabran freepascal posee la unidad rtl que crea una capa de abstraccion entre el s.o. y el compilador con lo que hace que portar fpc a culaquier sistema resulte una tarea dentro de todo facil . La unidad rtl de la version 2.0.2 de fpc posee versiones para linux , win32 , unix , beos , etc , yo mismo he hecho una rtl para toro utilizando la version 1.0.6 de fpc , pero que resulta no compatible con la version 2.0.2 . Luego de este preambulo , les pasare a comer el rumbo de toro , estoy trabajando en una rtl para fpc 2.0.2 la cual posee incluida en la misma rtl todo el codigo del sistema operativo , en este caso Toro . Por lo tanto cuando conmpilas un prog utilizando esta nueva rtl se genera una ejecutable booteable en grub que incluye todo el kernel y el programa de usuario .Ustedes diran que ventaja trae aparejado esto para el usuario final , bueno el kernel tendra soporte para multiprocesadores , soporte para procesadores de 64 bits , stack tcp ip , y un monton de otras caracteristicas en cuanto a cambios de contextos , proteccion de exclusion mutua , tecnologia multitransport , etc . El programa de usuario tiene acceso a todas estas caractericas a traves de la rtl , y todos los recursos de la maquina a su alcance (hablamos de grandes maquinas) , no hay s.o. intermediario .Para una simple aplicacion pascal no hay mejora pero para servidores , programas de tiempo real y procesos que necesitan rapidas respuesta , se buscara ir por esos usuarios . Bueno me gustaria mucho que comenten hacerca de las utilidades que se le puedan dar a esto y sus dudas , un saludo Matias Vara .

PD : Por supuesto que sera una ardua tarea , pero ya he comenzado .

August 05, 2006 12:05 AM

May 19, 2006

ToroOS

Toro 1.1.3!

Bueno aqui subo tal vez la ultima version de Toro para fpc 1.0.6 en la que estaba trabajando antes de virar rumbo a 64 bits . Esta cubre un gran cantidad de bugs referidos al fs y al tratamientos de los nombres de archivos .

Un saludo Matias Vara .

Aqui les dejo los links para bajar un version minimal de fpc 1.0.6 y el linkeador ld necesario , este corre con cygwin 2.427 o superior .

May 19, 2006 10:27 PM

May 10, 2006

ToroOS

Rumbo de Toro

En este momento han surgido cosas que me han hecho virar el rumbo del proyecto Toro , por lo tanto no se como seguire con la distruibucion del codigo , los mantendre lo mas actualizado posible.
Aqui citare a grandes rasgos los nuevas implementaciones a realizar en el futuro a largo plazo :
- Traduccion de Toro a fpc 2.x.x
- Portar toro 32 bits a 64 bits . Soporte Multicore y Multiprocesadores .
- Implementacion de un stack TCP/IP
- Creacion de drivers para discos SATA .

Bueno a groso modo este sera el nuevo camino .

Un saludo Matias E. Vara

May 10, 2006 11:00 PM

February 19, 2006

ToroOS

Toro 1.1.2 !!

Bueno luego de casi 6 meses de no publicar nada , libero todo de golpe! .

He subido 4 nuevos paquetes , los cuales pueden bajar de aqui.

Aquí pasare a explicar cada uno :

Toro-1.1.2-src.zip y toro-1.1.2.img :

Source de la nueva versión de Toro , esta implementa las siguientes mejoras :

- Timers del kernel .
- Reescritura del planificador .
- Son escritas algunas llamadas al sistema faltantes en el VFS , y son solucionados gran cantidad de bugs .

También subo la imagen de un disquete de 3 ½ para aquellos que no quieren tener que compilar todo el source .

fpc-1.0.6-rtl-toro-bin y fpc-1.0.6-rtl-toro-src :

Después de mucho trabajo porte la librería rtl de freepascal 1.0.6 para toro . Es bastante simple pero permite generar aplicaciones directamente desde FPC , por ahora solo para la versión 1.0.6 .

Incluyo los binarios compilados que deberan ser extraídos en fpc/units/target , donde target puede ser : win32 , go32v2 ,depende para el sistema que fue bajado .
Cuidado que los archivos son sobrescritos , por lo tanto ya no se podrá compilador sobre la plataforma anteriormente instalada .

Y también he subido los sources , que deberan ser extraídos dentro de la estructura de directorios del source de freepascal en el directorio source/rtl/

Gracias ha esto he reescrito las aplicaciones de /USR/TOOLS , la shell la he hecho un poco mas “completa” , pero es bastante sencilla , espero que ahora alguien se anime y haga un shell como la gente .

Espero que disfruten de todo esto , tanto como yo cuando lo escribí .

Un saludo Matías Vara .

February 19, 2006 01:30 AM

January 24, 2006

ToroOS

Estado actual de TORO.

En este momento se esta optimizando todo el codigo de TORO , se ha modificado la planificacion , las irq , se han implementado los timers del kernel , se han modificado el driver de fdc , entre otras cosas .

Tambien se esta comenzado a portar FPC para TORO , lo que representara un paso muy importante puesto que la escritura de soft sera mucho mas facil .

La nueva version estara , supongo , para los primeros dias de Marzo 06 .

Un saludo , Matias Vara .

January 24, 2006 10:32 PM

December 26, 2005

ToroOS

Implementación de colas ligadas en Toro

Implementación de colas ligadas en Toro :

Las colas ligadas son un método eficaz para mantener agrupados una cantidad ilimitada de elementos . En Toro son utilizadas para agrupar los procesos , los timers , los superbloques , los inodos , los buffers , etc. , se le ha dado gran cantida de uso .

Podemos clasificarlas en dos tipo : simplemente ligadas o doblemente ligadas .

Por lo general las estructuras que se encuentran en una cola simplemente ligada posee solo un campo que apunta a la siguiente estructura y la ultima de la cola posee este campo a un puntero nulo , es decir solo pueden ser recorridas en un solo sentido .
A diferencia de estas , las doblemente ligadas posee dos campos una punteando a la siguiente estructura y otra a la anterior , pudiéndose así recorrerla en ambos sentidos y de manera cíclica .

La principal diferencia es para què van a ser utilizada . Por un lado las simplemente ligadas posee un campo menos , es decir ocupan menos memoria , pero si en la cola se están agregando y quitando elementos continuamente se consume mucha cpu , porque por cada elemento que debo quitar debo recorrer toda la cola para encontrar el anterior! .
Este problema se soluciona creando un nuevo campo apuntando al elemento anterior , así surgen las doblemente ligadas .
Es por eso que las colas que mantiene a los procesos , inodos , timers ,etc. , son colas doblemente ligadas , mientras que las colas que mantiene a los buffers que deben ser escritos a disco se encuentran en colas simplemente ligadas , cada buffer es agregado al comienzo y cuando deben ser quitados por la llamada sync() , se recorre la lista desde el inicio sacando de a uno todos .

Todo muy lindo , pero el hecho de que sean tan utilizadas hace necesarios procedimiento muy rápidos y eficientes , y este es el motivo del articulo .
Lo que se trato de crear fue procedimientos generales para el tratamiento de colas ligadas , tal como lo hace linux , pero en freepascal .

Todo el código del manejo de colas ligadas se encuentra en el archivo Include/Head/list.h

Este como se ve no es una unidad sino solo un archivo que debe ser incluido en la unidad luego de IMPLEMENTATION

Para que funcione deben ser declarados en la unidad cuatro símbolos ,de la manera tradicional , {$DEFINE Use_Tail} , estos son :

Use_Tail : le indica al compilador que el código de manejo de las lista debe ser incluido

nodo_struct : Debe contener la estructura de los elementos dentro de la cola , por ejemplo para una cola ligada de procesos valdría :

{$DEFINE nodo_struct = p_tarea_struc}

Siempre se considera a nodo_struct como un puntero .



nodo_tail : Puntea al elemento cabecera de la lista , puede estar definido o no .

next_nodo y prev_nodo : Estas estructuras poseen los campo dentro de los elementos de la lista que puntean al siguiente elemento y al anterior , por ejemplo para el caso de cola de procesos , estos valdrían :

{$DEFINE next_nodo = next_tarea }
{$DEFINE prev_nodo = prev_tarea}


El procedimiento para encolar un elemento , si se ha definido nodo_tail :

procedure Push_Node(Nodo : nodo_struct) ; inline ;

o en el caso de que no se haya definido nodo_tail :

procedure Push_Node(Nodo : nodo_struct;var Nodo_Tail : nodo_struct);inline;

La diferencia de que se defina o no nodo_tail , es la capacidad de trabajar en una unidad con mas de una cola ligada , puesto que de lo contrario se definiría un único valor para el símbolo nodo_tail , con esto se especifica el nodo cabecera de la cola en cada llamada .

Siempre el elemento es agregado al comienzo de la cola .

Ojo! nodo_tail no es una estructura sino solo un puntero al primer elemento de la cola .



Para quitar un elemento sucede lo mismo :

El procedimiento para quitar un elemento , si se ha definido nodo_tail :

procedure Pop_Node(Nodo : nodo_struct );inline;

o en el caso de que no se haya definido nodo_tail :

procedure Pop_Node(Nodo : nodo_struct;var Nodo_tail : nodo_struct);inline;

Como se ve todos los procedimiento son declarados como inline para acelerar su ejecución

Para hacer un poco mas “entendible” el código suelo definir otro símbolo que oculte a estos procedimientos :

{$DEFINE push_buffer = push_node }
{$DEFINE pop_buffer = pop_node }

Lo bueno de esto que definiendo un par de símbolos ya tenes todo el código para la manipulación de listas ligadas sin importar las estructuras , campos , etc .


Para el caso de colas simplemente ligadas , se debe definir el símbolo Use_Simple_Tail
para comenzar a trabajar con ella .
Igual que en el caso de las doblemente ligadas se cuenta con los procedimientos :

para agregar un elemento :

procedure Push_Snode (Nodo , sNodo_Tail : snode_struct);inline;

y para quitar un elemento :

procedure Pop_Snode (Nodo,sNodo_Tail : snode_struct);inline;

Ahora los símbolos nodo_struct y nodo_tail pasan a llamarse snode_tail y snode_struct respectivamente


Espero que les haya servido este pequeño articulo .
Una saludo



Matias E. Vara
Toro.sourceforge.net
matiasvara@yahoo.com

December 26, 2005 11:58 PM

November 06, 2005

ToroOS

Generando un kernel con FreePascal

Bueno tal vez el titulo no sea muy descriptivo pero básicamente lo que tratare de explicar es como generar un ejecutable en freepascal sin que este utilice llamadas al sistema , llevando obviamente a la caída del sistema .

A la hora de comenzar a escribir un S.O. la principal duda q se me planteo fue que compilador iba a utilizar . Elegí Freepascal , porque además de gustarme el lenguaje me era fácil portarlo puesto que es independiente del S.O. sobre el cual corra , esto no significa que no utilice llamadas al sistema sino que posee un capa de abstracción de llamadas primitivas las cuales son adaptadas al S.O. sobre el cual corra , es por eso que al compilador no le interesa el S.O. sobre el que se ejecuta .

En el caso de la versión 1.0.6 de FP utilizando el extensor go32v2 el tema es bastante fácil . Cuando se utilizan procedimientos y funciones dependientes del S.O. como por ejemplo writeln , write , read ,etc . ( no así sizeof () , len() , etc . ) el compilador enlazada nuestro ejecutable al archivo objeto donde se encuentran estas llamadas , básicamente lo que se hizo en Toro es capturar estas llamadas , creando el archivo Lib/fpclib/fpclib.pas con estas llamadas y linkeandolo junto con todo el kernel .
Por ejemplo :

llamada muy utilizada para el tratamiento de strings

procedure int_strconcat(s1,s2:pointer);[public,alias:'FPC_SHORTSTR_CONCAT'];
var
s1l, s2l : byte;
type
pstring = ^string;
begin
if (s1=nil) or (s2=nil) then
exit;
s1l:=length(pstring(s1)^);
s2l:=length(pstring(s2)^);
if s1l+s2l>255 then
s1l:=255-s2l;
move(pstring(s1)^[1],pstring(s2)^[s2l+1],s1l);
pstring(s2)^[0]:=chr(s1l+s2l);
end;


También se podría haber linkeado directamente el archivo objeto de FP donde se encontrase la llamada , pero haría crecer el kernel enormemente!!! .


En las unidades mientras no se utilicen llamadas que depende del S.O. o que provengan de unidades externas no hay problema , el compilador no realizara llamadas al sistema .
La cosa cambia con un ejecutable . Cuando se compila el archivo kernel/kernel.pas , este ya no es una unidad sino que es un programa , para volverlo “limpio” de llamadas al sistema lo que se hace es simplemente quitarlas del código assembler :

Extracto del archivo /kernel/Makefile .

$(FPC) $(FPC_FLAGS) kernel.pas

$(GREP) -iv "INIT$$SYSTEM" kernel.s > kernel.tmq
$(GREP) -iv "FPC_INITIALIZEUNITS" kernel.tmq > kernel.tmp
$(GREP) -iv "FPC_DO_EXIT" kernel.tmp > kernel.kkk
$(GREP) -iv "OBJPAS" kernel.kkk > kernel.s


Estas son los símbolos que deben ser retirados y que llevan a la caída del kernel cuando bootea ( a la caída me refiero a una excepción , muy común la 13 )


Una vez compilados todos los archivos objetos son linkeados con ld , puede pasar que tire errores de símbolos desconocidos , es decir hay funciones o procedimiento que están llamando a otros que no se encuentran en los archivos objetos linkeados . Lo mas posible es que haya errores en el tipeado de nombres , o que el head de la función no haya sido declara como publica . Si todo esto no es correcto habría que ver si es una llamada a librerías del compilador , si es así , se debería buscar el procedimiento o función en el código de FP , copiarlo al archivo lib/fpclib/fpclib.pas y declararlo como publico con el alias devuelto como error en ld .



FPC 2.0.0 sobre win32 y linux :

Sobre estas plataformas la cosa no me resulto fácil , lamento informa que no he llegado a una versión booteable del kernel de toro compilado sobre win32 , es por eso que las distribuciones se harán por ahora para go32v2 y para linux , o tal ves solo para linux puesto que se dejaron producir versiones de FPC para DOS .

Para el caso de FPC 2.0.0 sobre linux , al compilar el archivo kernel/kernel.pas solo se quita el símbolo :

$(GREP) -i 'FPC_INITIALIZEUNITS' -v kernel.s > kernel.q


Para el caso de llamadas al sistema lo que opte hacer ahora fue directamente el linkeo de los archivos objeto que contienen las llamadas utilizadas por el compilador estas son :

/usr/lib/fpc/2.0.0/units/i386-linux/rtl/prt0.o
/usr/lib/fpc/2.0.0/units/i386-linux/rtl/system.o
/usr/lib/fpc/2.0.0/units/i386-linux/rtl/objpas.o

Lo que hace es incrementar enormemente el archivo toro-1.1 , que posee casi el triple del mismo archivo generado con el FPC para DOS .


La unidad Lib/fpclib/fpclib.pas deja de utilizarse para el FPC sobre linux . Por supuesto , posiblemente dentro de estos archivos objetos hayan funciones que realicen llamadas al sistema , pero no causaran problemas mientras no se las llame :) .




Espero que este articulo les sirva para saber como se puede generar un ejecutable totalmente booteable (por ejemplo un elf para grub o un binario para un booteador propio) sin que posibles llamadas del compilador lleven a excepciones no deseadas .

Aclaración! si el elf generado va a ser utilizado por un booteador como grub tiene que ser creado bajo la norma multiboot sino grub no podrá levantarlo , toro fue creado bajo ese Standard , en próximos documentos describiré como hacer un elf que pueda ser levantado con grub .



Matias Vara
Toro.sourceforge.net
matiasvara@yahoo.com

November 06, 2005 11:11 PM

November 01, 2005

ToroOS

Compilando el kernel de Toro – 1.1

Este procedimiento es aplicable a partir de la versión 1.1 de Toro .


Una vez obtenido el paquete zip de la versión de Toro debe ser extraído sobre un directorio cualquiera o bien sobre un disket sobre el cual previamente se debe haber instalado grub . En el raíz del disket deben figurar tres directorio : usr , bin y boot , para que grub pueda bootear .

Para comenzar la compilación se debe modificar el archivo /usr/toro-1.1/make.rules completando las variables de make con sus ubicaciones correctas .

El siguiente paso es hacer un make sobre el directorio /usr/toro-1.1/ y listo! , si todo resulta bien será generado el archivo elf ejecutable toro-1.1 y se moverá al directorio /boot para ser levantado por grub durante el booteo .

También deberán ser compiladas la utilidades que se encuentran en el directorio /usr/tools realizando un make en cada directorio y los ejecutables serán movidos al directorio /bin donde se encuentran todos los binarios .

Una vez tenido compilado correctamente Toro sobre el disket podrá ser booteado bien sobre un emulador o directamente sobre la maquina .

También pude ser compilado sobre linux cualquiera sea el booteador instalado mientras levante el elf de Toro , pero de todos modos en este caso también Toro buscara la shell en la disketera .

En próximas versión Toro podrá bootear sobre discos duros o cualquier dispositivo siempre y cuando tenga los drivers requeridos .


Matias E. Vara
Toro.sourceforge.net
matiasvara@yahoo.com

November 01, 2005 11:57 PM

Nuevos posteos

Ire posteando los documentos que se encontraban en papers y otros docuementos de como programar sobre , etc . Espero que les sea interesante . Un sa ludo Matias Vara .

November 01, 2005 11:51 PM

October 11, 2005

ToroOS

Trabajando en la version 1.1.1

Estoy trabajando en volver alta mente estable la version 1.1 , esta nueva version no incluira nuevas implementacion solo sera muy estable . Espero que me comenten los bug que encontraron en la version 1.1 y asi podre depurarla bien .
Un saludo Matias Vara .

Pd : Ahora puede postear cualquiera asi espero sus comentarios .

October 11, 2005 11:45 PM

September 15, 2005

ToroOS

Bug en el paquete de la version 1.1

He encontrado un error en el codigo de la version 1.1 , este se encuentra en el archivo toro-1.1/filesystem/exec.pas , el error se encuentra en la declaracion de la funcion Sys_Exec , esta deveria ser : [public , alias : 'SYS_EXEC'] , en vez de 'SYS_EXE' , Esta se encuentra tanto en el paquete para go32v2 como para el de linux .
Un saludo Matias Vara .

September 15, 2005 10:52 PM

August 20, 2005

ToroOS

Toro compilado sobre fpc-linux

Ya esta disponible el paquete .zip te toro-1.1 para ser compilado sobre la utlima version de fpc sobre linux .
Un saludo Matias Vara .

August 20, 2005 01:32 AM

August 02, 2005

ToroOS

Recien salido del horno Toro 1.1!!

Despues de mucho trabajo ya se encuentra la version 1.1 de Toro . Esta fue distribuda de dos formas un paquete zip con todo el codigo y listo para ser compilado; y la imagen de un disket de 3 1/2 listo para ser ejecutado . Bueno espero que la pruben y me den sus comentarios . Esta version fue compilada con la version de FPC para go32v2 , puesto que me esta trayendo dolor de cabeza compilarlo con la version para win32 .
Un saludo Matias Vara .

August 02, 2005 01:37 AM

July 16, 2005

ToroOS

Implementaciones de Toro 1.1

Aunque la version de Toro 1.1 todavia no ha sido publicada el principal motivo es la gran cantidad de cambios que esta presenta , a continuacion se citaran algunas :

- Implementacion del VFS .
- Se deja de utilizar el torofs para implementar driver para fat12fs .
- Soporte multiboot , toro es booteable sobre grub .
- Reescritura de la unidad dma.pas .Creacion de una pila con paginas para dma .
- Reserva de areas de memoria para io con dispositivos hard.
- Reescritura de la unidad scheduler.pas , Implementacion de los algoritmos RR y FIFO en tiempo real .
- Reescritura de la unidad signal.pas
Y algunas cosas mas

Es por eso que mencionar una fecha es imposible .
Un saludo Matias Vara .

July 16, 2005 10:52 PM