L'Xobjet MISC_X (D6) 

 

 

Avec Director 6.5, ses nouvelles fonctionnalités et surtout sa nouvelle architecture ouverte, il reste semble-t-il bien peu de place pour ces vieux xobjets ringards. Et pourtant, pour un coût très faible ou nul, une occupation mémoire ridicule, parfois une grande stabilité et toujours un mise en oeuvre très simple, on trouvait des xobjets pour toutes les tâches courantes du développement. MISC_X faisait partie de ces outils fidèles (depuis 1994 - Macromind director 3). L'xobjet n'est plus suivie aujourd'hui par l'éditeur et n'apparaît plus dans aucun listing. Nous nous proposons d'en faire le prétexte à une découverte des Xobjets :

On s'enquiert des Xchoses disponibles en saisissant ShowXlib dans la fenêtre message de Director :

showXlib
-- XLibraries:
--   Xtra: QTVRXtra
--   Xtra: ScriptColor
--   Xtra: PrintOMatic_Lite
--   Xtra: NetLingo
--   Xtra: Mui
--   Xtra: fileio
-- "*Standard.xlib"
--   XObject: SerialPort       Id:200 
--   XObject: XCMDGlue         Id:2020

Aucun Xobjet externe n'apparaît dans la deuxième partie de cette liste,  nous allons y remédier en indiquant à Director le chemin du fragment de code externe que nous voulons utiliser ("MISC_X"). L'xobjet a été placé sur le bureau du Mac; Nous saisissons :

openXlib "Macintosh HD:desktop folder:misc_X XObj"

Où "misc_X XObj" est le nom actuel du fichier contenant le fragment de code. Director n'indique pas si l'ouverture de l'Xobjet a réussie. pour le savoir et connaître le nom véritable de l'Xobjet, Il nous faut interroger Director un nouvelle fois :

showXlib
-- XLibraries:
--   Xtra: QTVRXtra
--   Xtra: ScriptColor
--   Xtra: PrintOMatic_Lite
--   Xtra: NetLingo
--   Xtra: Mui
--   Xtra: fileio
-- "*Standard.xlib"
--   XObject: SerialPort       Id:200 
--   XObject: XCMDGlue         Id:2020
-- "misc_X XObj"
-- XObject: MISC_X           Id:10001

L'xobjet est désormais utilisable. Mais quelles sont ses méthodes. Passée à l'objet, la méthode globale mDescribe fournit la liste des fonctions disponibles :

MISC_X(mDescribe)
-- Factory: MISC_X ID:10001
-- Misc_X, Misc Utilities XObject, v2.0

I mNew
S mBootName -- get the name of the boot disk
S mSystemFolder -- get the path to the system folder
S mPrefsFolder -- get the path to the preferences folder
IS mFileExists, filePath -- return 1 if successful, otherwise 0
ISS mCopyFile, sourcePath, destPath -- return 1 if successful, otherwise 0
IS mFolderExists, folderPath -- return 1 if exists, otherwise 0
IS mInsureFolder, folderPath -- create a full path to the folder, return possible error
XS mDeleteFolder, folderPath -- delete folder along with contents
SS mFolderList, folderPath -- return list of folders in the folder
SSSSS mAsk, query, default, btnOk, btbCancel -- dialog box that accepts user input
SSSSS mAnswer, query, btnL, btnM, btnR -- alert type dialog with variable number of buttons
IS mSpaceOnVol, volumeName -- return the number of free bytes on volume
X mFlushActions -- destroy all pending events in the queue ----
-- Copyright 1994 Sanctuary Woods --
-- written by Les R. Titze --
-- modified by Brian Parkinson -- --
-- Append folder name in mInsureFolder with a colon
-- gXObject(mInsureFolder, the pathName & "bands:genesis:") --
-- The mAsk dialog box returns the text field is btnOk clicked, otherwise the btnCancel text
-- The mAnswer dialog box returns the text of the button clicked --
-- For mAnswer dialog box, the number of buttons is variable
-- gXObject(mAnswer, "Are you sure ?", "", "Yes", "No") -- two buttons
-- gXObject(mAnswer, "A simple alert box", "", "", "Ok") -- one button ----

L'affichage présente une à une et de façon conventionnelle, les méthodes utilisables pour MISC_X. Chacune de ces lignes est rédigée de la même manière :

Le groupe de lettres initiales (capitales souvent) fournit de indications sur le type que la fonction retourne (premier caractère) et le type d'arguments qu'elle requiert (tous les autres).

X indique que la fonction ne retourne aucune valeur
I désigne un entier
S une chaîne de caractères entre guillemets

plus rarement on rencontre dans ces listes :
L pour une liste d'entiers
P pour une image
O pour une instance d'objet
V pour un type de données varié

La méthode mNew nous indique que et comment nous devons commencer par créer une instance de MISC_X. L'instance (ou enfant) doit recevoir un nom de baptême (CRAPO) nous permettant de l'invoquer : Nous allons stocker l'instance dans une variable.

set CRAPO to misc_x(mNew)

Un objet-enfant est créé qui est stocké dans la variable CRAPO. La méthode utilisée renvoie un entier code d'erreur (le premier "i"). Si tout se passe bien le résultat est 0.

 

Manipulation de fichiers

Notre objet CRAPO est maintenant prêt à obéir à nos instructions. Il sait faire de nombreuse et diverses choses. Toujours avec les Xobjets la structure est la suivante : à l'objet on passe une méthode et ses éventuels arguments entre parenthèses. Nous lui passons la méthode mBootname :

CRAPO(mBootName)

L'objet doit retourner le nom du volume :

put the result
-- "Macintosh HD"

De la même manière l'objet peut retourner le chemin au Dossier Système ou au dossier de préférences. Si nous souhaitons copier un fichier, il nous faut nous assurer que celui-ci existe : nous interrogeons CRAPO.

put CRAPO(mFileExists,CRAPO(mPrefsFolder) & "préférences du Crapo")
-- 1

Notre question se traduit ainsi : dis-moi si un document nommé "préférences du Crapo" est situé dans le dossier préférences dont le chemin est connu par la méthode mPrefsFolder. La réponse laconique : 1 est affirmative. Nous pouvons procéder à la copie de ce fichier mais nous souhaitons placer le nouvel exemplaire dans un dossier spécifique. La méthode mInsureFolder autorise la création d'un dossier ("Dossier Sauvergarde") et retourne une valeur d'erreur nulle si l'opération réussit. Attention à terminer la chaîne d'arguments par deux points (":") !

CRAPO(minsurefolder, "Macintosh HDl:desktop folder:Dossier Sauvegarde:")
put the result
-- 0

Aucune erreur, dossier créé. On effectue notre copie sous le nom "old prefs" dans ce nouveau dossier. CRAPO répondra 1 en cas de succès.

CRAPO(mcopyfile, CRAPO(mPrefsFolder) & "préférences du Crapo","Macintosh HD:desktop folder:Dossier Sauvegarde:old prefs")

put the résult
-- 1

 

Boîtes de Dialogues

MISC_X autorise en outre la création de dialogues simples et dépouillés. Les méthodes sont mAsk et mAnswer. Voyons ça. Toujours dans la fenêtre message,Nous saisissons :

CRAPO(mAsk, "Vous vous appelez", "Crapo", "Oui", "t'occupe !")

La méthode requiert 3 arguments de type chaîne. Le deuxième intitulé sera le bouton de validation par défaut.


Le choix utilisateur est retourné simplement. Il s'agit du contenu du champs de saisie si l'utilisateur valide (bouton "Oui"), de l'intitulé "t'occupe !" dans l'autre cas.

put the result
-- "Monsieur Crapo"

L'utilisateur a modifié le contenu par défaut du champs de saisie ("Monsieur Crapo") et a cliquer sur le bouton de validation.

Un autre type de boîte de dialogue acceptant plusieurs boutons est créé par mAnswer.

CRAPO(mAnswer, "quoi d'autre", "bouton gauche", "bouton milieu", "droite")
put the result
-- "droite"

L'utilisateur à choisit le bouton de droite, CRAPO retourne l'intitulé du bouton. Un dialogue à deux bouton ?


CRAPO(mAnswer, "quoi d'autre", "bouton gauche", "", "droite")
put the result
-- "bouton gauche"


N'oublions pas de libérer la mémoire en disposant de l'objet CRAPO par :

CRAPO(mDispose)

Puis de refermer le fichier de l'xobjet par Lingo.

closeXlib

 

 

Pour contacter l'éditeur de MISC_X, Sanctuary Woods : http://www.theatrix.com/sw.html