================================== Documentation de l'unité OFLUX.PAS ================================== L'unité OFlux utilise les unités Dos et UMem. Elle définit des objets de type TFlux qui permettent de gérer les transferts de données d'un emplacement vers un autre : mémoire conventionnelle vers fichier, mémoire étendue vers mémoire conventionnelle, etc... Ces objets utilisent une syntaxe unifiée issue de l'utilisation des fichiers, ils gèrent une position de lecture écriture dans le flux. ============================= OBJET GENERIQUE DE TYPE TFLUX ============================= Type PFlux = ^TFlux; TFlux = object Cet objet générique définit les champs et méthodes communs à tous les flux. ++++++++++ + Champs + ++++++++++ _ Status : Integer; Code d'erreur : égal à 0 si tout va bien. _ ErrorInfo : Integer; Code d'information supplémentaire sur les erreurs. ++++++++++++ + Méthodes + ++++++++++++ _ Constructor Init; Initialisation des champs : met Status et ErrorInfo à 0. _ Destructor Done; virtual; Destiné à gérer la libération de la mémoire et la fermeture des fichiers. _ Procedure CopyFrom(Var F:TFlux; Count:LongInt); Chargement de Count octets provenant du flux F. La position courante dans chacun des flux est utilisée. _ Procedure Error(code,info:Integer); virtual; Ecrit une erreur dans Status et ErrorInfo. _ Function Find(S:String):Boolean; Recherche de la chaîne S dans le flux. _ Procedure Flush; virtual; Ecriture sur disque du buffer éventuellement utilisé. _ Function GetErrorMsg:String; virtual; Renvoie un message d'erreur selon la valeur de Status et ErrorInfo. _ Function GetPos:LongInt; virtual; Renvoie la position courante dans le flux. _ Function GetSize:LongInt; virtual; Renvoie la taille actuelle du flux. _ Function IsValid:Boolean; virtual; Indicateur d'erreur : renvoie true si Status n'est pas égal à 0. _ Procedure Read(var Buf; Count:Word); virtual; Lecture de la variable Buf dans le flux sur Count octets. _ Function ReadStr:PString; Lecture d'une chaîne de caractères. C'est le premier octet rencontré qui représente la longueur de la chaîne. _ Procedure Reset; Réinitialisation du flux. Remet Status et ErrorInfo à 0. _ Procedure Seek(pos:LongInt); virtual; Fixe la position de lecture/écriture dans le flux. _ Procedure Truncate; virtual; Fixe la fin du flux à la position actuelle. _ Procedure Write(var Buf; Count:Word); virtual; Ecriture de Buf sur Count octets dans le flux. _ Procedure WriteStr(P:PString); Ecriture d'une chaîne de caractères dans le flux. L'octet de longueur est écrit aussi. ====================== OBJET DE TYPE TFLUXMEM ====================== Type PFluxMem = ^TFluxMem; TFluxMem = object(TFlux) Descend directement du type TFlux. Les données utilisées sont stockées en mémoire conventionnelle. (taille maximale de 65000 octets) +++++++++++++++++++ + Nouveaux champs + +++++++++++++++++++ _ Buffer : PBuffer; Pointeur sur les données considérées comme un tableau d'octets. _ BufSize : Word; Taille de Buffer; 65000 au plus. _ BufPtr : Word; Pointe sur la position courante dans Buffer. _ BufEnd : Word; Pointe sur la fin de la partie utilisée de Buffer. _ BufDeb : LongInt; Pointe sur la position réelle du premier octet de Buffer. Utilisé par les flux bufférisés. _ WriteFlag : Boolean; Indique la nécessité d'utiliser Flush pour sauver sur disque. Utilisé par les flux bufférisés. ++++++++++++++++++++++ + Nouvelles méthodes + ++++++++++++++++++++++ _ Constructor Init(Size:Word); Initialisation avec un buffer d'une taille de Size octets réservés en mémoire conventionnelle. _ Constructor Load(NomDeFichier:PathStr; Size:Word); Initialisation à partir du fichier NomDeFichier. Le contenu du fichier est copié dans le buffer. Size représente la taille du buffer. Si Size est égal à 0, la taille du buffer est la taille du fichier. _ Destructor Done; virtual; Libération de la mémoire occupée par le buffer. _ Procedure UpDate(pos:LongInt); virtual; Mise à jour du buffer : utilisé par les flux bufférisés. ====================== OBJET DE TYPE TFLUXDOS ====================== Type PFluxDos = ^TFluxDos; TFluxDos = object(TFlux) Descend directement du type TFlux. Les données utilisées sont stockées dans un fichier DOS. Cet objet utilise directement les interruptions du DOS. +++++++++++++++++++ + Nouveaux champs + +++++++++++++++++++ _ Handle : Word; Handle du DOS attribué au fichier. _ FDir : DirStr; Chemin d'accès au fichier. _ FName : NameStr; Nom du fichier. _ FExt : ExtStr; Extension du fichier. ++++++++++++++++++++++ + Nouvelles méthodes + ++++++++++++++++++++++ _ Constructor Init(FileName:PathStr; Mode:Word); Ouverture du fichier dans le mode fixé par Mode. Mode peut prendre l'une des 3 valeurs suivantes : stCreate : créer un nouveau fichier en écrasant si nécessaire un fichier existant de même nom stOpen : ouvrir un fichier existant en lecture/écriture stReadOnly : ouvrir un fichier en lecture seulement _ Destructor Done; virtual; Fermeture du fichier. ====================== OBJET DE TYPE TFLUXBUF ====================== Type PFluxBuf = ^TFluxBuf; TFluxBuf = object(TFluxMem) Descend directement du type TFluxMem. Il s'agit d'un flux bufférisé. Les données utilisées sont stockées dans un flux, mais les procédures de lecture/écriture utilisent un buffer. A utiliser lorsqu'on fait de nombreux accès de taille moyenne (1 ou 2 Ko). +++++++++++++++++++ + Nouveaux champs + +++++++++++++++++++ _ Flux : PFlux; Flux contenant les données. ++++++++++++++++++++++ + Nouvelles méthodes + ++++++++++++++++++++++ _ Constructor Init(F:PFlux; Size:Word); Initialisation à partir d'un flux. Size représente la taille du buffer qui doit être supérieure au double de la plus grande variable lue dans le flux. _ Constructor Load(NomFichier:PathStr; Mode,Size:Word); Initialisation à partir d'un fichier. Le champ Flux est alors de type PFluxDos. Mode se rapporte à l'initialisation de TFluxDos. Size est la taille du buffer. _ Destructor Done; virtual; Appelle de destructeur de Flux. Libère la mémoire du buffer. K.B. avril 1996