Les APIs Hiérarchical File System (HFS)/OFFICE

BoTTom |    Changer de couleur
               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.


|    Changer de couleur
 
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)
 


|    Changer de couleur
 
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
 


|    Changer de couleur
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


|    Changer de couleur
 
 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)


|    Changer de couleur
 
 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)
 


|    Changer de couleur
 
 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 ' ')
 
 


|    Changer de couleur
                                   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


|    Changer de couleur
 
 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
 


|    Changer de couleur
 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


|    Changer de couleur
 
 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
 
 
 
 
 





©AF400