Section courante

A propos

Section administrative du site

À propos de MPW Pascal

Le MPW PASCAL est une mise en oeuvre du langage de programmation Pascal faisant partie de Macintosh Programmer's Workshop. Il se compose de plusieurs fichiers disque :

À propos de MPW Pascal version 2.0

Le MPW 2.0 est beaucoup plus rapide et plus facile à utiliser que son prédécesseur. De nombreux nouveaux outils et options aux outils existants ont été ajoutés. Vous pouvez créer rapidement et facilement un programme simple ou un accessoire de bureau en utilisant le menu Build. L'interface de dialogue Commando rend les nombreuses options de commande disponibles dans des boîtes de dialogue, avec un texte d'aide sur chaque option instantanément disponible.

Les quatre listes ci-dessous résument les modifications apportées depuis la sortie de MPW 1.0 et indiquent où vous pouvez trouver plus d'informations sur ces modifications. La première liste décrit les changements immédiatement perceptibles : les menus. La deuxième liste mentionne les modifications et les ajouts au répertoire de commandes du MPW Shell. La troisième liste présente les nouveaux outils et les modifications significatives apportées aux outils existants. La liste finale détaille diverses améliorations.

Nouveaux menus : La première chose que vous remarquerez à propos de MPW 2.0 est que les menus ont subi une révision substantielle depuis la sortie de MPW 1.0 :

Nouvelles commandes Shell : Les nouvelles commandes intégrées sont :

Nouveaux outils : Les outils inclus avec le MPW 1.0 d'origine ont été améliorés de nombreuses manières pour des performances plus rapides et une polyvalence accrue. En plus de ces améliorations, les nouveaux outils suivants ont été développés :

Autres nouveautés :

À propos de MPW Pascal version 3.0

Le MPW 3.0 Pascal est une version de remplacement de MPW Pascal 2.0. Si vous connaissez MPW Pascal 2.0.

En plus de fournir presque toutes les fonctionnalités de Pascal décrites dans la norme ANS Pascal, MPW 3.0 Pascal inclut les nouvelles fonctionnalités suivantes étendant la puissance et la flexibilité de la programmation Pascal :

À propos de la SADE et de MacsBug

Le Symbolic Apple Debugging Environment (SADE) est un débogueur symbolique avec une interface graphique interactive comme celle du MPW Shell. Vous pouvez surveiller l'exécution de votre programme simultanément au niveau du processeur et au niveau de la source symbolique du programme. Cette première version de SADE comprend :

SADE est inclus avec le programme MPW 3.0 mais documenté séparément dans la référence SADE. L'application MacsBug familière a été améliorée pour MPW 3.0 et est également documentée dans un volume séparé, MacsBug Reference.

MacsBug prend entièrement en charge les microprocesseurs MC68000 et MC68020, ainsi que les coprocesseurs MC68881 et MC68851. Il est installé au démarrage, réside dans la RAM de votre ordinateur et fonctionne sur tous les ordinateurs Macintosh, y compris le Macintosh SE et le Macintosh II. Avec MacsBug, vous pouvez examiner la mémoire, tracer un programme ou définir des conditions de pause et exécuter un programme jusqu'à ce que ces conditions se produisent.

Objet Pascal

Le MPW Pascal comprend un ensemble d'extensions, collectivement connues sous le nom d'Object Pascal, vous offrant la possibilité d'écrire des programmes orientés objet.

Les langages orientés objet, tels que Smalltalk-80 et Simula-67, vous permettent de structurer vos programmes de manière à permettre un meilleur contrôle sur la manière dont ils traitent les données. La programmation orientée objet associe données et routines pour produire un code puissant et facile à maintenir. Il vous donne également la possibilité d'écrire des programmes à l'aide de MacApp, l'application Macintosh extensible d'Apple.

MacApp fournit un squelette d'application Macintosh. Il fournit un cadre implémentant de nombreuses fonctionnalités de l'interface Macintosh, auquel vous ajoutez les fonctionnalités uniques de votre propre application.

Si vous débutez dans la programmation orientée objet, vous souhaiterez peut-être lire un livre d'introduction sur le sujet avant d'essayer d'utiliser Object Pascal.

Link, l'outil de liaison décrit dans la référence Macintosh Programmer's Workshop, contient à partir de la version MPW 3.0 le code d'optimisation pour Object Pascal. Il est disponible en tant qu'option -opt et élimine tout besoin de l'outil Optimize distribué avec MacApp.

À propos des fichiers de l'interface Pascal

Les fichiers d'interface MPW 3.0 Pascal contiennent des déclarations pour les routines des bibliothèques MPW 3.0 Pascal et MPW 3.0, ainsi que les routines de la boîte à outils de l'interface utilisateur et du système d'exploitation intégrées à la ROM Macintosh. Les routines ROM Macintosh sont décrites en détail dans Inside Macintosh, volumes 1 à 5. Les interfaces de ces routines sont divisées en fichiers en fonction de leur «Manager», comme décrit dans Inside Macintosh.

Voici une liste des modifications apportées aux fichiers de l'interface Pascal depuis MPW Pascal 2.0 :

Voici la liste des nouveaux fichiers d'interface dans MPW Pascal :

