Difference between revisions of "Mode MacPas/fr"

From Lazarus wiki
Jump to navigationJump to search
m (→‎Langage: OSX -> macOS)
 
(14 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{Mode_MacPas}}
 
{{Mode_MacPas}}
  
  ----- A  F I N I R -----
+
Le mode MacPas essaie d'être compatible avec les dialects Pascal couramment utilisé sur [[:Category:Mac OS Classic/fr|Macintosh]], ce sont [[THINK Pascal/fr|THINK Pascal]], [[Metrowerks Pascal/fr|Metrowerks Pascal]] et [[MPW Pascal/fr|MPW Pascal]]. Pour des tuyaux sur le portage du traditionnel compilateur [[Mac Pascal/fr|Mac Pascal]] vers [[Free Pascal/fr|Free Pascal]], voir [[Porting from Mac Pascal/fr|migration depuis Mac Pascal]]
 
 
Le mode MacPas essaie d'être compatible avec les dialects Pascal couramment utilisé sur [[:Category:Mac OS Classic/fr|Macintosh]], ce sont [[THINK Pascal/fr|THINK Pascal]], [[Metrowerks Pascal/fr|Metrowerks Pascal]] et [[MPW Pascal/fr|MPW Pascal]]. Pour des tuyaux sur le portage du traditionnel compilateur [[Mac Pascal/fr|Mac Pascal]] vers [[Free Pascal/fr|Free Pascal]], voir [[Porting from Mac Pascal/fr|Porting from Mac Pascal]]
 
  
 
==Différences comparées au Free PAscal standard==
 
==Différences comparées au Free PAscal standard==
Ici sont litées les différences entre le dialecte Macintosh de Pascal et le dialecte standard de Free Pascal (qui est Turbo Pascal).
+
Ici sont listées les différences entre le dialecte Macintosh de Pascal et le dialecte standard de Free Pascal (qui est Turbo Pascal).
  
 
===Implémentées (en 2.0.2)===
 
===Implémentées (en 2.0.2)===
Line 16: Line 14:
  
 
====Constructions de compilation====
 
====Constructions de compilation====
* Compile time variables are now different from macros. However, they are related. In the FPC documentation, what is written about macros, is often also valid for compile time variables. The difference is that macro substitution is only done with real macros (which are defined by $DEFINEC). Compile time variables on the other hand is defined by $SETC.  
+
* Les variables de compilation son maintenant différentes des macros. Toutefois, elles sont reliées. Dans la documentation FPC, ce qui est écrit pour les macros est souvent aussi vrai pour les variables. La différence est que la substitution de macro n'est vraiment faite qu'avec des vraies macros (lesquelles sont définies par $DEFINEC). Les variables de compilation sont définies par $SETC.
* Exportable compile time variables/macros. Compile time variables and macros defined in the interface part of a unit are exported to other MACPAS units, in the same manner as ordinary pascal constructs. See more below under '''Exportable macros'''.
+
* Variables de compilation/macros exportables. Les variables de compilation et les macros définies dans la partie interface d'une unité sont exportées vers les autres unités MACPAS, de la même manière que les constructions ordinaires de Pascal. Voir plus bas sous '''Macros exportables'''.
* Compile time variables may be assigned to hexadecimal numbers, like $2345.
+
* Les variables de compilation peuvent être affectées par un nombre hexadécimal, tel que $2345.
* $SETC <compvar>:= <expr> -- sets a compiler variable's value to an expression. ":=" as well as "=" are allowed. If not already defined, it is defined.
+
* $SETC <compvar>:= <expr> -- met une variable de compilation à une expression. ":=" aussi bien que "=" sont permis. Si non déjà définie, elle est définie.
* $DEFINEC <macro> <content> defines a macro <macro>, whose substitution text is <content>. -- as its counterpart $DEFINE. Parameterised macros are not supported.
+
* $DEFINEC <macro> <content> définit une macro dont le texte e substitution est <content>. -- comme sa contrepartie $DEFINE. Les macros paramétrées ne sont pas supportées.
* $IFC, $ELSEC, $ENDC -- as their counterparts $IF, $ELSE, $END
+
* $IFC, $ELSEC, $ENDC -- comme leur contrepartie $IF, $ELSE, $END.
* $ERRORC directive, similar to $ERROR
+
* La directive $ERRORC est similaire à $ERROR.
* UNDEFINED <compvar> -- in compiler variable expressions
+
* UNDEFINED <compvar> -- dans les expressions de variables de compilation.
* Compile time function OPTION(X), which returns, whether the compiler option X is set. Works for one letter options only.
+
* La fonction OPTION(X) à la compilation, qui renvoie si l'option de compilation est activée. Ne fonctionne que pour les options à une lettre seulement.
* TRUE, FALSE -- as values in compiler variable expressions
+
* TRUE, FALSE -- comme valeur dans les expressions de variable de compilation.
* Compiler directive $PUSH and $POP, which saves/restores the current state of all local compiler switches.
+
* Les directives de compilation $PUSH et $POP, qui sauve/restaure l'état de toutes les bascules locales du compilateur.
* Compiler option $J makes a variable external
+
* L'option de compilation $J rend une variable externe.
* Compiler option $Z makes variables and procedures externally visible
+
* L'option de compilation $Z rend les variables et les procédures visibles depuis l'extérieur.
* Compiler option $OV (+/-) sets overflow checking (fpc 2.5.1)
+
* L'option de compilation $OV (+/-) active le contrôle de dépassement (fpc 2.5.1).
* $ALIGN MAC68K, POWER, RESET (also POWERPC as equivalent of POWER in fpc 2.5.1)
+
* $ALIGN MAC68K, POWER, RESET (et aussi POWERPC comme équivalent de POWER dans fpc 2.5.1).
* Compiler directive LibExport is recognized, but does nothing at the moment. It may be implemented in the future.
+
* La directive de compilation LibExport est reconnue mais ne fait rien pour le moment. Elle pourrait être implémentée dans le futur.
* Metrowerks compiler directive $UNDEFC and $ELIFC
+
* Les directives de compilation Metrowerks $UNDEFC et $ELIFC.
* Metrowerks compile time expression DEFINED <compvar>
+
* L'expression de compilation DEFINED <compvar>
* Support for some Turbo/Delphi compiler directives as well, $DEFINE $UNDEF $IFDEF $IFNDEF $IF $ELSE $ENDIF $ELSEIF
+
* Support de certaines directives de compilation de Turbo/Delphi, aussi bien $DEFINE $UNDEF $IFDEF $IFNDEF $IF $ELSE $ENDIF $ELSEIF
  
 
====Langage====
 
====Langage====
 
* Object Pascal, style Mac. New, Dispose, Member sont supportés.
 
* Object Pascal, style Mac. New, Dispose, Member sont supportés.
* A procedure passed as parameter can be directly declared in the formal parameter list (anonymous procedure types).
+
* Une procédure passée comme paramètre peut être déclarée dans la liste de paramètres formel (types procédure anonyme).
* OTHERWISE in case constructs (actually it was already supported even for Turbo Pascal)
+
* OTHERWISE dans la construction case (déjà supporté même dans Turbo Pascal).
* Procedure Leave does the same as Break
+
* La procédure Leave fait la même chose que Break.
* Procedure Cycle does the same as Continue
+
* La procédure Cycle fait la même chose que Continue.
* Procedure Exit(<procname>), which works like Exit, but accepts the procname as parameter. <procname> must be the name of the procedure, in which Exit is used in. Non-local exit (as allowed in some Mac pascal implementations) is not allowed. Exit with return value as a parameter is not allowed. You can use "return <exit_value>;" though, as in Metrowerks Pascal.
+
* La sortie de procédure Exit(<procname>), qui marche comme Exit, mais prend en paramètre le nom de procédure. <procname> doit être le nom de la procédure, dans lequel Exit est utilisé. l'exit non-local (comme permis dans certaines implémentations de Mac Pascal) n'est pas permis. Exit avec une valeur de retour n'est pas permis. Vous pouvez utiliser "return <exit_value>;" comme dans le Pascal Metrowerks.
* Operators | and & (boolean operators, which are always evaluated as short-circuit boolean expressions)
+
* Les opérateurs | et & (opérateurs booléens, qui sont toujours évalués comme des expressions à court-circuit, applique donc l'évaluation paresseuse).
* UNIV modifer for types in parameter lists is accepted, but does nothing (update, it has been implemented in fpc 2.5.1)
+
* directive pour les déclaration de procédure. Comme pour CDECL.
* C directive for procedure declarations. Same as CDECL.
+
* "..." dans la déclaration de procédure, dénotant une fonction de style C avec des arguments variables.
* "..." in procedure declaration, denoting a C var arg style funtion.
+
* IMPLEMENTATION n'est pas requis dans les unités, si vide.
* IMPLEMENTATION is not needed in units, if empty.
+
* Directive External.
* External directive
+
* Les procédures déclarées dans la section interface qui n'ont pas de contrepartie dans la section implementation, sont considérées externes (nous les appelons des externes implicites). Leur nom externe est préfixé par le C_prefix de la cible. Dans Mac OS, c'est une chaîne vide, alors que dans Darwin/macOS, c'est un caractère souligné "_", afin qu'il soit correctement lié avec les bibliothèques macOS (qui sont compilées avec gcc).
* Procedures declared in the interface section, which do not have a counterpart in the implementation section, are considered external (we call them implicit externals). Their external name is prefixed with the C_prefix of the target. On Mac OS this is an empty string, whereas on Darwin/Mac OS X it is an underscore, so that it will properly link with Mac OS X' libraries (which are compiled with gcc).
+
* La fonction Ord peut prendre un pointeur en argument.
* Ord function can take a pointer as argument
+
* L'emploi de constantes FourCharCode (p.ex. OSType, ResType) directement comme paramètres. Cela est fait en surchargeant l'opérateur d'affectation dans le fichier MacPas.pp.
* Use of FourCharCode ( e. g. OSType, ResType) constants directly as parameters. This is done by an overloaded assignment operator defined in the file MacPas.pp
 
 
* Ord4
 
* Ord4
* All kinds of procedure variable stuff, compatible with Think Pascal and Metrowerks Pascal.
+
* Toutes sortes de procédure variable trucs, compatible avec Think Pascal et Metrowerks Pascal.
  
 
===Implémenté (en 2.1.1)===
 
===Implémenté (en 2.1.1)===
 
* return <value>
 
* return <value>
* compile time expressions are now short circuit evaluated
+
* Les expressions à la compilation sont maintenant évaluées de manière paresseuse.
* Bit-level packing of records and arrays
+
* Paquetage au niveau du bit pour les enregistrements et les tableaux.
  
===Prévu===
+
===Implémenté (en 2.5.1)===
* Nested procedure parameters (allowing a nested procedure to be actual parameter to another procedure) (update, it has been implemented in fpc 2.5.1)
+
* Paramètres de procédure imbriquées (permettant à une procédure imbriquée d'être paramètre d'une autre procédure)
 +
* Implémentation fonctionnelle du mot-clé UNIV.
 +
 
 +
===Prévues===
 
* uses se propageant
 
* uses se propageant
 
* Open (pour les fichiers)
 
* Open (pour les fichiers)
Line 67: Line 67:
  
 
===Non supporté===
 
===Non supporté===
Here is an (incomplete) list of mac pascal constructs which are not supported in mode mac at the moment, perhaps some of them will be supported in the future:
+
Voici une liste (incomplète) de construction Mac Pascal qui ne sont pas supportées en mode Mac pour le moment, peut-être certaines d'entre elles le seront à l'avenir :
 +
* StringOf.
 +
* HiWord, LoWord (identique à HiWrd, LoWrd).
 +
* Déclaration avancée implicite des objets (dans une déclaration d'objet, aucun ne peut faire référence à un autre non encore déclaré).
 +
* Dans les déclarations d'objet, le nom de méthode ne peut pas être précédé par le nom de classe (comme dans Think Pascal).
 +
* Expressions arithmétiques des variables de compilation.
 +
* Goto entre différents niveaux imbriqués (p.ex. pas de goto d'une procédure imbriquée dans la procédure englobante).
 +
* Exit entre différents niveaux d'imbrication.
  
* StringOf
+
===Construction Free Pascal permises en mode MacPas===
* HiWord, LoWord (same as HiWrd, LoWrd)
+
Les constructions Free Pascal qui sont actuellement permises ne Mode MacPas, mais qui ne le sont pas dans le dialecte Macintosh. Si des conflits surviennent, certains d'entre eux peuvent être interdits à l'avenir. Traditionnellement, certaines de ces fonctionnalités ont été offertes à travers les interfaces universelles d'Apple. La liste n'est pas complète.
* Implicit forward declaration of objects (In an object declaration, one cannot refer to an object not yet declared)
+
* Assign(filename, file). En Pascal Macintosh, le nom du fichier est donné comme un paramètre (facultatif) directement dans Reset(file, filename), Rewrite(file, filename) or Open(file, filename) (Open ouvre pour la lecture et l'écriture).
* In object declarations, the method name cannot be preceeded with the class name (as in Think Pascal)
+
* Opérateurs bit à bit "shr", "shl", "and", "or", "not"  etc.  En Pascal Macintosh, les fonctions BSR, BSL, BAND, BOR, BNOT sont utilisées à la place. (les opérateurs logiques "and", "or", "not" sont bien entendu permis en Pascal Macintosh).
* Arithmetic compiler variable expressions
+
* Assigned(pointer). Une alternative est "pointer <> nil".
* Goto between different nesting levels (e.g., no goto from a nested procedure to a parent procedure)
+
* Append, Blockread, BlockWrite, Erase (efface des fichiers du disque), Filesize, Flush, Rename, SeekEof, SeekEoln, SetTextBuf, Truncate.
* Exit between different nesting levels.
+
* Addr, Compare*, *Seg, Fill*, Freemem, Getmem, High, Low, Move, MoveChar0, Ofs, Ptr (Note :  Dans les Interfaces Universelles d'Apple, Ptr est un type de données décriant un pointeur générique), ReAllocMem, Release.
* Working implementation of UNIV keyword (update, it has been implemented in fpc 2.5.1)
+
* Hi, Lo. Pour les conversions vers les entiers 16 bit, en Macintosh Pascal, vous pouvez utiliser HiWord, LoWord. Remarquez que Hi/Lo marche sur des entiers 64, 32 et 16 bit et retournent 32/16/8 bits selon l'argument.
 +
* Int.
 +
* BinStr, HexStr, OctStr, SetLength, SetString, StringOfChar, Val, Str.
 +
* ChDir, GetDir, MkDir, RmDir, Runerror.
 +
* Paramcount, Paramstr (puisque Mac OS classique n'a pas d'interface en ligne de commande).
 +
* Halt (param). Halt sans paramètre fonctionne en Macintosh Pascal.
 +
* Assert.
 +
* Exclude, Include (pour les ensembles).
 +
* LongJmp, SetJmp (existe dans Metrowerks mais pas dans Think).
 +
* Arithmétique de pointeur. En Pascal Macintosh, vous devez convertir les pointeurs en nombres avant de faire des calculs arithmétiques (ajout d'un décalage entier à une adresse...).
  
===Free Pascal constructs allowed in Mode MacPas===  
+
==Macros exportables==
Free Pascal constructs which currently are allowed in Mode MacPas, but which actually are not in the Macintosh dialect. If conflicts arises, some of them might be disallowed in future. Traditionally some of this functionallity has been offered through Apples Universal Interfaces. The list is not complete.
+
Seule une unité en mode MacPas exportera des macros et seule une unité en mode MacPas les importera. Comme avant, les unités MacPas et non-MacPas peuvent être utilisées les unes par les autres mais les macros ne seront pas visible pour l'emploi.
  
* Assign(filename, file). In macintosh pascal the file name is given as an (optional) parameter directly to Reset(file, filename), Rewrite(file, filename) or Open(file, filename) (Open do open for both reading and writing).
+
Les macros commencent à être exportées juste après la directive {$MODE MACPAS}. Si une telle directive n'est pas donnée, mais que -Mmacpas est donnée en ligne de commamnde, les macros seront exportées juste après le mot-clé UNIT.
* Bitwise operators "shr". "shl", "and", "or", "not"  etc. In macintosh pascal the functions BSR, BSL, BAND, BOR, BNOT is used instead. (Boolean operators "and", "or", "not" is of course allowed in macintosh pascal)
 
* Assigned(pointer). An alternative is "pointer <> nil".
 
* Append, Blockread, BlockWrite, Erase (delete files from disk), Filesize, Flush, Rename, SeekEof, SeekEoln, SetTextBuf, Truncate.
 
* Addr, Compare*, *Seg, Fill*, Freemem, Getmem, High, Low, Move, MoveChar0, Ofs, Ptr (Note: In Apples Universal Interfaces, Ptr is a datatype describing a generic pointer) , ReAllocMem, Release.
 
* Hi, Lo. For convertion to 16 bit integers, in macinstosh pascal you can use HiWord, LoWord. Note that Hi/Lo work on 64, 32 and 16 bit integers and return the upper/lower 32/16/8 bits depending on the argument.
 
* Int
 
* BinStr, HexStr, OctStr, SetLength, SetString, StringOfChar, Val, Str
 
* ChDir, GetDir, MkDir, RmDir, Runerror
 
* Paramcount, Paramstr (since classic Mac OS does not have command line interface)
 
* Halt (param). Halt without parameter works in macintosh pascal.
 
* Assert
 
* Exclude, Include (for sets)
 
* LongJmp, SetJmp (exists in Metrowerks but not Think)
 
* Direct pointer arithmetics. In macintosh pascal, you must cast pointers to numbers before doing arithmetics.
 
  
==Exportable macros==
+
Pour supporter cela, pour une unité, {$MODE MACPAS} est interdit après le mot-clé UNIT. Pour les autres bascules, c'est comme avant.
Only a mode MacPas unit will export macros and only a mode MacPas unit will import them. As before, MacPas and non-MacPas units can be used by each other but macros will then not be visible for use.
 
  
Macros will start to be exported right after the {$MODE MACPAS} directive. If no such directive is given, but -Mmacpas is given on the command line, macros will start to be exported right after the UNIT keyword.
+
Avertissement 1 : Si {$MODE MACPAS} est donné après UNIT, les macros définies entre ce point et UNIT sont exportées, si l'unité est compilée comme partie d'un programme ou autre unité, mais n'est pas exportée si l'unité est compilée depuis la ligne de commande (au niveau le plus haut). Pour rester déterministe, ne pas mettre de macros avant UNIT.
  
To support this, for a unit, {$MODE MACPAS} if forbidden after the UNIT keyword. For other mode switches it is like before.
+
Avertissement 2 : Ecart avec Think Pascal et Metrowerks Pascal : Les macros des unités utilisées n'ont pas d'effet tant que toute la clause Uses (y compris le point-virgule) n'a pas été analysée.
 
 
Caveat 1: If {$MODE MACPAS} is given before UNIT, the macros defined between this point and UNIT is exported, if the unit is compiled as part of a program or other unit, but is not exported if the unit is compiled from the commandline (at top level). To be deterministic, do not put macros before UNIT.
 
 
 
Caveat 2: Deviation from Think Pascal and Metrowerks Pascal: Macros from used units is not in effect until after the whole uses clause (incl semicolon) has been parsed.
 
  
 
==Apple's Universal Interfaces==
 
==Apple's Universal Interfaces==
Starting with FPC 2.04, Apple's Universal interfaces are included with FPC. They are from the same source tree that is available at http://www.microbizz.nl/gpc.html, only a slightly more recent version (r165 as of 2.0.4).
+
A partir de FPC 2.0.4, les interfaces universelles d'Apple sont incluses dans FPC.
 
 
[[Category:FPC]]
 
[[Category:Modes]]
 
[[Category:Mac OS X]]
 
[[Category:Mac OS]]
 
[[Category:Mac OS Classic]]
 

Latest revision as of 04:38, 22 December 2019

English (en) français (fr)

Le mode MacPas essaie d'être compatible avec les dialects Pascal couramment utilisé sur Macintosh, ce sont THINK Pascal, Metrowerks Pascal et MPW Pascal. Pour des tuyaux sur le portage du traditionnel compilateur Mac Pascal vers Free Pascal, voir migration depuis Mac Pascal

Différences comparées au Free PAscal standard

Ici sont listées les différences entre le dialecte Macintosh de Pascal et le dialecte standard de Free Pascal (qui est Turbo Pascal).

Implémentées (en 2.0.2)

  • L'extension de fichier .p est supportée en mode MacPas.
  • L'unité MacPas.pp est automatiquement incluse toutes les fois que le mode MacPas est utilisé. Il devrait contenir ce genre de choses qui est normalement intégrées dans le compilateur mac pascal.
  • $CALLING MWPASCAL dit au compilateur d'utiliser les conventions d'appel prévalant en Pascal Metrowerks. Le seule différence par rapport au défaut est que, en MPASCAL, les paramètres enregistrement CONST sont toujours passés par référence.
  • Le contrôle de type à la compilation des expressions (présentement ce n'est pas spécifique à MacPas).
  • Les variables de compilation peuvent être données en ligne de commande, syntaxe -dMYCOMPVAR:=3 ou -dMYCOMPVAR2:=TRUE (sans espace). Les valeurs héxadécimale ne sont pas supportées, quoique.

Constructions de compilation

  • Les variables de compilation son maintenant différentes des macros. Toutefois, elles sont reliées. Dans la documentation FPC, ce qui est écrit pour les macros est souvent aussi vrai pour les variables. La différence est que la substitution de macro n'est vraiment faite qu'avec des vraies macros (lesquelles sont définies par $DEFINEC). Les variables de compilation sont définies par $SETC.
  • Variables de compilation/macros exportables. Les variables de compilation et les macros définies dans la partie interface d'une unité sont exportées vers les autres unités MACPAS, de la même manière que les constructions ordinaires de Pascal. Voir plus bas sous Macros exportables.
  • Les variables de compilation peuvent être affectées par un nombre hexadécimal, tel que $2345.
  • $SETC <compvar>:= <expr> -- met une variable de compilation à une expression. ":=" aussi bien que "=" sont permis. Si non déjà définie, elle est définie.
  • $DEFINEC <macro> <content> définit une macro dont le texte e substitution est <content>. -- comme sa contrepartie $DEFINE. Les macros paramétrées ne sont pas supportées.
  • $IFC, $ELSEC, $ENDC -- comme leur contrepartie $IF, $ELSE, $END.
  • La directive $ERRORC est similaire à $ERROR.
  • UNDEFINED <compvar> -- dans les expressions de variables de compilation.
  • La fonction OPTION(X) à la compilation, qui renvoie si l'option de compilation est activée. Ne fonctionne que pour les options à une lettre seulement.
  • TRUE, FALSE -- comme valeur dans les expressions de variable de compilation.
  • Les directives de compilation $PUSH et $POP, qui sauve/restaure l'état de toutes les bascules locales du compilateur.
  • L'option de compilation $J rend une variable externe.
  • L'option de compilation $Z rend les variables et les procédures visibles depuis l'extérieur.
  • L'option de compilation $OV (+/-) active le contrôle de dépassement (fpc 2.5.1).
  • $ALIGN MAC68K, POWER, RESET (et aussi POWERPC comme équivalent de POWER dans fpc 2.5.1).
  • La directive de compilation LibExport est reconnue mais ne fait rien pour le moment. Elle pourrait être implémentée dans le futur.
  • Les directives de compilation Metrowerks $UNDEFC et $ELIFC.
  • L'expression de compilation DEFINED <compvar>
  • Support de certaines directives de compilation de Turbo/Delphi, aussi bien $DEFINE $UNDEF $IFDEF $IFNDEF $IF $ELSE $ENDIF $ELSEIF

Langage

  • Object Pascal, style Mac. New, Dispose, Member sont supportés.
  • Une procédure passée comme paramètre peut être déclarée dans la liste de paramètres formel (types procédure anonyme).
  • OTHERWISE dans la construction case (déjà supporté même dans Turbo Pascal).
  • La procédure Leave fait la même chose que Break.
  • La procédure Cycle fait la même chose que Continue.
  • La sortie de procédure Exit(<procname>), qui marche comme Exit, mais prend en paramètre le nom de procédure. <procname> doit être le nom de la procédure, dans lequel Exit est utilisé. l'exit non-local (comme permis dans certaines implémentations de Mac Pascal) n'est pas permis. Exit avec une valeur de retour n'est pas permis. Vous pouvez utiliser "return <exit_value>;" comme dans le Pascal Metrowerks.
  • Les opérateurs | et & (opérateurs booléens, qui sont toujours évalués comme des expressions à court-circuit, applique donc l'évaluation paresseuse).
  • directive pour les déclaration de procédure. Comme pour CDECL.
  • "..." dans la déclaration de procédure, dénotant une fonction de style C avec des arguments variables.
  • IMPLEMENTATION n'est pas requis dans les unités, si vide.
  • Directive External.
  • Les procédures déclarées dans la section interface qui n'ont pas de contrepartie dans la section implementation, sont considérées externes (nous les appelons des externes implicites). Leur nom externe est préfixé par le C_prefix de la cible. Dans Mac OS, c'est une chaîne vide, alors que dans Darwin/macOS, c'est un caractère souligné "_", afin qu'il soit correctement lié avec les bibliothèques macOS (qui sont compilées avec gcc).
  • La fonction Ord peut prendre un pointeur en argument.
  • L'emploi de constantes FourCharCode (p.ex. OSType, ResType) directement comme paramètres. Cela est fait en surchargeant l'opérateur d'affectation dans le fichier MacPas.pp.
  • Ord4
  • Toutes sortes de procédure variable trucs, compatible avec Think Pascal et Metrowerks Pascal.

Implémenté (en 2.1.1)

  • return <value>
  • Les expressions à la compilation sont maintenant évaluées de manière paresseuse.
  • Paquetage au niveau du bit pour les enregistrements et les tableaux.

Implémenté (en 2.5.1)

  • Paramètres de procédure imbriquées (permettant à une procédure imbriquée d'être paramètre d'une autre procédure)
  • Implémentation fonctionnelle du mot-clé UNIV.

Prévues

  • uses se propageant
  • Open (pour les fichiers)
  • HiWrd, LoWrd (depuis que supporté par les deux Think Pascal et Metrowerks)

Non supporté

Voici une liste (incomplète) de construction Mac Pascal qui ne sont pas supportées en mode Mac pour le moment, peut-être certaines d'entre elles le seront à l'avenir :

  • StringOf.
  • HiWord, LoWord (identique à HiWrd, LoWrd).
  • Déclaration avancée implicite des objets (dans une déclaration d'objet, aucun ne peut faire référence à un autre non encore déclaré).
  • Dans les déclarations d'objet, le nom de méthode ne peut pas être précédé par le nom de classe (comme dans Think Pascal).
  • Expressions arithmétiques des variables de compilation.
  • Goto entre différents niveaux imbriqués (p.ex. pas de goto d'une procédure imbriquée dans la procédure englobante).
  • Exit entre différents niveaux d'imbrication.

Construction Free Pascal permises en mode MacPas

Les constructions Free Pascal qui sont actuellement permises ne Mode MacPas, mais qui ne le sont pas dans le dialecte Macintosh. Si des conflits surviennent, certains d'entre eux peuvent être interdits à l'avenir. Traditionnellement, certaines de ces fonctionnalités ont été offertes à travers les interfaces universelles d'Apple. La liste n'est pas complète.

  • Assign(filename, file). En Pascal Macintosh, le nom du fichier est donné comme un paramètre (facultatif) directement dans Reset(file, filename), Rewrite(file, filename) or Open(file, filename) (Open ouvre pour la lecture et l'écriture).
  • Opérateurs bit à bit "shr", "shl", "and", "or", "not" etc. En Pascal Macintosh, les fonctions BSR, BSL, BAND, BOR, BNOT sont utilisées à la place. (les opérateurs logiques "and", "or", "not" sont bien entendu permis en Pascal Macintosh).
  • Assigned(pointer). Une alternative est "pointer <> nil".
  • Append, Blockread, BlockWrite, Erase (efface des fichiers du disque), Filesize, Flush, Rename, SeekEof, SeekEoln, SetTextBuf, Truncate.
  • Addr, Compare*, *Seg, Fill*, Freemem, Getmem, High, Low, Move, MoveChar0, Ofs, Ptr (Note : Dans les Interfaces Universelles d'Apple, Ptr est un type de données décriant un pointeur générique), ReAllocMem, Release.
  • Hi, Lo. Pour les conversions vers les entiers 16 bit, en Macintosh Pascal, vous pouvez utiliser HiWord, LoWord. Remarquez que Hi/Lo marche sur des entiers 64, 32 et 16 bit et retournent 32/16/8 bits selon l'argument.
  • Int.
  • BinStr, HexStr, OctStr, SetLength, SetString, StringOfChar, Val, Str.
  • ChDir, GetDir, MkDir, RmDir, Runerror.
  • Paramcount, Paramstr (puisque Mac OS classique n'a pas d'interface en ligne de commande).
  • Halt (param). Halt sans paramètre fonctionne en Macintosh Pascal.
  • Assert.
  • Exclude, Include (pour les ensembles).
  • LongJmp, SetJmp (existe dans Metrowerks mais pas dans Think).
  • Arithmétique de pointeur. En Pascal Macintosh, vous devez convertir les pointeurs en nombres avant de faire des calculs arithmétiques (ajout d'un décalage entier à une adresse...).

Macros exportables

Seule une unité en mode MacPas exportera des macros et seule une unité en mode MacPas les importera. Comme avant, les unités MacPas et non-MacPas peuvent être utilisées les unes par les autres mais les macros ne seront pas visible pour l'emploi.

Les macros commencent à être exportées juste après la directive {$MODE MACPAS}. Si une telle directive n'est pas donnée, mais que -Mmacpas est donnée en ligne de commamnde, les macros seront exportées juste après le mot-clé UNIT.

Pour supporter cela, pour une unité, {$MODE MACPAS} est interdit après le mot-clé UNIT. Pour les autres bascules, c'est comme avant.

Avertissement 1 : Si {$MODE MACPAS} est donné après UNIT, les macros définies entre ce point et UNIT sont exportées, si l'unité est compilée comme partie d'un programme ou autre unité, mais n'est pas exportée si l'unité est compilée depuis la ligne de commande (au niveau le plus haut). Pour rester déterministe, ne pas mettre de macros avant UNIT.

Avertissement 2 : Ecart avec Think Pascal et Metrowerks Pascal : Les macros des unités utilisées n'ont pas d'effet tant que toute la clause Uses (y compris le point-virgule) n'a pas été analysée.

Apple's Universal Interfaces

A partir de FPC 2.0.4, les interfaces universelles d'Apple sont incluses dans FPC.