IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Comment afficher le contenu du buffer après lecture de secteur d'une disquette


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Comment afficher le contenu du buffer après lecture de secteur d'une disquette
    salut, mon programme permet de lire le secteur d'une disquette en utilisant le Dos Pascal. Mon problème est comment afficher le contenu du secteur lis (se trouvant dans le Buffer).

    Mon code ci dessous lis bien le secteur ,mais m'affiche rien à l'écran.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    program lecture_disquette;
    uses crt,Dos;
    var regs : Registers;
        P : Pointer;
    begin
    clrscr;
    regs.AH:=$02;              {la fonction de lecture}
    regs.CL:=$01;              {le numero de secteur à lire}
    regs.CH:=$00               {le numero de piste à lire }
    regs.DH:=$0;                {le numero de tete à lire};
    regs.AL:=$01                {le nombre de secteur à lire}
    regs.DL:=$00;               {le numero de lecteur de disquette conserné}
     
    GetMem(p,512);            {alloue de 512 octets}
    regs.ES:=seg(p^);        {pointer sur le segment du buffer}
    regs.BX:=ofs(p^);         {pointer sur l'offset du buffer }
    intr($13,regs);
     
    readln;
    end.

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Tu obtiens 512 octets dans le buffer, pour les afficher le mieux est de faire ca sous forme de tableau en code hexa, en s'inspirant de certains éditeurs hexadécimals.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    merci Wormful Sickfoot ,j'ai vus l'utilisage des tableaux, mais je sais pas aussi comment les afficher,si tu pourais m'edaier ça sera avec plaisir.

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Tu lis les secteurs des disquettes mais tu sais pas afficher un tableau ? Faudrait apprendre à programmer dans le bon sens

    Sinon avec des boucles for pour parcourir le tableau, et des write on s'en sort assez facilement.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par wormful_sickfoot Voir le message
    Tu lis les secteurs des disquettes mais tu sais pas afficher un tableau ? Faudrait apprendre à programmer dans le bon sens

    Sinon avec des boucles for pour parcourir le tableau, et des write on s'en sort assez facilement.
    merci,non c'est pas que je connais pas afficher un tableau ,mais plus tot que j'ai pas compris comment utiliser ici dans mon cadre (c'est à dire que j'ai pas pu metriser l'affichage du Buffer et surtout maintenant j'ai pas le temps pour fouetter par ci par la). j'aimerai que vous m'espliquez clairement comment je face ça.

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Tu as défini P comme étant un simple pointeur, mais ce n'est pas vraiment facile à manipuler tel quel. L'idéal c'est de déclarer P comme un pointer sur un tableau de byte. Ainsi tu pourras accéder aux données en "déréférençant" le pointeur. Un exemple ici:

    http://mdalbin.developpez.com/tutori...al/tvpa/#LIV-B
    et
    http://mdalbin.developpez.com/tutori...pa/#LIII-B-2-d
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par wormful_sickfoot Voir le message
    Tu as défini P comme étant un simple pointeur, mais ce n'est pas vraiment facile à manipuler tel quel. L'idéal c'est de déclarer P comme un pointer sur un tableau de byte. Ainsi tu pourras accéder aux données en "déréférençant" le pointeur. Un exemple ici:

    http://mdalbin.developpez.com/tutori...al/tvpa/#LIV-B
    et
    http://mdalbin.developpez.com/tutori...pa/#LIII-B-2-d
    oui j'ai vu tout ça ,au fait je peux dire que je suis au bout de mon soufle .Je m 'en connais pas assez en Turbo Vision ,tout de méme j'ai essaiyé de dechiffrer le code mais helas (en plus les fonctions comme Hexa16() ne sont pas reconnu par turbo pascal).

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Tout le code est fourni, il suffit de le télécharger en bas de la page. Sinon, pas besoin de s'y connaître en Turbo Vision. Reprenons:

    si on déclare P en tant que pointeur sur tableau de byte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type TBuffer=array[0..511] of byte;
         PBuffer=^TBuffer;
     
    var P: PBuffer;
    Alors on peut accéder aux données en déréférençant le pointeur P:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var I: integer;
    begin
      for I:= 0 to 511 do
      begin
        write(P^[I], '  ');
        if I mod 16 = 0 then writeln;
      end;
    end;
    Quelque chose dans ce style...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    merci, mais j'ai oublié de vous signaler de mon petit progret de la nuit .
    après avoir complètement changer les pointers par un tableau de 512 chars.
    ceci m'affichait ,mais c'était des écrites du genre bizarre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     program lecture_disquette;
    uses crt,Dos;
    var regs : Registers;
                 buffer : array[1..512] of char;        
                i: integer;
    begin
    clrscr;
    regs.AH:=$02;              {la fonction de lecture}
    regs.CL:=$01;              {le numero de secteur à lire}
    regs.CH:=$00               {le numero de piste à lire }
    regs.DH:=$0;                {le numero de tete à lire};
    regs.AL:=$01                {le nombre de secteur à lire}
    regs.DL:=$00;               {le numero de lecteur de disquette conserné}
     
               
    regs.ES:=seg(buffer);      
    regs.BX:=ofs(buffer);         
    intr($13,regs);
    
    for i:=0 to 511 do
    write(buffer[i]);                {affichage du contenu du Buffer }
    
    readln;
    end.

  10. #10
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Sauf qu'il y a un problème avec l'indice de parcours de la boucle qui commence à 0, alors que ton tableau est déclaré commençant à 1.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  11. #11
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bon, j'ai essayé avec le code que vous m'aviez passé et c'etait bien. chaque octet est affiché par un nombre qui est son corespondant en hexadecimal.
    j'espére que c'est tout pour la lecture d'un secteur.

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Soa,

    Comme l'a déjà dit wormful_sickfoot, j'ai l'impression que tu veux aller plus vite que la musique.

    On ne commence pas l'apprentissage de la programmation par des sujets dépassant le niveau élémentaire.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Comment afficher le contenu d'un fichier ini dans un mémo?
    Par Jayceblaster dans le forum Langage
    Réponses: 7
    Dernier message: 13/05/2014, 17h38
  2. Comment afficher le contenu d'une variable ?
    Par innova dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2007, 11h45
  3. Réponses: 4
    Dernier message: 19/10/2006, 16h24
  4. Comment afficher le contenu d'une cassette DAT?
    Par prefna dans le forum Périphériques
    Réponses: 1
    Dernier message: 24/07/2006, 13h46
  5. Réponses: 23
    Dernier message: 07/02/2006, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo