Généralités

PP est un compilateur gratuit pour PalmOS, il permet de générer des exécutables .PRC (en mode 68000 et ARM) ou des applications en mode console, à partir du langage Pascal standard.
Vous pourrez aussi créer avec ce compilateur des shared libraries, DA et autres armlets... directement sur votre Palm ! Idéal pour programmer lorsque vous n'avez pas d'ordinateur sous la main !

PP a été créé par Philippe Guillot, vous trouverez la dernière version sur le site suivant : http://www.ppcompiler.org/.

Editeur et exemples

Je conseille à tous ceux qui souhaitent programmer sur Palm d'utiliser le freeware PIAF qui est un éditeur pour PP mais aussi pour iziBasic. Outre la coloration syntaxique, il possède de nombreuses autres fonctionnalités, notamment celle de compiler directement son code source, pour permettre sur une seule interface de coder et compiler !

Vous trouverez cet éditeur sur le site de PP à l'adresse : http://www.ppcompiler.org/download.php.
Vous trouverez aussi sur cette page tous les fichiers pour débuter dans le monde de PP ! A savoir API, exemples, tutoriaux, librairies etc.

Voici un exemple de ma création qui fut mon premier programme avec PP compiler :

 
Sélectionnez

{$appl Thir}
Program Thireus(cmd); // Nom du programme

{$i PalmAPI2.pas} // Déclaration du fichier API
{$i PPlib.pas}    // Une petite librairie bien utile


Procedure Write(S: String;X,Y: Integer);
Var
  N: Integer;
Begin
  N := Length(S);
  WinDrawChars(S,N,X,Y);
End;

Procedure DrawCell(u,v,X,Y: Integer);
Var
  Rec: RectangleType;
Begin
  With Rec do begin
    topLeft.x := X;
    topLeft.y := Y;
    extent.x  := u;
    extent.y  := v;
    WinDrawRectangle(Rec,0);
  end;
End;

Var
  Cmd: UInt16;
  Wrt,oldScale: Integer;

Procedure Go;
Label
  1;
Var
  i,x,y: integer;
  x_n,x_nn,y_n,a_0,b_0: real;
  a: Boolean;
  w,wt,dep1,dep2: UInt32;
  mode: WinScreenModeOperation;
Begin
  a := true;
  w := 320;
  wt := 480;
  dep1 := 8;
  dep2 := 16;
  mode := winScreenModeSet;
  WinScreenMode(mode,w,wt,dep1,a); // Petite astuce pour passer en Hires+
  WinScreenMode(mode,w,wt,dep2,a); // Vous avez une autre idée vous ?

  WinSetBackColor(255);
  WinSetForeColor(255);
  WinSetTextColor(0);

  WinPushDrawState;
  oldScale := WinSetCoordinateSystem(0);

  for x := 0 to 320 do begin
    b_0 := (x-160)/150;
    for y:=0 to 480 do begin
      a_0 := -(y-240+100)/150;
      i:=0;

      x_n := 0;
      y_n := 0;

      while i<100 do begin
        x_nn := x_n;
        x_n := x_n*x_n - y_n*y_n + a_0;
        y_n := 2*x_nn*y_n + b_0;
        if (x_n*x_n + y_n*y_n) > 4 then begin
          WinSetForeColor(100-i);
          DrawCell(1,1,x,y);
          i := 100;
        end;
        i:=i+1;
      end;
    end;

    write('Currently running on column '+intToString(x)+'                         ',0,0);

    if KeyCurrentState<>0 then begin
      goto 1;
    end;

  end;

  // WinDrawLine(0,0,160,225);
  1:
  WinPopDrawState;
End;

Begin   // Programme principal
  Go;

  while KeyCurrentState = 0 do;

  // if cmd = sysAppLaunchCmdNormalLaunch then begin
  //   Wrt := SysTaskDelay(10*SysTicksPerSecond);
  // end;
End.

Il s'agit de la fractale Mandelbrot (pour ceux qui font des Maths parmis vous...).

Vous verrez de vous-même que les API fournies sont très limitées et qu'il faudra créer les vôtres si vous voulez faire de jolis programmes.

On passe donc à la partie astuces qui vous sera bien utile, vous verrez.

Astuces

Pour étendre les possibilités de l'API fournie par défaut à savoir "PalmAPI2.pas", il existe un site traitant de "Palm OS® Programmer's API Reference" :
http://dogbert.mse.cs.cmu.edu/charlatans/References/Tech_Doc/Palm%20OS%205.0%20Docs/Palm%20OS%20Reference.pdf.

Allez voir dans le fichier "PalmAPI2.pas" et vous aurez une idée de la syntaxe à utiliser pour créer vos nouvelles procédures ou fonctions.

Par exemple :

"PalmAPI2.pas" contient la procédure suivante :

 
Sélectionnez

procedure	WinDrawLine(x1,y1,x2,y2:Coord); inline(SYSTRAP,$A213);

"Palm OS® Programmer's API Reference" vous renseigne :

WinDrawLine Function
Purpose
Draw a line in the draw window using the current foreground color.

Declared In
Window.h

Prototype
void WinDrawLine ( Coord x1, Coord y1, Coord x2, Coord y2 )

Parameters
x1 : x coordinate of line start point.
y1 : y coordinate of line start point.
x2 : x coordinate of line endpoint.
y2 : y coordinate of line endpoint.

Returns
Returns nothing.

Comments
This function differs from WinPaintLine() in that it always uses winPaint mode (see WinDrawOperation). WinPaintLine uses the current drawing state transfer mode instead of winPaint.

See Also
WinDrawGrayLine(), WinEraseLine(), WinFillLine(), WinInvertLine(), WinPaintLine(), WinPaintLines()



Il vous suffit donc juste de prendre connaissance de la partie Prototype pour les paramètres d'entrée. Puis il vous faudra le systrap ! ( inline(SYSTRAP,$A213); )

Pour prendre connaissance des systrap à utiliser pour que les fonctions marchent, il vous suffit d'aller sur ce site : https://www.nsbasic.com/palm/info/technotes/TN06.htm.

Vous trouverez par exemple la ligne suivante :
WinDrawLine 531

Il vous suffira alors de convertir le nombre décimal en hexadécimal : 531 (décimal) -> 213 (hexadécimal) et de rajouter la lettre A au début, car l'hexadécimal fonctionne par couple, ce qui nous donne : A213. Ce qui nous donne bien le inline(SYSTRAP,$A213);
(Un autre exemple : 12 (décimal) -> C (hexadécimal) -> A00C (systrap)).

On vient de recréer la procédure :

 
Sélectionnez

procedure	WinDrawLine(x1,y1,x2,y2:Coord); inline(SYSTRAP,$A213);

Avis personnel et conclusion

Tout d'abord, le fait d'avoir un compilateur de poche c'est vraiment très pratique !

Je tiens aussi à dire que personne ne m'a appris à me servir de PP, j'ai appris le Pascal directement avec PP en lisant le peu d'exemples qui sont fournis avec le compilateur. Pour ce qui est de la partie astuces, je l'ai moi-même trouvée à cause d'une programmation intensive avec PP, et dû au manque de fonctions.

Je trouve qu'il est dommage qu'il n'y ait pas plus de développeurs PP.
Je compte donc sur vous pour commencer dès maintenant à programmer sur Palm avec PP ! Maintenant que vous avez un mini tutoriel sous la main, foncez ! Vous ne serez pas déçu.