Fichier d'interface Contexte
Controls.p Cette interface permet de gérer les contrôles du Macintosh.
Desk.p Cette interface permet de gérer le bureau.
DeskBus.p Cette interface permet la gestion du bus du bureau d'Apple.
Devices.p Cette interface permet la gestion des périphériques.
Dialoqs.p Cette interface permet la gestion des boites de dialogues.
DisAsmLookup.p Cette interface contient un désassembleur de symboles SADE et MacsBug pour la séquence d'octets des instructions des microprocesseurs MC68xxx, MC68881 et MC68851.
Diskinit.p Cette interface permet d'initialiser une unité de disque.
Disks.p Cette interface contient le pilote de disque.
Errors.p Cette interface contient les constantes des erreurs.
Events.p Cette interface permet la gestion des événements.
Files.p Cette interface permet la gestion des fichiers.
Fonts.p Cette interface permet la gestion de police de caractères.
HyperXCmd.p Cette interface contient les définitions des fichiers HyperCard XCMD et XFCN.
Lists.p Cette interface permet la gestion de liste de données.
Memory.p Cette interface contient le gestionnaire de mémoire.
Menus.p Cette interface permet de gérer les menus.
Notification.p Cette interface permet d'effectuer la gestion des avertissements.
OSEvents.p Cette interface permet la gestion des événements du système d'exploitation.
OSUtils.p Cette interface contient les fonctions utilitaires du système d'exploitation.
Packaqes.p Cette interface contient le gestionnaire des modules.
Palettes.p Cette interface permet la gestion de palettes.
Picker.p Cette interface permet d'effectuer des transformation de couleurs.
Printinq.p Cette interface contient le gestionnaire d'impression.
Resources.p Cette interface permet la gestion des ressources.
Retrace.p Cette interface contient le retraçage vertical.
Scrap.p Cette interface contient le gestionnaire de déchet.
SCSI.p Cette interface permet la gestion de l'interface SCSI.
SeqLoad.p Cette interface permet la gestion du chargement des segments des programmes.
Serial.p Cette interface permet la gestion de l'interface du port série.
Shutdown.p Cette interface permet de fermer ou de redémarrer l'ordinateur.
Slots.p Cette interface permet la gestion des fentes de carte de périphérique.
Start.p Cette interface contient le gestionnaire de démarrage.
Strinqs.p Cette interface permet la gestion des chaînes de caractères de Pascal à C et vice versa.
TextEdit.p Cette interface permet la gestion d'un éditeur de texte.
Timer.p Cette interface permet la gestion d'une minuterie.
ToolUtils.p Cette interface contient les utilitaires d'outils.
Types.p Cette interface contient les définitions de types de données.
Video.p Cette interface permet la gestion de la vidéo.
Windows.p Cette interface permet la gestion des fenêtres.

Voici la liste des anciennes interfaces Pascal ainsi que les nouvelles interfaces à utiliser directement :

Fichier d'interface Utilise un sous-ensemble de
MacPrint.p Printing.p
MemTypes.p Types.p
OSintf.p OSUtils.p, Events.p, Files.p, Devices.p, DeskBus.p, Diskinit.p, Disks.p, Errors.p, Memory.p, OSEvents.p, Retrace.p, Segload.p, Serial.p, Shutdown.p, Slots.p, Sound.p, Start.p, Timer.p
Packintf.p Packages.p
Pickerintf.p Picker.p
SCSIIntf.p SCSI.p
Toolintf.p ToolUtils.p, Events.p, Controls.p, Desk.p, Windows.p, TextEdit.p, Dialogs.p, Fonts.p, Lists.p, Menus.p, Resources.p, Scrap.p
Videointf.p Video.p

Utilisation des fichiers d'interface

Les fichiers d'interface des bibliothèques Pascal et MPW ainsi que les ROM Macintosh se trouvent dans le répertoire {Pinterfaces}. Vous pouvez déterminer les fichiers d'interface à utiliser pour une routine ou un type de données spécifique en recherchant à quelle bibliothèque ou gestionnaire Macintosh appartient la routine ou le type de données. Vous pouvez également trouver le nom de la bibliothèque ou du gestionnaire en recherchant dans le répertoire {Pinterfaces} le nom de la routine ou du type à l'aide de la commande MPW Search, décrite dans la référence Macintosh Programmer's Workshop 3.0 Interface.

Le compilateur recherche dans plusieurs répertoires les fichiers d'interface ; jusqu'à ce que le fichier spécifié soit trouvé. Il recherche le répertoire contenant le fichier d'entrée actuel, les répertoires spécifiés à l'aide de l'option -i du compilateur et les répertoires spécifiés dans la variable Shell {Pinterfaces}.

Vous spécifiez les unités nécessaires à vos programmes en utilisant l'instruction uses :

uses unitname, unitname, ... ;

Le compilateur suppose qu'une unité 'unitname' sera trouvée dans le fichier 'unitname.p'. C'est le fichier qu'il recherche ensuite. Pour remplacer cette supposition, utilisez la directive {$U}.

La forme du chemin d'accès détermine également où le compilateur recherche le fichier d'interface. Si un chemin d'accès complet est spécifié, le compilateur utilise exactement ce nom et n'effectue aucune recherche. Un chemin d'accès complet contient au moins deux points (:) mais ne commence pas par deux points. Si un chemin d'accès partiel est spécifié, le compilateur recherche le fichier dans plusieurs répertoires. Les chemins d'accès partiels commencent par deux points ou ne contiennent aucun deux-points.

