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

Free Pascal Discussion :

Code source de l'implémentation de Write [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Par défaut Code source de l'implémentation de Write
    Bonjour,

    je voudrais connaître le code qui s'exécute lorsqu'on écrit la fonction Write en Pascal, c'est-à-dire le code source écrit par le développeur du langage.

    Merci

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    salut

    la methode "write" utilise la fonction système 40h interruption 21h
    le code est compilé personne n'a les sources mais au lieu d'écrire dans un fichier elle écrit sur le périphérique écran

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Par défaut
    merci pour la réponse,
    connaissez vous un langage ou on a accès au code source
    je veux apprendre comment les choses sont faites.
    merci

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonsoir

    Free Pascal est un logiciel libre, et donc les sources sont disponibles: https://www.freepascal.org/down/source/sources.var
    Par contre pour tout ce qui se rapporte au système (les fonctions de bas niveau) cela risque d'être assez obscure.

    Et c'est bien un endroit où j'ai jamais mis les pieds.

    Delias

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par je viens du sud Voir le message
    Bonjour,

    je veux connaitre le code qui s'exécute lorsqu'on écrit la fonction write en pascal , c'est a dire le code source écrit par le développeur du langage ,
    merci
    ce code est différent en fonction de l'OS cible...mais dans tous les cas, un debug pas à pas au niveau assembleur donnera tout le détail

    le code source doit se trouver dans l'unité System

    Citation Envoyé par anapurna Voir le message
    salut

    la methode "write" utilise la fonction système 40h interruption 21h
    le code est compilé personne n'a les sources mais au lieu d'écrire dans un fichier elle écrit sur le périphérique écran
    ça c'est uniquement sous DOS

    sous Windows (et sous Delphi), c'est WriteFile vers STD_OUTPUT_HANDLE
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ce code est différent en fonction de l'OS cible...mais dans tous les cas, un debug pas à pas au niveau assembleur donnera tout le détail

    le code source doit se trouver dans l'unité System


    ça c'est uniquement sous DOS

    sous Windows (et sous Delphi), c'est WriteFile vers STD_OUTPUT_HANDLE
    oui et non
    pour tout ce qui est pc le write ou writefile utilise la meme interuption et fonction matériel (bios)
    pour ce qui est de iPhone et autre nouveaux matériel je ne sais pas mais je suppose que pour beaucoup ils ont gardé les mêmes fonctionnalités
    l'os n'est qu'une surcouche du bios que se sois du linux,windows,...

    d’après toi, il fait quoi le writeFile ou le write sur un pc sous Windows ?
    pour moi c'est la même fonction sauf que l'une a été dédié a l'affichage
    mais j'ai un souvenir ou il y avait un moyen de détourner la sortie standard écran sous tout autres fichier

    PS après vérification 21h est une interruption logiciel et correspond a l’interruption 80h sous linux
    effectivement les interruption logiciel diffère selon l'os

  7. #7
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par anapurna Voir le message
    oui et non
    pour tout ce qui est pc le write ou writefile utilise la meme interuption et fonction matériel (bios)
    pour ce qui est de iPhone et autre nouveaux matériel je ne sais pas mais je suppose que pour beaucoup ils ont gardé les mêmes fonctionnalités
    l'os n'est qu'une surcouche du bios que se sois du linux,windows,...

    d’après toi, il fait quoi le writeFile ou le write sur un pc sous Windows ?
    pour moi c'est la même fonction sauf que l'une a été dédié a l'affichage
    mais j'ai un souvenir ou il y avait un moyen de détourner la sortie standard écran sous tout autres fichier

    PS après vérification 21h est une interruption logiciel et correspond a l’interruption 80h sous linux
    effectivement les interruption logiciel diffère selon l'os
    alors, on reprend, le BIOS de base utilise l'interruption 10h pour afficher une chaîne de caractère à l'écran.
    l'Int 21h est celle du DOS
    en effet le noyau Linux utilise l'interruption 80h

    mais 21 et 80 sont des interruptions logicielles qui sont donc liées à l'OS.

    l'int 10h du BIOS elle, n'est utilisable qu'en mode réel, c'est à dire dans l'état d'un PC à l'allumage, dès que l'on bascule en mode protégé (Windows, Linux, etc...) plus aucune fonction du BIOS n'est disponible.

    Linux en mode console écrit directement dans la mémoire vidéo.
    Windows (et Linux en mode graphique) utilise de toute façon des fonctions de rendu de police en mode graphique et on est très très loin de la fonction du BIOS.

    J'avais fait un article sur le mode protégé d'ailleurs
    http://tothpaul.developpez.com/boot/
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    alors, on reprend, le BIOS de base utilise l'interruption 10h pour afficher une chaîne de caractère à l'écran.
    l'Int 21h est celle du DOS
    en effet le noyau Linux utilise l'interruption 80h

    mais 21 et 80 sont des interruptions logicielles qui sont donc liées à l'OS.

    l'int 10h du BIOS elle, n'est utilisable qu'en mode réel, c'est à dire dans l'état d'un PC à l'allumage, dès que l'on bascule en mode protégé (Windows, Linux, etc...) plus aucune fonction du BIOS n'est disponible.

    Linux en mode console écrit directement dans la mémoire vidéo.
    Windows (et Linux en mode graphique) utilise de toute façon des fonctions de rendu de police en mode graphique et on est très très loin de la fonction du BIOS.

    J'avais fait un article sur le mode protégé d'ailleurs
    http://tothpaul.developpez.com/boot/
    salut

    si tu regarde l’unité System pour D7
    tu vois clairement que pour windows il utilise la fonction writeFile
    et pour linux la fonction __write
    j'ai dans l'idée que c'est deux fonction appelle un fonction défini dans l'os qui déclenche une action matériel, non ?
    que l'os utilise des surcouche pour protéger l’accès direct on est d'accord mais au final c'est bien une interruption matériel qui est utilisé

    maintenant il est vrai que l'api Windows cache les appels de bas niveaux donc effectivement ce n'est peut être plus l’interruption 21h et la fonction 40h qui est utilisé derriere mais le principe reste toujours le même ... d’ailleurs je me demande comment fonctionne les accélérateur vidéo

  9. #9
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut

    si tu regarde l’unité System pour D7
    tu vois clairement que pour windows il utilise la fonction writeFile
    et pour linux la fonction __write
    j'ai dans l'idée que c'est deux fonction appelle un fonction défini dans l'os qui déclenche une action matériel, non ?
    que l'os utilise des surcouche pour protéger l’accès direct on est d'accord mais au final c'est bien une interruption matériel qui est utilisé

    maintenant il est vrai que l'api Windows cache les appels de bas niveaux donc effectivement ce n'est peut être plus l’interruption 21h et la fonction 40h qui est utilisé derriere mais le principe reste toujours le même ... d’ailleurs je me demande comment fonctionne les accélérateur vidéo
    non mais t'es sérieux là ? l'interruption dont tu parles est un programme en mode réel logé dans le BIOS pour écrire dans la mémoire de la carte vidéo en mode texte...ce qui consiste à stocker le code ASCII de la lettre à l'adresse mémoire utilisée par la carte vidéo pour afficher ledit caractère...ça n'est tout simplement pas utilisable dans un OS en mode protégé sur un carte vidéo en mode graphique...ni même dans un vrai mode console puisqu'on est de toute façon en mode protégé.

    pourquoi penses-tu qu'il failles installer des drivers vidéo ? c'est pour dialoguer directement avec la GPU à travers les ports de la carte graphique qui sont spécifiques à chaque marque, voir chaque modèle, le BIOS n'est là que pour donner que le strict minimum d'accès en mode réel et permettre de charger le système d'exploitation, et au final c'est la carte vidéo qui, en étant compatible VGA, permet au BIOS de l'utiliser, pas le contraire.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Il suffit simplement de se dire que le "bureau à distance" ne serait pas possible s'il ne s'agissait que d'interruptions matériels

  11. #11
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Pour répondre à la question initiale, le code source correspondant à "write" est dans le fichier text.inc, une sous-partie de system.inc, elle-même une sous-partie de l'unité system.pp.
    Les routines appelées sont toutes écrites en pur Pascal. Le code propre à write (writeln) commence à la ligne 660. Il s'agit essentiellement d'écrire dans un buffer et de traiter le texte comme un fichier particulier. Mais pour le détail, bon courage .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Par défaut
    Citation Envoyé par gvasseur58 Voir le message
    Les routines appelées sont toutes écrites en pur Pascal.
    information pertinente merci

    Citation Envoyé par gvasseur58 Voir le message
    Pour répondre à la question initiale, le code source correspondant à "write" est dans le fichier text.inc, une sous-partie de system.inc, elle-même une sous-partie de l'unité system.pp. Le code propre à write (writeln) commence à la ligne 660.
    malgré toute ces indices, j'ai pas trouvé ni le dossier, ni l'unité

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Par défaut
    voila j'ai trouvé des procedures dont l’entête été :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fpc_WriteBuffer(var f:Text;const b;len:SizeInt);
    fpc_WriteBlanks(var f:Text;len:longint);
    Procedure fpc_Write_End(var f:Text); 
    rocedure fpc_Write_Text_ShortStr(Len : Longint;var f : Text;const s : String);
    et plein d'autre mais aucune qui porte e nom write ou writeln tout-cour?

    quelle la technique qu'ils utilisent pour faire la correspondance entre ces write et le fameux write qu'on utilise en pascal ?

  14. #14
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par je viens du sud Voir le message
    voila j'ai trouvé des procedures dont l’entête été :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fpc_WriteBuffer(var f:Text;const b;len:SizeInt);
    fpc_WriteBlanks(var f:Text;len:longint);
    Procedure fpc_Write_End(var f:Text); 
    rocedure fpc_Write_Text_ShortStr(Len : Longint;var f : Text;const s : String);
    et plein d'autre mais aucune qui porte e nom write ou writeln tout-cour?

    quelle la technique qu'ils utilisent pour faire la correspondance entre ces write et le fameux write qu'on utilise en pascal ?
    Très franchement, pour comprendre ce qu'il se passe réellement, plonger dans le code source de Free Pascal n'est sans doute pas la meilleure chose à faire : non seulement on trouve des unités partagées comme celle citée, mais aussi des déclinaisons pour chacune des plates-formes visées. Je suggère plutôt de partir d'un compilateur pédagogique comme P4 ou son fils P5 qui sont dans le domaine public. Free Pascal est quand même le produit du travail de toute une équipe depuis 1992... Pour ma part, j'en suis resté à une connaissance minimale mais maîtrisable des compilateurs .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  15. #15
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par je viens du sud Voir le message
    voila j'ai trouvé des procedures dont l’entête été :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fpc_WriteBuffer(var f:Text;const b;len:SizeInt);
    fpc_WriteBlanks(var f:Text;len:longint);
    Procedure fpc_Write_End(var f:Text); 
    rocedure fpc_Write_Text_ShortStr(Len : Longint;var f : Text;const s : String);
    et plein d'autre mais aucune qui porte e nom write ou writeln tout-cour?

    quelle la technique qu'ils utilisent pour faire la correspondance entre ces write et le fameux write qu'on utilise en pascal ?
    tu ne trouveras pas les fonctions Write et WriteLn, pas plus que Read et ReadLn car ce sont des fonctions "magiques" qui sont directement interprétées par le compilateur comme un ensemble d'appels

    par exemple, sous Delphi cela donnera pour Windows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    begin
      WriteLn('hello', 1);
    // Write0UString('hello')
    // Write0Long(1)
    // WriteLn
    // _IOTest
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. implémentation(code source) de swprintf sous linux
    Par Nouri2012 dans le forum Langage
    Réponses: 1
    Dernier message: 20/06/2012, 12h21
  2. Contribuez à la FAQ et aux CODES SOURCE XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 21/04/2008, 20h52
  3. Defragmenteur code-source
    Par ak-k dans le forum Windows
    Réponses: 7
    Dernier message: 25/08/2003, 14h36
  4. Je cherche le code-source d'un interface de Windows
    Par Robert A. dans le forum Windows
    Réponses: 5
    Dernier message: 02/06/2003, 09h45
  5. [VB6] Code source pour modifier MsgBox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/02/2003, 15h13

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