Page 1 sur 1

purebasic library descriptor -> accéder au variable, labe

Publié : ven. 30/sept./2005 23:29
par Dr. Dri
Si par exemple je voudrais faire une fonction qui renvoie le numéro du fichier courrant. Comment je m'y prend ? Tout ce dont je dispose c'est du symbole _PB_File_ObjectsNumber dans la description des bibliothèques.

Dri 8O

Publié : ven. 30/sept./2005 23:37
par Backup
je vais peut etre dire une betise mais

puisque "Resultat = OpenFile(#Fichier, NomFichier$) "
resultat contient le numero du fichier ouver , pourquoi ne pas le sauvegarder ou bien le passer en retour de procedure ? :?


[redit :] ARG j'avais pas vu qu'on etait en ASM !! excuse :D

Publié : ven. 30/sept./2005 23:48
par Dr. Dri
bah meme en asm on peut appeler openfile... mais le probleme c'est si tu ne connais pas le fichier courant... (par exemple en multithreading) ou si tu utilises une lib qui manipule des fichiers...

Dri

Publié : sam. 01/oct./2005 10:08
par Anonyme2
Freak a posté un code il y a 2 ans ici

http://forums.purebasic.com/english/vie ... bjectsarea

_PB_File_ObjectsNumber --> c'est le nombre de fichiers

_PB_File_ObjectsArea --> c'est la zone ou est stokée le handle de chaque fichier le cas échéant qui correspond à la structure

Code : Tout sélectionner

  
Structure
PB_FileStructure
    File       ; OS File pointer (HANDLE)
  EndStructure
 

_PB_File_Current --> comme le dit la doc c'est le handle du fichier courant


Le code de Freak compare le handle courant au handle de l'ensemble des handles de la zone _PB_File_ObjectsArea

S'il y a égalité, le compteur de boucle vaut l'id static de PB
Même si aucun fichier n'est ouvert, le nombre de fichiers n'est pas nul (chez moi 10), je suppose que Fred a alloué de la place pour au moins 10 fichiers (en fait 10 long correspondant aux 10 handles) et en réalloue seulement si l'id static est > à 9 (indices de 0 à 9) d'ou l'intérêt de commencer avec l'indice 0 et de continuer en incrémentant de 1


Pour le code de Freak, moi je rajouterai un break pour terminer plus rapidement dans la boucle for comme ceci

Code : Tout sélectionner

    If *Pointer\l = Current And *Pointer\l <> 0
      Result = Number
      Break   ; <----------   ici
    EndIf

Publié : sam. 01/oct./2005 10:29
par Dr. Dri
je me suis trompé de symbole ^^ mais pour le principe je viens de comprendre grace au code de freak
il fallait utiliser le mot clé extern ^^

Dri :D