Ecrire sur l'imprimante.

Ecrire sur l'imprimante. - Ada - Programmation

Marsh Posté le 11-01-2013 à 19:36:37    

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
Reply

Marsh Posté le 11-01-2013 à 19:36:37   

Reply

Marsh Posté le 28-01-2013 à 23:24:52    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed