Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1444 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  Ecrire sur l'imprimante.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ecrire sur l'imprimante.

n°2170786
Profil sup​primé
Posté le 11-01-2013 à 19:36:37  answer
 

Bonjour,
Je suis sur Gnu/Linux sur un compatible IBM PC, et je souhaite écrire du texte via une procédure qui écrit des unsigned_8 sur le port parallèle.
Je cherche la technique ad'hoc.
Dans un premier temps, je voudrais tester une conversion Integer to Unisgned_8 mais je ne sais pas comment faire.
 
Je sais que si j'envoie du texte brut avec un echo "Hello World"> /dev/lp0 ça écrit directement le texte.
 
 
J'ai testé ça :

Code :
  1. package Pp is
  2.  
  3.   LP1 : constant := 16#03BC#;
  4.   LP2 : constant := 16#0378#;
  5.   LP3 : constant := 16#0278#;
  6.   type Message_Type is (Data, Status, Ctrl);
  7. end Pp;


Code :
  1. with Interfaces;
  2.  
  3. generic
  4.  
  5.   LP : Interfaces.Unsigned_16;
  6. package Pp.Pp_Io is
  7.  
  8.   use Interfaces;
  9.  
  10.   procedure Put(Msg : in Message_Type; Value : in Unsigned_8);
  11.  
  12.   procedure Get(Msg : in Message_Type; Value : out Unsigned_8);
  13. end Pp.Pp_Io;


 

Code :
  1. with Interfaces.C;
  2. use interfaces;
  3.  
  4. with Pp.Ioperm, Pp.Pp_Io;
  5. use Pp;
  6.  
  7. procedure Main is
  8.  
  9.   package Lp_Io is new Pp.Pp_Io(Pp.LP2);
  10.  
  11.   Errno : C.Int := 0;
  12.  
  13.  
  14.   Hello : String := "bonjour monde !";
  15.  
  16.   Data : Unsigned_8;
  17.  
  18. begin
  19.   Errno := Pp.Ioperm.Ioperm(PP.LP2, 3, 1);
  20.   for I in 32..127 loop
  21.      Data := Unsigned_8(I);
  22.      Lp_Io.Put(Pp.Data, Data);
  23.   end loop;
  24.   Errno := Pp.Ioperm.Ioperm(PP.LP2, 3, 0);
  25. end Main;


 
 
Merci pour votre contribution.


Message édité par Profil supprimé le 29-01-2013 à 16:57:07
mood
Publicité
Posté le 11-01-2013 à 19:36:37  profilanswer
 

n°2173001
Profil sup​primé
Posté le 28-01-2013 à 23:24:52  answer
 

J'ai pas donné, mon code de pp-pp_io !
 

Code :
  1. with Ada.Text_Io, Ada.Integer_Text_Io;
  2. use Ada;
  3. with System.Machine_Code;
  4. use System.Machine_Code;
  5. package body Pp.Pp_Io is
  6.  
  7.   use Interfaces, Ascii;
  8.  
  9.   procedure Put(Msg : in Message_Type; Value : in Unsigned_8) is
  10.  
  11.   begin
  12.      
  13.      Asm("mov %1,   %%al" & LF & HT &
  14.            "mov %0,   %%dx" & LF & HT &
  15.            "out %%al, %%dx",
  16.          Inputs  => (Unsigned_16'Asm_Input ("g", LP+Message_Type'Pos(Msg)), Unsigned_8'Asm_Input ("a", Value)),
  17.          Volatile => True);
  18.   end Put;
  19.  
  20.   procedure Get(Msg : in Message_Type; Value : out Unsigned_8) is
  21.      
  22.   begin
  23.      
  24.      Asm("mov %1,%%dx" & LF & HT &
  25.            "in %%dx,%%al" & LF & HT &
  26.            "mov %0, %%al",
  27.          Inputs  => (Unsigned_16'Asm_Input ("g", LP+Message_Type'Pos(Msg))),
  28.          Outputs => Unsigned_8'Asm_Output ("=a", Value),
  29.          Volatile => True);
  30.   end Get;
  31. end Pp.Pp_Io;


 
Voilà, vous savez tout, j'y arrive po.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  Ecrire sur l'imprimante.

 

Sujets relatifs
[c][Lire et ecrire dans un tableau de caracteres en dimension 2]Impossible d'écrire dans un fichier avec une applet signée
ecrire un programme qui lit une suite de valeur à partir d'un entier n[Swing] Ecrire une string en noir cerclé de blanc
meilleur façon d'écrire une requête sqlMacro Ecrire Dossier et sous dossiers
écrire avec un thread en binaire ou en ascii ?ecrire un programme (pascal) qui calcule X puissance n ?!!!
[Divers/Ada] Ecrire pour un afficheur LCD sur Gnu/Linux et WindowsEcrire un nombre avec un séparateur décimal locale
Plus de sujets relatifs à : Ecrire sur l'imprimante.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR