Mes programmes OpenSource

Pour une offre professionnelle, consultez mon site http://www.execute.re.


Kylix - Sources Borland Kylix (Linux)

Kylix 1 DirectX MD2 MD2T KCyber OpenGL DCal3D

MD2 MD2 Viewer

Première application

Avant de recevoir la beta 4, je travaillais sur un afficheur de modèles Quake2 (fichiers .MD2) avec mon bon vieux Delphi 2 (projet compatible Delphi 5)...alors mon choix a été rapide, essayons de compiler ça sous Kylix.

Ben ça marche pas, mais je le savais d'avance, ne serais ce que parce que les unités de la CLX sont préfixées d'un 'Q' :)
Le compilateur étant toujours aussi rapide (vive le Pascal), en un rien de temps (et en lançant un projet vierge pour comparaison) il me faut quelques minutes pour ajuster les USES.
uses
{$ifdef win32} // Delphi Units
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ShellAPI,StdCtrls, ExtCtrls,
{$else} // Kylix Units
  SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
  QExtCtrls,
{$endif}
  MD2MAP, Scenes;
Suppression du code Windows (qui n'est pas vital dans cet exemple)
  {$ifdef win32}
   // Windows specific Drag&Drop !
    procedure WMDropFiles(Var Msg:TMessage); message WM_DROPFILES;
  {$endif}
Retour à l'équivalent VCL pour le code spécifique Windows vital !
 {$ifdef win32}
  hFile:=CreateFile(PChar(fName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hFile=INVALID_HANDLE_VALUE then raise Exception.Create('Unable to open file '+fName);
  hMap :=CreateFileMapping(hFile,nil,PAGE_READONLY,0,0,nil);
  if hMap=0 then raise exception.Create('Unable to Map file '+fName);
  hPtr:=MapViewOfFile(hMap,FILE_MAP_READ,0,0,0);
  if hPtr=nil then raise exception.Create('Unable to view file '+fName);
 {$else}
  Stream:=TMemoryStream.Create;
  Stream.LoadFromFile(AFileName);
  hPtr:=Stream.Memory;
 {$endif}
Derniers petits ajustements
{$ifdef win32}
{$R *.DFM}
{$else}
{$R *.xfm} // Kylix use "xfm" files where Delphi use "DFM" files
{$endif}
{$ifdef win32}
{$R *.RES} // Delphi isn't case Sensitive
{$else}
{$R *.res} // Kylix IS case Sensitive !
{$endif}
Dernier petit détail, hors IDE, l'application retourne une erreur error in loading shared libraries: libqtintf.so: cannot open shared object file: No such file or directory; il sagit de l'équivalent d'une DLL windows qui n'est pas dans le "PATH"...en regardant le script startkylix j'en ai déduit le script suivant :
#!/bin/bash
echo "Starting MD2..."
LD_LIBRARY_PATH="/root/kylix/bin:$LD_LIBRARY_PATH"
export LD_LIBRARYPATH
./MD2
REM Equivalent DOS
echo "Starting MD2..."
PATH = c:\delphi\bin;%PATH%
MD2.EXE
Finallement voilà ce que ça donne : MD2.ZIP (sources Delphi/Kylix)

Version Windows 98
Version Mandrake 7.0