package Libsens.Virtual.Plugins is      
   
   
   --type Abstract_Plugin_Class is abstract tagged limited null record;
   type Abstract_Plugin_Class is abstract tagged null record;
   
   procedure Print(Filename : in String; Plug : in Abstract_Plugin_Class) is abstract;   

   
   
   
   type Plugin_Class(Class : Plugin_Enum) is new Abstract_Plugin_Class with
      record
	 Name      : access String := new String ' ("");
	 Id        : Plugin_Num := 1;	 	 
	 Device_ID : Device_Num := 1;
	 Ch_ID     : Channel_Num := 1;
	 
	 Form_ID   : Form_Index_Type := 1;
	 Cat_ID    : Category_Index_Type := 1;
	 
	 Opened    : Boolean := False;
	 Printed   : Boolean := False;
	 Mutted    : Boolean := False;	 
      end record;
   
   procedure Initialize (Plug      : in out Plugin_Class;
			 Id        : in Plugin_num;
			 Device    : in Device_Num;
			 Ch        : in Channel_Num;
			 Form      : in Form_Index_Type;
			 Cat       : in Category_Index_Type);
   
   procedure Set_Id(Plug       : in out Plugin_Class;
		    Id        : in Plugin_Num);
   
   function Get_Id(Plug        : in Plugin_Class) return Plugin_Num;
   
   procedure Set_Device(Plug       : in out Plugin_Class;
			Device    : in Device_Num);
   
   function Get_Device(Plug        : in Plugin_Class) return Device_Num;
   
   procedure Set_Channel(Plug       : in out Plugin_Class;
			 Ch        : in Channel_Num);
   
   function Get_Channel(Plug        : in Plugin_Class) return Channel_Num;
   
   procedure Set_Form(Plug       : in out Plugin_Class;
		      Form      : in Form_Index_Type);
   
   function Get_Form(Plug        : in Plugin_Class) return Form_Index_Type;
   
   
   procedure Set_Category(Plug       : in out Plugin_Class;
			  Cat       : in Category_Index_Type);
   
   function Get_Category(Plug        : in Plugin_Class) return Category_Index_Type;
   
   procedure Print (Filename : in String; Plug : in Plugin_Class);      
   
end Libsens.Virtual.Plugins;