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

Pour discuter de l'assembleur
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

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

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Répondre