Utiliser FileIO 

 

L'Xtra FileIO est apparue après la sortie de la version 5 de Director pour remplacer avantageusement l'Xobjet FileIO. Elle remplit toujours la même fonction : écrire et lire depuis un script Lingo, un fichier texte enregistré sur le disque dur de l'utilisateur. La mise en oeuvre de l'Xtra est la même sur Mac comme sur PC.


Nous vous proposons ci-après de mettre en œuvre l'Xtra depuis la fenêtre message de Director attendu que toutes les commandes utilisées ici (sauf showXlib) sont utilisables dans un script habituel.
Les manipulations qui suivent supposent que l'Xtra FileIO se trouve dans le dossier Xtras au démarrage de Director.

Commençons par enregistrer l'animation actuelle sur le bureau du mac (ou celui de windows) ce qui nous permettra de voir les fichiers que nous allons manipuler.
On ouvre la fenêtre message et l'on s'enquiert des Xtras et Xobjets disponibles par la commande Lingo ShowXlib. Le réponse est très laconique. Jugez-en plutôt :

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

Le contenu de cette liste peut varier mais sa structure est toujours la même : D'abord les Xtras (sous le titre XLibrairies) puis viennent les Xobjets et autres (sous le titre Standard.xlib). Pour info, XCMDGlue est un xobjet intégré à Director qui permet d'utiliser les fragments de code ( XCMDs, XFCNs) destinés initialement à Hypercard, (sur PC, on rencontrera DLLGlue qui joue ce même rôle d'intermédiaire à l'usage des librairies liées dynamiques DLL). On a ici avec SerialPort deux ressources XCODs intégrées à Director et non pas des XObjets externes. Director 7 n'accepte que les Xtras.

Pour apparaître dans cette liste, les xtras Lingo doivent être placés dans le dossier Xtras au lancement de l'application ou bien encore être ouvertes ponctuellement par la commande openXlib.

Les Xobjets doivent être appelés par openXlib.

Les XCMDs et XFCNs doivent être ouvertes par openXlib. L'xobjet intégré XCMDGlue se chargeant de gérer dansDirector l'utilisation des ces commandes externes destinées en fait à enrichir Hypercard.



Placé dans le dossier Xtras de Director, FileIO immédiatement disponible , nous pouvons lui demander son mode d'emploi par la commande Lingo mMessagelist qui retourne les méthodes de l'Xtra  :

 mMessagelist(xtra "fileio")

Et, pour en obtenir l'affichage :

 put the result

Le résultat de cette demande d'explication est on ne peut plus clair ! ;-)

-- "xtra fileio
-- CH 18apr97
new object me
-- create a new child instance
fileName object me
-- return fileName string of the open file
status object me
-- return the error code of the last method called
error object me, int error
-- return the error string of the error
setFilterMask object me, string mask
-- set the filter mask for dialogs
openFile object me, string fileName, int mode
-- opens named file. valid modes: 0=r/w 1=r 2=w closeFile object me
-- close the file display
Open object me
-- displays an open dialog and returns the selected fileName to lingo
displaySave object me, string title, string defaultFileName
-- displays save dialog and returns selected fileName to lingo
createFile object me, string fileName
-- creates a new file called fileName
setPosition object me, int position
-- set the file position
getPosition object me
-- get the file position
getLength object me
-- get the length of the open file
writeChar object me, string theChar
-- write a single character (by ASCII code) to the file
writeString object me, string theString
-- write a null-terminated string to the file
readChar object me
-- read the next character of the file and return it as an ASCII code value
readLine object me
-- read the next line of the file (including the next RETURN) and return as a string
readFile object me
-- read from current position to EOF and return as a string
readWord object me
-- read the next word of the file and return it as a string
readToken object me, string skip, string break
-- read the next token and return it as a string
getFinderInfo object me
-- get the finder info for the open file (Mac Only)
setFinderInfo object me, string attributes
-- set the finder info for the open file (Mac Only)
delete object me
-- deletes the open file
+ version xtraRef
-- display fileIO version and build information in the message window
* getOSDirectory
-- returns the full path to the Mac System Folder or Windows Directory "

Ce poème est constitué de l'ensemble des fonctions offertes. Certaines de ces fonctions (appelées méthodes globales) peuvent être invoquées directement :

getosdirectory
put the result
-- "The eight ball:Dossier Système:"

D'autres exigent que l'Xtra elle-même leur soit passée en argument (les "méthodes de classe" héritée à l'Xtra de Director et précédées par un +). D'autres enfin imposent la création d'une instance de l'Xtra.
On commence donc par appeler une méthode permettant la création d'une instance, un enfant de l'Xtra. Le résultat de l'instanciation sera stocké dans la variable CRAPO. CRAPO sera donc le nom de l'enfant à  naître (rappel : toute variable créée dans la fenêtre message est globale).

 set CRAPO to new(xtra "fileio")

Les fautes de frappes sont trop faciles, aussi à intervalle régulier nous nous soucierons de savoir si tout c'est bien passé
la fonction Status() retourne un numéro d'erreur pour la dernière opération commandée à l'enfant. Mais que ferions nous d'un numéro dont la signification nous est inconnue ?
La fonction error() qui prend deux arguments : l'enfant et un numéro d'erreur, va effectuer la nécessaire traduction :

 put error(CRAPO,status(CRAPO))
 -- "OK"

La réponse est claire. Tout s'est bien passé. Nous pouvons continuer et demander à CRAPO de créer un fichier sur le bureau du mac :

 createFile(CRAPO,"the eight ball:desktop folder:monfichier")

Après quelques instants, le fichier apparaît sur le bureau avec une icône indéterminée. Sur un mac, un fichier possède un type et un créateur (quatre caractères à chaque fois). Ce sont ces infos qui permettent au Finder d'afficher la bonne icône sur le bureau et de lancer la bonne application le cas échéant si l'on double-clique sur l'icône. Dans le cas présent nous allons créer un fichier de type texte et l'associer à TeachText :

 setFinderInfo(CRAPO,"TEXT ttxt")

D'autres possibilités s'offraient à nous : "ttro ttxt" permettait la création d'un fichier texte verrouillé comme on en voit sur les CD des magazines, "pref CrPo" associait au fichier l'icône d'un fichier de préférences et lui donnait CrPo (?) comme créateur...
Continuons. Il convient bien-sûr d'ouvrir ce fichier pour nous le rendre accessible. Nous choisissons de l'ouvrir en lecture/écriture : on passe l'argument zéro.

 openFile(CRAPO,"Macintosh HD:desktop folder:monfichier",0)

Le fichier est ouvert si le nom et le chemin sont corrects. Dans la pratique on testera le résultat de l'instruction par la fonction status() voir plus haut.

Les habitués des Xobjets auront décelé la nuance : L'objet est passé à la méthode comme argument et non pas la méthode à l'objet comme jadis. Pour les autres il suffira de se souvenir que l'objet fait le premier argument de toutes les fonctions. exemple :

  writeString(CRAPO,"BONJOUR A TOUS !")

Notre fichier "monfichier" contient désormais la chaîne de caractères souhaitée. mais avant de le fermer pour aller l'ouvrir avec un éditeur quelconque, une remarque :
La position courante à l'intérieur du fichier détermine la position des caractères lus ou ajoutés. Pour toute manipulation du texte du fichier à l'aide de l'Xtra, il convient de s'enquérir de cette position courante :

  getPosition(CRAPO)
  put the result
 -- 14

Nous sommes à la fin de la chaîne. impossible de lire un quelconque caractère sans revenir en arrière :

 setPosition(CRAPO,3)

Dès lors :

 readChar(CRAPO)
 put the result
-- "J"

C'est le suivant qui est lu ! Et si l'on insiste : le suivant toujours. On doit donc savoir revenir au début d'une chaîne par setPosition(CRAPO,0) mais également à la fin de celle-ci. Pour savoir où la chaîne finit :

 getLength(CRAPO)
 put the result
-- 14

Pour se placer à la fin donc c'est très facile :

  setPosition(CRAPO,getLengh(CRAPO))
  writestring(CRAPO," Le CrapoWeb vous salue !")

Enfin, L'ON N'OUBLIERA JAMAIS de fermer un fichier ouvert,

  closeFile(CRAPO)

Ni non plus de supprimer l'instance (mais plus en lui passant mDispose ! C'est un Xtra vous dit-on !) :

  set CRAPO to 0

Il vous est désormais possible d'ouvrir le fichier, s'il est de type TEXT, depuis le Finder à l'aide de n'importe quel éditeur pour lire son contenu. Mais peut-être préférerez-vous l'ouvrir depuis votre script. Auquel cas il vous faut recréer une instance de FileIO :

  set UNOBJET to new(xtra "fileio")
  openfile(UNOBJET, "the eight ball:desktop folder:monfichier", 0)
  put error(UNOBJET,status(UNOBJET))
 -- "OK"

Si vous souhaitez lire le contenu du fichier ainsi ouvert, pensez bien à vous placer au début du fichier !
Mais nous vous proposons un jeu plus dangereux :

  delete(UNOBJET)

Il n'y a plus de fichier et aucune demande de confirmation !

Enfin il convient de disposer de l'objet pour nettoyer la mémoire :

  set UNOBJET to 0




La dernière version de l'Xtra FileIO peut être téléchargée
sur le site de macromedia .