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

Langage Pascal Discussion :

[Débutant] Directives [EXTERN], FORWARD et [PUBLIC]+fonctions inconnues


Sujet :

Langage Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut [Débutant] Directives [EXTERN], FORWARD et [PUBLIC]+fonctions inconnues
    Bonjour,

    Dans le cadre d'une mission, je dois reprendre une application développée sous Turbo Pascal. Le pascal étant un langage que je n'ai jamais pratiqué mais qui me semble assez intuitif une fois que l'on connait un autre langage du type C.

    J'ai jeté un coup d'oeil sur la faq, ainsi que sur le cours de Z.... mais je n'ai pas trouvé réponses à quelques expressions utilisées dans le code:

    -> Que signifie MODULE "nom du fichier" en début de fichier ".pas" et comment les utiliser?

    -> Que signifie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ParamPerf[EXTERN] : TypPerf
    -> Que signifie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FUNCTION GetSysSec:Integer;FORWARD
    -> que signifie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCEDURE TempMS(duree:word) [PUBLIC]
    -> et enfin quel est le rôle de la fonction DosXqq()?

    Merci d'avance.
    Bonne fin de journée

    Nicolas

  2. #2
    ALT
    ALT est déconnecté
    Membre Expert
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 382
    Par défaut
    Bonjour

    Pour Forward, pas de pb : ça signifie que la fonction est déclarée sur la ligne en question, mais elle est définie plus tard.
    En effet, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FUNCTION GetSysSec:Integer;FORWARD
    indique au compilateur que la fonction GetSysSec existe & qu'elle retourne un entier. C'est la déclaration.
    Mais on ne sait toujours pas ce qu'elle fait.
    Ce qu'elle fait est dans la partie définition, qui se fait plus loin.

    L'intérêt ?
    Il y en a au moins deux :
    - ça permet de regrouper les déclarations en début de programme.
    - ça permet de s'affranchir de l'ordre réel des définitions. Ainsi une procédure qui en appelle une autre n'a plus besoin d'être définie après la procédure appelée. Il suffit que la déclaration (en "forward") de cette dernière soit placée avant la procédure appelante.
    Il faut dire que ça n'est réellement utile que dans le cas de procédures/fonctions qui s'appellent mutuellement. Ce qui est assez rare !

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure p1;
    begin
    (** définition de p1 **)
    end;
     
    procedure p2;
    begin
        ...
        p1; (** appel de p1 **)
        ...
    end;
    Dans ce cas, si on inverse l'ordre de p1 & p2, le compilateur hurle car à la compilation de p2, il ne connaît pas p1.

    Si on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure p1;forward;
    procedure p2;forward;
     
    procedure p2;
    begin
        ...
        p1;
        ...
    end;
     
    procedure p1;
    begin
        ...
    end;
    là, ça fonctionne. Ici, la déclaration de p2 en "forward" est inutile.

    En fait, c'est l'équivalent des prototypes de fonctions du C.

    Pour le reste, je serai plus bref : je ne m'en souviens plus.

    Donc, je me la ferme.

  3. #3
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par ALT
    Pour Forward, pas de pb : ça signifie que la fonction est déclarée sur la ligne en question, mais elle est définie plus tard.
    Merci pour l'explication concernant forward, c'était très clair!

    Citation Envoyé par ALT
    Pour le reste, je serai plus bref : je ne m'en souviens plus.
    Bien vu, vaut mieux rien dire quand on s'en souvient plus!

    D'après ce que j'ai compris, je dirais que le mode PUBLIC dans la déclaration permet d'utiliser des fonctions, procédures ou variables définies dans d'autres modules.

    En tout cas, les explications pour les autres points sont les bienvenues.

    Merci

    Nicolas

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 055
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Es-tu bien sûr qu'il s'agit d'un code Turbo Pascal ?

    [EXTERN] ne correspond à aucune directive du Pascal standard, utilisée par la plupart des compilateurs, dont Turbo Pascal. La directive standard est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {$L CodeObjet}
    Function MachinChose; External;
    qui permet de lier des procédures ou fonctions compilées (par exemple en C ou en Assembleur) à part dans un fichier objet,

    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Function GlobalAlloc (Flags : Word; Bytes : LongInt) : THandle; 
         far; external 'KERNEL' index 15;
    qui permet de déclarer des procédures ou fonctions importées d'une dll.

    De même, bien que la directive PUBLIC existe en tant que telle (elle est utilisée pour définir une section publique au sein de la déclaration d'un objet), elle n'est jamais entourée de crochets comme dans ton code (erreur de syntaxe).

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par Alcatîz
    Es-tu bien sûr qu'il s'agit d'un code Turbo Pascal ?
    En fait, en essayant de fouiller dans de la vielle doc, apparemment microsoft pascal et borland turbo pascal étaient utilisés pour compile.
    Mais j'ai vu aussi quelques références à lex et yacc, je n'ai jamais utilisé ces outils mais peut être ont ils un role dans ces expressions...

    Bref pour l'analyse de ce code, je vais l'interpreter comme tel!

    Bonne soirée

  6. #6
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Bonjour,

    Si quelqu'un a déjà vu quelques unes de ces fonctions et connait leur sens, je suis prenneur pour une explication:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FUNCTION ALLHQQ (wants: WORD): WORD; EXTERNAL;
    FUNCTION ALLMQQ (wants: WORD): ADSMEM; EXTERNAL;
    FUNCTION DOSXQQ (command, parameter: WORD): BYTE; EXTERNAL;
    FUNCTION GetDTA: ADSMEM; EXTERNAL;
    FUNCTION GETUQQ (VAR f:FCBFQQ; len: WORD; dst: ADSMEM): WORD; EXTERNAL;
    FUNCTION PUTUQQ (VAR f:FCBFQQ; len: WORD; dst: ADSMEM): WORD; EXTERNAL;
    FUNCTION TICS: WORD; EXTERNAL;
    Par exemple une ligne que je retruve dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF DOSXQQ(11,0) <> 0 THEN WHILE DOSXQQ(6,255) <> 0 DO;
    De même pour la fonction WRD(20).

    Merci!

    Nicolas

  7. #7
    ALT
    ALT est déconnecté
    Membre Expert
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 382
    Par défaut
    À mon humble avis, si tu n'as pas l'implémentation (le code source) de ces fonctions, tu es mal barré.
    À moins de pouvoir en déduire le fonctionnement à partir d'essais successifs, d'une solide approche logique & d'une très grosse dose de courage.
    Car je suppose que la doc. dont tu disposes ne te donne aucun renseignement...

    Surtout que les noms des fonctions ne nous aident pas beaucoup (à la limite, ils les auraient nommées f1,f2,...f4873... ça aurait été à peu près aussi clair).

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 055
    Billets dans le blog
    2
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. [GD] Intallé mais fonction inconnue
    Par remyli dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/05/2006, 13h34
  2. Erreur 3388: fonction inconnue
    Par flukie dans le forum Access
    Réponses: 1
    Dernier message: 09/05/2006, 10h51
  3. Réponses: 2
    Dernier message: 20/02/2006, 13h54
  4. [Oracle] Me connecter !! prob de fonction inconnue
    Par Wormus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/02/2006, 10h39
  5. problème sur substring (fonction inconnue)
    Par nerick dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/12/2005, 15h46

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