[résolu] Les mystères du PAR: et du PRT:
4 sujets de 1 à 4 (sur un total de 4)
-
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…
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
@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… 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: