H F S (Hiérarchical File System) Fichiers en organisation hiérarchique (arborescence type dos ou unix) Vous pouvez faire coéxister plusieurs système HFS sur AS/400 Il existe en standard un système livré avec l'OS : DLS (Directory Library Service = OFFICE & dossiers PCS) ==> Toutes les APIs HFS permettent de manipuler les documents OFFICE. Vous pouvez créer votre propore système de fichier HFS Pour retrouver un document OFFICE vous devez indiquer le chemin complet c'est à dire "QDLS/dossier1/.../dossierx/document" ^ ^ système de----! !-- les caractères * et ? fichiers HFS (ici OFFICE) sont admis. |
Les APIs HFS utilisent souvent des tables pour l'envoi ou le retour d'informations, organisées comme suit: !<--nbi-->!offi1!offi2!.......!offix!info1!info2!........!infox! avec nbi = nombre d'informations (binaire, 4 octets) offix = offset pour acceder à l'information X (binaire, 4 octets) c'est à dire déplacement relatif au début de la variable (prévoir + 1 pour avoir le n° du premier octet) infox = l'information x elle même qui est parfois elle même découpée. qui peut contenir elle même une autre table. (même principe) |
Chaque dossier/document posséde des attributs (définition complémentaire) Attributs possibles QNAME (10) = nom du document ou du dossier QFILATTR (10) = attributs du document (0=non,1=oui) 1 lecture seule 2 caché (hidden) 3 système ? 4 dossier ? 5 modifié ? 6 à 10 réservé QFILSIZ (binaire 4) taille QALCSIZ (binaire 4) taille allouée sur disque QCRTDTTM (13) date/heure de création QACCDTTM (13) date/heure de dernière utilisation QWRTDTTM (13) date/heure de dernière écriture QERROR (7) code erreur (à la lecture ou permanente) Attributs propres à DLS: DIACA04C706 type de document x'000E' = fichier PC DIACA04C701 code page graphique DIACA04C700 texte descriptif |
Exemple de table : la table de définition des attributs permettant de définir les attributs à extraire pour chaque document (sur API "ouvrir un dossier") 1 à 4 Nombre de postes 5 à n (p fois) offset pour chaque poste 1 poste = (répété p fois) BIN(4) lg du nom de l'attribut CHAR(?) nom de l'attribut Exemple de table : la table d'information des attributs permettant d'extraire les attributs d'un document de définir les attributs d'un document (sur API "lire contenu d'un dossier" et "créer un document) 1 à n (entète identique) 1 poste = (répété p fois) BIN(4) lg du nom de l'attribut BIN(4) lg de la valeur BIN(4) réservé CHAR(?) nom de l'attribut CHAR(?) valeur de l'attribut |
MANIPULATION: QHFOPNDR ouvrir un dossier (le système se prépare à une lecture prochaine via QHFRDRDR, il prend donc une "photo" du contenu du dossier à ce moment là !) CHAR(16) zone de retour (handle à utiliser avec QHFRDRDR et QHFCLODR) CHAR(?) chemin (prévoir QLDS/........./* pour une liste complète) BIN(4) lg du chemin CHAR(6) informations d'ouverture (chaque caractère à une signification) 1 verrouillage 0 = non 1 = *SHRUP 2 = *SHRNUP (invalide avec DLS) 2 type d'ouverture 0 = normal 1 = permanent 3 à 6 réservé CHAR(?) table de définition des attributs BIN(4) lg de la table CHAR(?) zone de retour d'erreur (commune à toutes les APIs) |
QHFRDRDR lire le contenu d'un dossier (ouvert par QHFOPNDR) CHAR(16) ID ouverture (handle renvoyé par QHFOPNDR) CHAR(?) zone de retour (=table d'information des attributs,voir plus haut) BIN(4) lg de la zone de retour BIN(4) nombre d'entrées à lire (le système fait une lecture sequentielle, en se décalant de ce nombre à chaque appel) BIN(4) lg des infos en retour 1/ si la lecture s'est déroulée correctement, le système place ici le nombre d'octets utilisés dans la zone de retour 2/ si la lecture s'est mal déroulée (zone de retour trop courte) le système place le nombre d'octets dont il aurait eu besoin. CHAR(?) zone de retour d'erreur (commune à toutes les APIs) QHFCLODR fermer un dossier (ouvert par QHFOPNDR) CHAR(16) ID ouverture (handle renvoyé par QHFOPNDR) CHAR(?) zone de retour d'erreur (commune à toutes les APIs) |
QHFOPNSF ouvrir un document (Stream file) (phase obligatoire pour utiliser le contenu d'un document (lire,modifier,copier,....) CHAR(16) zone de retour (handle à utiliser avec QHF...SF) CHAR(?) chemin (prévoir QDLS/........./* pour une liste complète) BIN(4) lg du chemin CHAR(10) informations d'ouverture (chaque caractère à une signification) 1 si fichier 0 = ne pas ouvrir ->erreur éxiste déja 1 = ouvrir 2 = recréer (= delete + crt) 2 si le fichier n'existe pas 0 = erreur 1 = création 3 type écriture (sur disque) 0 = asynchrone 1 = synchrone 4 réservé (doit être ' ') |
5 verrouillage 1 = aucun 2 = écriture interdite 3 = lecture interdite 4 = 2 + 3 (usage exclusif) 6 type d'accès 0 = lecture seule 1 = ecriture seule 2 = E/S 7 type d'ouverture 0 = normale 1 = permanente 8 à 10 = réservé CHAR(?) table d'information des attributs (utilisée par le système si création ou remplacement du document) BIN(4) lg de la table CHAR(1) zone de retour : action réalisée 1 = le fichier existe et n'a pas été remplacé 2 = le fichier n'existe pas et a été créé 3 = le fichier existe déja et a été remplacé CHAR(?) zone de retour d'erreur |
QHFRDSF ouvrir un document (Stream file) CHAR(16) handle renvoyé par QHFOPNSF CHAR(??) buffer de retour (contient les données lues) BIN(4) nb d'octets à lire (lg du buffer) BIN(4) zone de retour : nb d'octets lus (La fin de fichier est détectée par le fait que cette variable contienne une valeur inférieure au nombre d'octets à lire) CHAR(?) zone de retour d'erreur QHFWRTSF écrire dans un document ATTENTION: vous êtes par défaut positionné en début de document (vous risquez donc d'écrire par dessus, voir QHFCHGFP ) CHAR(16) handle renvoyé par QHFOPNSF CHAR(??) buffer à écrire (contient les données) BIN(4) nb d'octets à écrire (lg du buffer) BIN(4) zone de retour : nb d'octets écrits (si plus petit que le nombre d'octets à écrire ==> erreur) CHAR(?) zone de retour d'erreur |
QHFCLOSF fermer un document CHAR(16) handle renvoyé par QHFOPNSF CHAR(?) zone de retour d'erreur QHFGETSZ retrouver la taille d'un document CHAR(16) handle renvoyé par QHFOPNSF BIN(4) zone de retour (contient la taille) CHAR(?) zone de retour d'erreur QHFSETSZ définit une nouvelle taille pour un document CHAR(16) handle renvoyé par QHFOPNSF BIN(4) nouvelle taille CHAR(?) zone de retour d'erreur QHFFRCSF forcer écriture d'un document (sur disque = FEOD/RPG) CHAR(16) handle renvoyé par QHFOPNSF CHAR(?) zone de retour d'erreur |
QHFCHGFP positionne le pointeur de document par défaut le pointeur est positionné en début de document et est décalé du nombre d'octets traités à chaque lecture ou écriture CHAR(16) handle renvoyé par QHFOPNSF CHAR(6) informations de déplacement caractère 1 : 0 = déplacement à partir du début de fichier 1 = déplacement relatif à la position actuelle 2 = déplacement à partir de la fin de fichier 2 à 6 : réservé BIN(4) déplacement positif = vers la fin de fichier négatif = retour vers le début de fichier BIN(4) zone de retour : contient le nouvel offset CHAR(?) zone de retour d'erreur |