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
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
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
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
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
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
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
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.
Il suffit simplement de se dire que le "bureau à distance" ne serait pas possible s'il ne s'agissait que d'interruptions matériels![]()
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.
voila j'ai trouvé des procedures dont l’entête été :
et plein d'autre mais aucune qui porte e nom write ou writeln tout-cour?
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);
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.
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;
Partager