Les fichiers d'interface peuvent être imbriqués jusqu'à cinq niveaux de profondeur.

Règles de recherche de fichiers d'interface :

Chemin complet Description
uses filename Utilise le nom comme spécifié
Chemin partiel Description
uses filename Recherchez dans les répertoires suivants, dans cet ordre :
1. Le répertoire du fichier source contenant l'instruction use
2. Répertoires spécifiés par l'option -i du compilateur, dans l'ordre spécifié
3. Répertoires spécifiés par la variable Shell {Pinterfaces}

À propos des bibliothèques Pascal

Les fichiers MPW Pascal incluent plusieurs bibliothèques contenant le code objet exécutable pour la plupart des procédures et fonctions Pascal prédéfinies ainsi que le code des routines plus spécialisées. De plus, les bibliothèques incluent le code nécessaire pour accéder aux routines ROM du Macintosh. Une description complète des routines ROM Macintosh est incluse dans Inside Macintosh.

Certaines bibliothèques sont partagées par Pascal et un ou plusieurs autres langages; ils se trouvent dans le répertoire identifié par la variable MPW 3.0 Shell {Libraries}. Trois bibliothèques (PasLib.o, SANELib.o et SANELib881.o) sont spécifiques à Pascal ; ils se trouvent dans le répertoire {PLibraries}.

Chaque programme MPW 3.0 Pascal doit être lié aux bibliothèques Runtime.o, Interface.o et PasLib.o. D'autres sont nécessaires pour différentes opérations du programme, comme résumé ci-dessous.

MPW Pascal comprend les bibliothèques suivantes :

Le tableau suivant répertorie les fichiers objets de bibliothèque utilisés avec MPW Pascal. Les huit premiers fichiers, fournis avec Macintosh Programmer's Workshop, sont partagés avec d'autres langages et apparaissent dans le répertoire (Bibliothèques}. Les fichiers restants, fournis avec MPW Pascal, sont utilisés uniquement avec Pascal et apparaissent dans le répertoire {PLlbraries} :

Bibliothèques pouvant être utilisées avec MPW Pascal Utilisé
Interface.o Dans les bibliothèques Macintosh (Inside Macintosh) partagées avec d'autres langages.
ToolLibs.o Contient le code des routines de contrôle et de gestion du curseur décrites dans la référence Macintosh Programmer's Workshop. Si vous utilisez l'une de ces procédures dans votre programme, vous devez inclure le fichier d'interface approprié dans votre compilation et le lier à cette bibliothèque.
DRVRRuntime.o Prise en charge de l'exécution des accessoires de bureau et d'autres pilotes. Si votre programme est un accessoire de bureau, vous devez le lier à cette bibliothèque.
ObjLib.o Fonctionnalités mettant en oeuvre la programmation orientée objet sans MacApp. Si vous utilisez l'une de ces techniques sans utiliser MacApp, utilisez le fichier d'interface objIntf.p dans votre compilation et liez-le à cette bibliothèque.
PerformLib.o Routines de mesure des performances.
Stubs.o Stubs utilisés par Linker pour remplacer les routines de bibliothèque inutilisées pour les outils.
Runtime.o Routines d'initialisation des données.
HyperXLib.o Routines HyperCard 'XCMD'
PasLib.o Bibliothèque Pascal standard contenant toutes les routines d'entrée/sortie Pascal standard et les routines d'initialisation de mémoire de tas.
SANELib.o Bibliothèque SANE de procédures et de fonctions fournissant une arithmétique à virgule flottante précise et de précision étendue.
SANELib881.o Bibliothèque SANE fonctionnellement équivalente à la bibliothèque SANELib.o sauf que cette version doit être utilisée lorsque vous avez appelé l'option du compilateur -MC68881.

À propos des exemples Pascal

Les fichiers Pascal se composent de huit exemples de programmes Pascal inclus avec MPW Pascal : une application, un outil, un accessoire de bureau et un programme démontrant l'utilisation d'outils de performances. De plus, le makefile contenant les commandes nécessaires à la construction de chacun des exemples est fourni dans les mêmes dossiers. Ces fichiers se trouvent dans {PExamples}. Le tableau suivant répertorie ces fichiers :

Fichier source Dossier PExamples
Makefile Makefile pour créer des exemples de programmes
Instructions Instructions pour créer des exemples de programmes.
Sample.p Exemple d'application Pascal. Il s'agit d'un exemple d'application simple prenant en charge MultiFinder.
TESample Application TextEdit simple compatible MultiFinder.
SillyBalls.p Exemple d'application QuickDraw couleur simple.
TubeTest.p QuickDraw et gestionnaire de palettes de couleurs simples.
ResEqual.p Exemple d'application : un outil MPW.
Memory.p Exemple d'accessoire de bureau. L'accessoire Memory Desk affiche l'espace libre actuel dans les segments d'application et système, l'espace libre sur le volume par défaut et le nom du volume par défaut. Ces informations sont mises à jour toutes les 5 secondes. Lorsque Memory est ouvert pour la première fois, il appelle _MaxMem pour purger la mémoire, affichant ainsi les limites supérieures de l'espace libre dans la mémoire de tas.
EditCdev.p Exemple de périphérique du panneau de configuration avec un élément TextEdit.
TestPerf.p Un exemple de programme utilisant les outils de performance Pascal.

