[résolu] Les mystères du PAR: et du PRT:

4 sujets de 1 à 4 (sur un total de 4)

  • Gilloo

      #5020

      Coucou à tous.

      J’ai créé un device ieee1982.device en m’inspirant de lpr ;-) (d’Olaf Barthel) qui envoie tout ce qu’il reçoit à une tâche qui pour l’instant écrit les données reçues dans un fichier.

      J’utilise un patch qui détourne la fonction exec OpenDevice() en substituant le nom « parallel.device » par « ieee1282.device ».

      Si je lance la commande « copy toto par: », le programme me copie le fichier toto détourné. Jusque là tout va bien: il fait son boulot comme prévu.

      Si je lance « copy toto prt: » ca se bloque, je peux plus utiliser le par. Idem si je lance une impression depuis DPaint.

      En regardant de plus près, je reçois bien un ordre « OpenDevice »,

      j’alloue une unité, je sors bien de la fonction, mais je ne reçois pas de commande supplémentaire. le « printer.device » attend je ne sais quoi.

      :sweat: comment faire pour savoir ce que satané printer.device attend?

      J’ai fait une petite recherche dans aminet.

      Il y a une mine dans la mine: la collection Fred Fish et je trouve CMD de Carolyn Scheppner qui date de mai 1987. Avec le code source de la commande CMD! Mais tout ceci n’explique pas la réticence du printer.device…

      Amitoo

        #86145

        Une idée comme ça : ce serait pas le basculement de quelque signal correspondant à ACK ou Busy qu’il attend donc peut être une IRQ ?

        A500+ / A1200 / CD32 et... Jaguar

        Voxel

          #86146

          c’est surement ça :-)

          prt: (donc le printer.device) est en attente du signal printer online pour commencer à envoyer les données, pendant ce temps il stocke dans le buffer d’impression.

          si tu attends suffisament longtemps tu devrait avoir un requester printer timeout qui s’affiche :-)

          Gilloo

            #86147

            @all

            Bin non c’était pas un contrôle d’état d’imprimante…

            C’était simplement le truc qui fait la différence entre tâche et process. Le printer.device étant géré par une tâche, donc pas un process, on ne peut pas tracer BeginIO() ou OpenDevice() directement en écrivant dans un fichier, sinon on bloque la tâche appelante (débordement de pile et tutti quanti)

            J’ai contourné le problème en envoyant les traces à un process, créé par CreateNewProc.

            J’ai enfin mes traces et découvert un truc rigolo

            Si on copie par le par:, la taille du bloc maxi est de 64ko,

            donc la copie est rapide.

            Avec le prt:, la taille du bloc maxi est de 256 octets et ça rame comme pas possible… (AmigaDOS 3.1)

            Avant de clore ce fil j’ai une autre question:

            Comment utiliser CreateProc() en C pur et dur?

            CreateNewProc() c’est bien mais faut un 2.04 et plus pour l’utiliser. Y a-til d’autres moyen pour créer un process ?

            CreateTask(), la fonction lib qui fait exactement ce qu’il faut ! avec NewList() et AddTask() du coup la taille de mon device passe de 4500 octets à 2700 octets… :-D et fonctionne même en KS1.1

          4 sujets de 1 à 4 (sur un total de 4)

          • Vous devez être connecté pour répondre à ce sujet.

          Forums AmigaOS, MorphOS et AROS Développement [résolu] Les mystères du PAR: et du PRT:

          Amiga Impact