-------------------- - Le Pascal facile - -------------------- Et ceci rien que pour les abonnés du Petit Amiga Illustré, dit PAI. Je pense pouvoir écrire quelques fichiers pour amener les nouveaux venus dans le monde de la programmation à utiliser le Pascal, quel qu'il soit. Pour ma part et dans les exemples, j'utilise le PCQ pascal v1.1, qui, comme chacun le sait, se trouve dans le domaine public : Fred Fish n° 503. Petite histoire du Pascal ~~~~~~~~~~~~~~~~~~~~~~~~~ Le Pascal a été crée, au départ, dans le milieu des années 60, par un francais. Comme toute bonne invention française qui se respecte, cela ne marcha pas et le langage sombra dans les oubliettes. Pourquoi s'en sert on actuellement?... Mais parce que des américains l'ont sorti des oubliettes, l'ont depoussieré et l'ont traduit en anglais! Et, depuis, il s'est considérablement developpé pour aboutir au must qu'est le Turbo Pascal v5.5 de Borland. L'AMIGA n'est pas dépourvu de Pascal (cf Amiga News n° 50) mais deux se détachent apparemment du lot : le premier est commercial et c'est le Highspeed Pascal de chez Hisoft. Le second est du domaine public et c'est le PCQ Pascal. Celui ci est parfois lourd à manipu- ler pour sortir un executable dont le source est astronomique mais, ne l'ou- lions pas, c'est un DP. Pourquoi choisir le Pascal? Plus lent que le C (juste un peu), son code est beacoup plus clair, donc plus simple à comprendre. Et les Basics? Ils n'aprennent pas vraiment à programmer de façon méthodique et sont lent, très lent, très très très .... Vous m'avez compris? Bon, on continue. Pour le Basic, je sais de quoi je parle : avant mon 'Miga, j'avais (et j'ai toujours) un MSX 2 (Z80, 256 ko de RAM, 64 ko de ROM) et, pendant 4 ans, j'ai program- mé en MSX Basic .... Vient ensuite AREXX. Plus structurés, je pense que le basic, il est tout aussi lent. Puis, viennent les languages que je ne connait pas : le Fortan, le Modula 2. Je ne peut vous dire s'ils sont bon. Pour le Fortan, reportez vous (si vous pouvez), à l'article de X. Leclercq dans l'Amiga-News n°51. Voila pour l'intro. Passons aux choses serieuses. Structure d'un programme ~~~~~~~~~~~~~~~~~~~~~~~~ Ce que l'on peut faire de plus simple c'est : program essai; begin end. Même en C il en faut plus ... Le source doit toujours commencer par : program nom_programme; Le point virgule est obligatoire après chaque instructions. Le bloc principal du programme commence à ' begin ' et se finit à ' end. ' Déclarer les variables ~~~~~~~~~~~~~~~~~~~~~~ Il est obligatoire de les declarer au debut du program : une variable non declarée entrainera le méssage ' Unknow ID ', ID pour identifier, c'est a dire variable. Pour dire au compilateur que la déclaration commence, il faut inserer 'var'. Les differents types de variables sont : * byte : codé sur 1 octet ( 8 bits ), une variable byte prend une valeur entre 0 et 255 mais pas avec des virgules. * short : codé sur 2 octets ( 16 bits ), une variable short prend une valeur entre -32768 et 32767. * integer : le pied integral! Codé sur 4 octets ( 32 bits ), on va de -2 billion à 2 billion. * real : les réels qui vont de 10 x 10^18 à 5 x 10^-20, positif ou negatif. * char : pour caractére. Un caractére par variable. * boolean : pour les variables booléenne. Prend pour valeur -1 si la condition est fausse, 0 si la condition est vraie. Il est plus pratique (et plus facile à retenir) de donner à ces variables les valeurs 'False' pour faux et 'True' pour vrai. * string : pour chaine de caractéres. Sous PCQ, la gestion des string est légérement bizarre par rapport au Turbo Pascal. En effet, PCQ considéré les string commen une suite de 'char' et il faut declarer une longueur à la chaine dans le programme principal par une fonction contenue dans le fichier include Stringlib.i . Nous verons exactement le probléme plus tard. Exemple d'initialisation : program essai; var i,j,k:integer; c:char; begin } } code } end. Ce petit programme declare les variables i, j et k en entier (integer) et c en caractére (char); On peut remarquer que l'on n'est pas obligé de repeter var à chaque ligne. Initialiser les variables ~~~~~~~~~~~~~~~~~~~~~~~~~ Par initialiser, je veux dire donner une valeur à une variables. La syntaxe est la suivante : variable := valeur; pour les variables de type suivants : * integer * real * byte * short Pour les caractére la syntaxe est la suivante : variable := 'caractére'; Pour les chaines : variables := "chaines de caractére"; N'oubliez surtout pas que la longeur de la chaine doit être inferieure ou égale à la longueur à laquelle vous avez initialiser la variable (voir plus bas). Les opération sur les chiffres suivent le même principe : (i,j et k sont des entiers) i := j + k; i := j - k; i := j * k; multiplication i := j / k; dividion i := j mod k; reste de la division } Il se peut que je me i := j div k; quotient de la division } trompe! Intervertir } au cas où Les operation sur les variables booléenne sont les suivantes : (i,j et k sont des boolean) i := j and k; i := j or k; i := not k; i := j xor k; Se sont les opérations logiques. Ceux qui le peuvent demandent à leur profs de maths de leur(s) expliquer. Les autres m'écrivent. S'il y en a peut, je leur repond personnellement sinon, j'envoie un fichier au P.A.I. Pas d'opération sur les caractéres. Les opération sur les chaines sont expliquée (succintement) dans le fichier include Stringlib.i (repertoire Utils) et qui est fourni avec la traduction des explications plus deux fonctions que j'ai créée et qui sont verifiées par le programme verifie_fonction. Lorsque l'on veut travailler avec des chaines, il faut obligatoirement declarer l'existence de la chaîne au systéme pour qu'il lui reserve de la mémoire. Ceci se fait au moyen de la commande allocstring(l), où l represente la longueur maximale de la chaîne. Un appel à la fonction allocstring est obligatoire pour chaque chaîne. A la fin du programme, il faut rendre la mémoire au systéme. Ceci se fait par un appel à la procédure freestring(s), où s represente une chaîne, pour chaque chaîne. Pour les autres opérations, de reporter au fichier StringLib.i. J'arrête là car je joint à ceci un source : Trans.p. C'est un petit programme que j'ai developpé pour mes besoins personnels mais qui pourra servir à bon nombre de gens. Au départ, le programme devait transformer tous les caractéres 'parasites' recut par mon imprimante : les é, les è, les à, etc, etc. Je m'explique : j'ai conservé mon imprimante MSX et je n'ai pas de driver (galére)! Je passe donc par 'par:' (prise parallele, sans passer par les prefs) pour lui envoyer mes fichiers. Probléme, la table ASCII de mon imprimante différe de la table ASCII de l'Amiga au dessus du 128éme caractéres. Je fait alors mon petit programme. C'est alors que je me rend compte que la table ASCII de mon imprimante est quasi identique à la table ASCII des PC! Je pense alors que je ne dois pas être le seul à avoir des problémes. Puis, je reçoit le P.A.I. par l'intermédiaire de AmigaNews (Superbe revue). C'est alors que me vient l'idée de faire une serie d'article sur le Pascal, en particulier le PCQ. Je suis actuellement en train de faire des modifications sur un source identique pour pouvoir transformer quasi complétement la table PC en table Amiga et vice-verca mais je rencontre quelque probléme. Toute les suggestions et commentaires, ainsi que tous les fichiers pour faire la liaison entre differentes librairies (Arp, Req, ReqTool) sont à envoyer à : Michel TOURNAY 27 rue Felix Près 08600 fromelennes preciser FRANCE au besoin. P.S. : Peut-être que certain caractère seront representés, dans le fichier source, par un rectangle. Ne vous inquiétez pas, dans un éditeur, ces caracté- res passe trés bien, ainsi que dans le compilateur. Aucun bug à signaler! P.S. : Si des personnes qui ont la doc de PCQ remarquent des inexactitudes dans mes dires, qu'ils me contactent car j'ai la version en glaise (ouarf!).