Le fichier «Instructions» contient des instructions étape par étape pour créer chacun des exemples de programmes. Après avoir installé MPW et MPW Pascal, comme décrit dans la référence Macintosh Programmer's Workshop 3.0, ouvrez ce fichier et suivez les instructions.

Installation de MPW Pascal

Les instructions d'installation de MPW Pascal sur un disque dur de système de fichiers hiérarchique (HFS) 20 ou 20SC apparaissent dans la référence Macintosh Programmer's Workshop 3.0. Après avoir installé MPW en suivant ces instructions, exécutez le script d'installation MPW et insérez le disque MPW Pascal.

Alternativement, vous pouvez installer Pascal en procédant comme suit :

Remarque : Vous pouvez placer le compilateur, les exemples et les bibliothèques dans différents répertoires, à condition de modifier les valeurs par défaut de diverses variables Shell définies dans le fichier de démarrage. Vous pouvez modifier le fichier Startup lui-même ou, de préférence, modifier le fichier UserStartup. Les variables suivantes déterminent les emplacements des fichiers fournis avec MPW Pascal.

Variable Description
{Commands} Une liste de répertoires séparés par des virgules contenant des outils et des applications. Le répertoire contenant le compilateur Pascal doit apparaître dans cette liste.
{PInterfaces} Liste de répertoires séparés par des virgules dans lesquels rechercher les fichiers PInterface. Cela devrait inclure le répertoire PInterfaces.
{PLibraries} Le répertoire contenant les fichiers PLibrary. Il doit s'agir du chemin d'accès au répertoire PLibraries.

Contrôle de segmentation

Un segment est une partie de code pouvant être chargée séparément en mémoire. Votre programme peut être écrit sans segmentation explicite ou il peut contenir un certain nombre de segments différents.

Chaque ressource 'CODE' dans la branche de ressources de l'application correspond à un segment contenant une ou plusieurs routines. (La ressource 'CODE' avec l'ID 0 contient la table de sauts ; les autres ressources 'CODE' contiennent des routines :) Au moment de l'exécution, un segment est automatiquement chargé par le chargeur de segment lorsque vous appelez l'une des routines contenues dans le segment. Le segment n'est pas déchargé jusqu'à ce que l'application le décharge explicitement en appelant UnloadSeq.

Vous pouvez spécifier quelles routines sont placées dans quels segments de deux manières. Cette section explique comment utiliser la directive $S pour spécifier la segmentation. La référence Macintosh Programmer's Workshop explique comment utiliser la commande Link pour modifier la segmentation d'un programme.

La segmentation vous aide à réduire les besoins en mémoire d'exécution de votre programme. Un schéma de segmentation typique divise un programme en un segment d'initialisation et un segment de traitement principal. Vous pouvez également placer des routines rarement exécutées (des routines d'impression, par exemple) dans un segment séparé n'étant pas chargé lorsque le programme commence à s'exécuter. Cela permet au programme d'être chargé plus rapidement car les routines d'impression ne sont chargées que lorsqu'elles sont nécessaires. Si vous ne spécifiez pas de segmentation, le compilateur place l'intégralité du programme dans un segment appelé Main.

La directive S$ vous permet également de spécifier plusieurs segments dans un seul fichier source. Pour affecter du code source à un segment, faites précéder le code d'une directive du compilateur de le format :

{$S segment-name}

Le code suivant cette directive est placé dans le segment nommé jusqu'à ce que le compilateur lise un autre $S ou la fin du fichier source.

Note : Dans une directive $S, les noms de segments sont sensibles à la casse. Les espaces de début ne sont pas significatifs et tous les caractères sont inclus, jusqu'à la fin du caractère de commentaire.

Le code d'un segment donné ne doit pas nécessairement être contigu au sein du fichier source. Le programme peut prendre le format suivante :

{$S SegA}
function
{$S SegB}
function
{$S SegA}

et ainsi de suite. Le code suivant une directive $S est placé dans le segment nommé jusqu'à ce que la prochaine directive $S soit rencontrée ou que le compilateur lise la fin du fichier source.

Le compilateur marque chaque routine avec le nom de son segment. Ensuite, Linker collecte toutes les fonctions et procédures d'un segment à partir de divers fichiers d'entrée et les place dans un seul segment de code dans le fichier de sortie.

Créer des ressources

Les ressources non codées, telles que les ressources spécifiant des menus, des fenêtres et des boîtes de dialogue, peuvent être créées à l'aide de l'éditeur de ressources (ResEdit) et du compilateur de ressources (Rez). Ces outils sont décrits dans la référence Macintosh Programmer's Workshop et la référence ResEdit.

Création d'une application dans MPW Pascal

Une application est un programme pouvant être exécuté sous Macintosh Finder ou MultiFinder. Les applications peuvent également être exécutées à partir du MPW Shell : l'exécution du MPW Shell est suspendue et l'application prend le contrôle de la mémoire et de l'affichage de l'ordinateur pendant son exécution.

Le code d'une application est contenu dans les ressources 'CODE' dans la branche de ressources de son fichier. Des ressources supplémentaires dans le même fichier décrivent les menus, fenêtres, boîtes de dialogue, chaînes et autres ressources utilisées par l'application.

Cette section décrit les étapes de création d'une application dans MPW Pascal. Le fichier Instructions dans le dossier PExamples décrit certains des outils pouvant être utilisés pour automatiser le processus. Le fichier MakeFile dans le dossier PExamples illustre l'utilisation de certains outils. La référence Macintosh Programmer's Workshop décrit ces outils en détail.

Construire une application

Le moyen le plus simple de créer un programme dans MPW consiste à utiliser le menu Build. Nous allons construire Sample, une application à partir du dossier Examples. Les fichiers source pour Sample sont Sample.p et Sample.r. À l'aide du menu Directory, définissez le répertoire actuel sur HD:MPW:Examples:PExamples.

Sélectionnez Build dans le menu Build et tapez le nom de programme sample.

Vous verrez quelque chose comme ceci à l'écran :

t 3:58:13 PM ----- Build of Sample
t 3:58:13 PM ----- Analyzing dependencies.
t 3:58:14 PM ----- Executing build commands
t 3:58:40 PM ----- Done
   sample

La commande Build compile et lie l'application.

Appuyez sur Enter pour lancer l'exemple d'application. Vous pouvez couper, coller, copier et déplacer le curseur. Quitter (Command+Q) vous ramène au MPW Shell.

Compilation d'une application

Pour compiler un programme Pascal, démarrez d'abord l'application MPW Shell, puis entrez la commande Pascal dans n'importe quelle fenêtre. En règle générale, la commande spécifie les options et le nom du fichier source au compilateur, bien que ni l'un ni l'autre ne soient obligatoires. Par exemple, la commande :

Pascal -p Sample.p

compile le fichier source Sample.p, produisant le fichier objet Sample.p.o. L'option -p spécifie que les informations de progression doivent être écrites dans la sortie de diagnostic. Ces informations apparaissent à l'écran après la commande.

Vous pouvez trouver une spécification complète de la commande Pascal, y compris les spécifications d'entrée, de sortie et de diagnostic, les valeurs d'état et les options, dans la référence Macintosh Programmer's Workshop.

Liaison d'une application

L'éditeur de liens est utilisé pour combiner des fichiers objets de plusieurs compilations distinctes, ainsi que tous les fichiers objets de bibliothèque nécessaires, afin de produire les ressources de code exécutables pour un programme. L'éditeur de liens crée un nouveau fichier de ressources, contenant uniquement les ressources de code de votre programme, ou remplace les ressources de code dans un fichier de ressources existant, laissant intactes les autres ressources, telles que les menus et les boîtes de dialogue. Cela vous permet d'exécuter le compilateur de ressources avant ou après l'exécution de l'éditeur de liens. La référence Macintosh Programmer's Workshop décrit l'éditeur de liens en détail.

Une application écrite partiellement ou totalement en Pascal pour être utilisée sur n'importe quel Macintosh doit être liée aux bibliothèques répertoriées dans le tableau suivant. Voici le code de lien à utiliser sur n'importe quel Macintosh avec ces bibliothèques :

Dans les interfaces Macintosh Prise en charge du temps d'exécution Bibliothèques Pascal
(Libraries}Interface.o {Libraries}Runtime.o
{PLibraries}SANELib.o
{PLibraries}PasLib.o

Code compilé pour utiliser le MC68881 sur Macintosh II :

Dans les interfaces Macintosh Prise en charge du temps d'exécution Bibliothèques Pascal
{Libraries}Interface.o {Libraries)Runtime.o {PLibraries}PasLib.o
{PLibraries}SANELib881.o

Il est sage de relier les nouveaux programmes à toutes les bibliothèques pouvant être appropriées. Si vous spécifiez des fichiers inutiles dans la commande Link, l'éditeur de liens affiche un message répertoriant les fichiers pouvant être supprimés de vos instructions de construction.

Si vous utilisez l'option du compilateur -MC 68881, vous devez placer le fichier {PLibraries)SANELib881.o en premier dans votre liste de liens. Ce fichier contient certaines définitions remplaçant les versions 80 bits d'autres bibliothèques. L'éditeur de liens utilise la première définition qu'il atteint, puis affiche des messages d'avertissement lorsqu'il rencontre des définitions en double. Vous pouvez utiliser l'option de liaison -d pour supprimer les avertissements concernant les définitions en double.

Les programmes écrits en partie en Pascal et en partie en langage assembleur ou C doivent être liés au fichier CRuntime.o et non au fichier Runtime.o. L'éditeur de liens détectera plusieurs points d'entrée en double lors de la liaison avec les bibliothèques Pascal et C. Tous ces doublons sauf un peuvent être ignorés en toute sécurité : les copies des routines sont identiques.

L'exception est le point de départ de l'exécution. Si l'exécution doit commencer par la fonction C main(), aucune précaution particulière n'est nécessaire. Cependant, si votre programme principal est écrit en langage de programmation assembleur ou en Pascal mais que des parties de votre programme sont écrites en C (et doivent donc être liées au fichier CRuntime.o), le fichier objet contenant votre programme principal doit apparaître avant CRuntime.o dans le fichier liste des fichiers objets transmis à l'éditeur de liens.

Création d'un outil dans MPW Pascal

Un outil est un programme fonctionnant dans l'environnement MPW Shell. Le compilateur Pascal, Rez et Link sont tous des outils. Vous pouvez écrire vos propres outils en Pascal, C ou en langage assembleur. Lee Macintosh Programmer's Workshop Reference décrit les outils et la manière dont ils sont créés. Cette section contient des informations spécifiques sur les outils d'écriture en Pascal.

Vous exécutez un outil en entrant une commande MPW. Les paramètres spécifiés dans la ligne de commande sont transmis en tant que paramètres au programme principal. Les variables Shell exportées sont également transmises en tant que paramètre au programme principal ; ils sont accessibles directement ou en utilisant la fonction getenv() de la bibliothèque Pascal. Pour accéder à ces paramètres, utilisez les interfaces comme suit :

  1. USES
  2.  CursorCtl,
  3.  IntEnv,
  4.  PasLibintf;

Les outils ont un accès direct aux fenêtres et sélections MPW Shell. Les variables FILE stdin, stdout et stderr font respectivement référence à l'entrée standard, à la sortie standard et à la sortie de diagnostic de MPW. Par défaut, les fonctions d'entrée/sortie de la bibliothèque Pascal lisent l'entrée standard (texte saisi à partir du Shell) et écrivent sur la sortie Pascal standard. Tous les fichiers ouverts par des outils, à l'aide des fonctions de la bibliothèque Pascal ou des fonctions de la bibliothèque Inside Macintosh, sont lus et écrits dans les fenêtres si le fichier spécifié est ouvert dans une fenêtre. Le contenu de la fenêtre est lu ou écrit à la place de la branche de données du fichier. Les sélections dans les fenêtres peuvent également être lues et écrites comme s'il s'agissait de fichiers, en ajoutant le suffixe .$ au nom du fichier (par exemple, HD:MPW:Worksheet.$).

Construire un outil

Le moyen le plus simple de créer un programme dans MPW consiste à utiliser le menu Build. Nous allons créer ResEqual, un exemple d'outil MPW comparant les ressources de deux fichiers. Les fichiers sources de ResEqual sont ResEqual.p et ResEqual.r ; puisqu'un makefile existe déjà, vous n'avez pas besoin d'en créer un. À l'aide du menu Répertoire, définissez le répertoire actuel sur HD:MPW:Examples:PExamples. Sélectionnez maintenant Build dans le menu Build et tapez le nom du programme ResEqual.

Vous verrez quelque chose comme ceci à l'écran :

# 10:58:07 PM ----- Build of ResEqual.
# 10:58:08 PM ----- Analyzing dependencies.
# 10:58:10 PM ----- Executing build commands
  Rez :Examples:PExamples:ResEqual.r -append -o ResEqual
  Pascal :Examples:PExamples:ResEqual.p
  Link -w -t MPST -c 'MPS ' "Oya: .MPW: Libraries: "Runtime.o
"Oya:.MPW:Libraries:"Interface.o "Oya:.MPW: PLibraries: "PasLib.o
"Oya:.MPW:PLibraries:"SANELib.o "Oya:.MPW:Libraries:"ToolLibs.o
:Examples:PExamples:ResEqual.p.o -o ResEqual
# 10:58:35 PM ----- Done.
  Res Equal

Appuyez maintenant sur Enter.

Compilation d'un outil

Vous compilez un outil exactement de la même manière que vous compilez une application. Les informations précédentes concernant les règles de recherche de fichiers inclus, la segmentation et les ressources s'appliquent également aux outils et applications.

Lier un outil

Le MPW Shell reconnaît un outil par son type et son créateur. Spécifiez les options suivantes lors de la liaison d'un outil :

Link -t MPST -c "MPS " ...

Cette commande spécifie le type de fichier et le créateur d'un outil MPW. Suivez les mêmes règles de liaison de bibliothèques pour les outils que pour les applications. De plus, si votre outil appelle l'une des routines de curseur rotatif ou de gestionnaire d'erreurs, créez un lien avec les bibliothèques suivantes :

{Libraries}Stubs.o
{Libraries}ToolLibs.o

Le fichier stubs.o contient une collection de «stubs», ou routines factices, pour plusieurs fonctions définies dans la bibliothèque d'exécution mais n'étant pas nécessaires pour les outils MPW exécutés sous MPW Shell. Vous pouvez utiliser ces talons pour réduire la taille d'un outil. Stubs.o doit être lié avant toute autre bibliothèque.

Création d'un accessoire de bureau dans MPW Pascal

Un accessoire de bureau est un programme que vous exécutez en le sélectionnant dans le menu Apple. Il partage son environnement d'exécution avec l'application en cours d'exécution. Cette section contient des informations spécifiques aux accessoires de bureau dans MPW Pascal.

Restrictions relatives aux accessoires de bureau

Un accessoire de bureau ne possède ni table de saut ni zone de données globale.

La bibliothèque DRVRRuntime

Les accessoires de bureau ont traditionnellement été écrits en langage assembleur, en partie à cause du format de ressource particulier utilisé par le système pour les accessoires de bureau. La ressource est 'DRVR'. La configuration de l'entête de présentation est 'DRVR', la transmission des paramètres de procédure basés sur les registres et la gestion des conventions de sortie non standard des routines de pilote ont rendu assez difficile dans le passé pour les programmeurs non familiers avec le langage assembleur d'implémenter des accessoires de bureau dans des langages de haut-niveau.

Pour surmonter ces difficultés et simplifier la tâche d'écriture d'un accessoire de bureau en Pascal, MPW fournit la bibliothèque DRVRRuntime.o et le type de ressource 'DRVW' déclaré dans MPWfypes.r. Ensemble, ils composent l'entête de disposition du pilote et les cinq points d'entrée configurant les fonctions d'ouverture, d'amorçage, d'état, de contrôle et de fermeture d'un pilote. Pour un exemple de définition d'accessoire de bureau, consultez le fichier Memory.r dans le dossier PExamples.

Utiliser la bibliothèque DRVRRuntime.o pour créer des accessoires de bureau offre de nombreux avantages :

La bibliothèque DRVRRuntime se compose d'un point d'entrée principal remplaçant le point d'entrée initial du runtime Pascal. Le point d'entrée DRVRRuntime contient la «colle» du pilote configurant le paramètre pour vous, appelle votre routine et exécute le code de sortie spécial requis par un accessoire de bureau pour rendre le contrôle au système. Vos routines effectuent les actions de l'accessoire de bureau, comme ouvrir une fenêtre ou répondre aux clics de souris.

Routines d'accessoires de bureau

Les accessoires de bureau utilisant la bibliothèque DRVRRuntime doivent contenir les cinq fonctions DRVROpen, DRVRPrime, DRVRStatus, DRVRControl et DRVRClose. Toutes ces fonctions ont les mêmes types de paramètres et de résultats. Elles sont déclarées comme fonctions compatibles Pascal afin que la bibliothèque DRVRRuntime puisse être utilisée pour les accessoires de bureau en Pascal, C et en langage assembleur. Chacune de ces cinq routines doit être déclarée comme suit :

  1. FUNCTION DRVROpen(ctlPB:ParmBlkPtr;dCtl:DCtlPtr):OSErr;
  2. BEGIN 
  3.  { votre code }
  4.  DRVROpen:=resultCode;
  5. END;

Les types ParmBlkPtr et DCtlPtr sont définis dans le fichier Files.p. Le type OSErr est défini dans MemTypes.p.

Construire un accessoire de bureau

Le moyen le plus simple de créer un programme dans MPW consiste à utiliser le menu Build. Nous allons créer Memory, un exemple d'accessoire de bureau affichant la mémoire disponible dans la mémoire de tas d'application et du système, ainsi que sur le disque de démarrage.

Les fichiers sources de Memory sont Memory.c et Memory.r ; puisqu'un makefile existe déjà, vous n'avez pas besoin d'en créer un. À l'aide du menu Directory, définissez le répertoire actuel sur HD:MPW:Examples:PExamples.

À l'aide du menu Directory, définissez le répertoire sur HD:MPW:Examples:PExamples. Sélectionnez maintenant Build dans le menu Build et tapez le nom du programme Memory. Vous verrez quelque chose comme ceci à l'écran :

# 4:12:40 PM ----- Build of Memory.
# 4:12:41 PM ----- Analyzinq dependencies.
# 4:12:43 PM ----- Executinq build commands.
  pascal Memory.c
Link -w -rt DRVW=0 -sq Memory "Oya:MPW:Libraries"DRVRRuntime.o
Memory.p.o
"Oya:MPW:Libraries"Interface.o "Oya:MPW:PLibraries"Paslib.o -o
Memory.DRVW -c "????" -t "????"
Rez -rd -c DMOV -t DFIL Memory.r -o Memory
# 4:13:06 PM ----- Done.
  'Font/DA Mover' 'Oya:System Folder:System' Memory # Install DA

Appuyez sur Enter pour lancer Font/DA Mover. (Si vous disposez de deux mégaoctets ou moins de RAM, vous ne pourrez peut-être pas le faire sous MultiFinder ; redémarrez en maintenant la touche Command enfoncée, puis réessayez.) Installez la mémoire DA dans votre fichier système. Il vous donne la taille actuelle de la mémoire de tas système et de la mémoire de tas d'application.

Associer un accessoire de bureau

Un accessoire de bureau écrit en Pascal doit être lié à la fois à DRVRRuntime.o et à Runtime.o. DRVRRuntime.o doit précéder Runtime.o dans la liste des fichiers objets passés au Linker, par exemple :

LINK (Libraries}DRVRRuntime.o (Libraries}Runtime.o

Création de code pour différents modèles de Macintosh

À partir de la version 3.0 de MPW Pascal, vous pouvez créer des applications s'exécutant sur tous les modèles de Macintosh. Cette section décrit les compatibilités entre les machines et les stratégies d'écriture et de compilation de code s'exécutant sur différents modèles et de taille en mégaoctets de RAM nécessaires.

Code source

Vous pouvez écrire votre code source pour qu'il soit compatible avec un ou plusieurs modèles de Macintosh. Vous disposez de quatre options principales :

Fichiers d'interface

Un ensemble de fichiers d'interface fournis avec MPW Pascal vous donne accès depuis Pascal à la boîte à outils Macintosh et aux routines du système d'exploitation Macintosh intégrées aux ROM Macintosh. Le volume 5 d'Inside Macintosh décrit le code ROM étant nouveau avec le Macintosh II et le Macintosh SE. Le volume 4 d'Inside Macintosh décrit le code du Macintosh Plus.

Une grande partie du nouveau matériel n'est utilisable que sur un Macintosh II, car il utilise des options matérielles n'étant pas disponibles sur d'autres modèles. Vous pouvez inclure toutes les définitions de fichiers d'interface dans le code pour les utiliser sur n'importe quel modèle, mais vous ne pouvez pas appeler de routines ROM n'étant pas présentes sur la machine exécutant le code compilé.

Options du compilateur

Avec l'ajout du Macintosh II à la gamme de produits, il existe désormais des différences de compilateur entre les modèles ainsi que des différences de code ROM. Ces différences entre les compilateurs sont décrites dans les sections suivantes.

SANE et Macintosh II

Le MPW Pascal inclut des fonctionnalités numériques conformes à la norme 754 de l'Institute of Electrical and Electronics Engineers (IEEE) pour l'arithmétique à virgule flottante. Cette norme est l'ensemble des lignes directrices définies par l'IEEE pour la conception et la mise en ouvre de systèmes effectuant de l'arithmétique à virgule flottante.

L'environnement numérique Standard Apple Numeric Environment (SANE) est la mise en oeuvre par Apple de ces directives. Le MPW Pascal utilise SANE pour fournir un environnement puissant et flexible pour les calculs numériques.

La norme IEEE recommande la mise en oeuvre de deux types de données supplémentaires pour la programmation numérique, en plus du type réel spécifié dans la norme ANSI. Le MPW Pascal inclut ces deux types supplémentaires.

Le SANE comprend une bibliothèque (SANELib) de procédures et de fonctions numériques utiles.

Améliorations de la virgule flottante

Les applications utilisant les paquets SANE (Pack4 et Packs) s'exécutent plus rapidement sur Macintosh II grâce au coprocesseur à virgule flottante 68881. La méthode par défaut du compilateur est d'appeler ces paquets pour toutes les opérations à virgule flottante. Pour une arithmétique la plus rapide possible sur les machines équipées d'un 68881, le compilateur dispose d'une option forçant les appels directs au 68881. Lorsque l'option est utilisée, le code résultant ne s'exécutera pas sur les Macintosh sans un 68020 et un 68881.

L'interface SANE a été étendue pour prendre en charge le 68881 : une nouvelle constante pour définir l'environnement par défaut pour fonctionner à la fois dans les mondes 68000 et 68881, deux nouvelles fonctions pour le transfert entre les formats étendus et deux nouvelles fonctions pour accéder mécanisme de piège du 68881. Le code de ces nouvelles fonctionnalités est inclus dans une nouvelle bibliothèque SANELlb881.o.

L'appel SetEnvironment(0) ne fonctionnera pas avec l'option -MC68881. Remplacez-le par SetEnvironment(IEEEDefaultEnv), fonctionnant avec ou sans l'option -MC68881.

Améliorations du MC68881

Le Motorola 68881 effectue très rapidement des opérations arithmétiques de base et un grand nombre de fonctions transcendantales. Habituellement, le compilateur MPW Pascal génère des appels aux paquets SANE (Pack4 et Packs) pour les opérations en virgule flottante ; si un 68881 est présent, les paquets SANE utilisant donc les paquets à virgule flottante sont automatiquement plus rapides. Pour mieux tirer parti du 68881, le compilateur Pascal a été modifié pour fournir des appels directs optionnels au coprocesseur.

Pour accéder directement au 68881 pour une plus grande vitesse dans les appels arithmétiques de base, tapez -MC68881 sur la ligne de commande ou utilisez la directive de compilateur $MC68881+ équivalente et établissez un lien avec SANELib881.o au lieu de SANELib.o. Avec l'option -MC68881, le type étendu fait 12 octets et les variables du type étendu peuvent être allouées aux registres.

L'option -MC68881 entraînera l'utilisation de fonctions transcendantales dont la précision est identique à celle des paquets SANE. Pour les fonctions transcendantales plus rapides mais moins précises fournies sur le 68881, tapez -d Elems881=true sur la ligne de commande.

Important : L'utilisation de l'option -MC68881 peut générer des instructions incompatibles avec le 68000. Votre programme pourrait ne pas fonctionner sur un Macintosh sans le 68881.

Améliorations du MC68020

Le MPW Pascal prend en charge l'unité centrale de traitement Motorola 68020 avec l'option de compilateur -MC68020 ou la directive de compilateur équivalente $MC68020+. Le 68020 permet une arithmétique longue plus rapide et des performances améliorées avec des structures compactes.

Important : L'utilisation de l'option -MC68820 peut générer des instructions incompatibles avec le 68000.

Autres produits MPW

Le MPW Shell fournit un environnement de travail intégré dans lequel vous pouvez écrire des programmes en langage de programmation assembleur 680x0, Pascal et C.

Si vous écrivez un programme en Pascal, vous pouvez également utiliser MacApp pour la programmation orientée objet. Le compilateur MPW Pascal ne peut pas être utilisé comme programme autonome.

Outre le langage de programmation assembleur 680x0, et les compilateurs Pascal et C, le MPW Shell contient également un riche complément d'outils d'édition, de liaison et de débogage, notamment SADE et MacsBug.



Dernière mise à jour : Vendredi, le 28 juin 2024