So far this is all commonplace.
The nice feature is that when the program starts (actually, when the package is elaborated) the package checks all the command line arguments, and if it finds -d or -D among them, it automagically sets on the debug printing.
It is nice for quick and dirty work, and may be useful for students who are not familiar with Ada.Command_Line.
-- Purpose: Implements debug print routines. If a program that with's this package, has a "-d"/"-D" command line arg, -- debug printing will be active. otherwise debug output is suppressed. User code can switch between modes. -- Exported Routines: -- * Put(Char/String) - Output debug info -- * Quite/Verobse - Switch mode ---------------------------------------------------------------------------------------------------------------------------- -- Log: -- 10/7/2000 - First hack at it ---------------------------------------------------------------------------------------------------------------------------- package Debug is procedure Put(c:character); procedure Put(s:string); procedure Quiet; procedure Verbose; end; with Ada.Text_Io; with Ada.Command_Line; use Ada.Command_Line; package body Debug is Active:Boolean:=FALSE; --------- -- Put -- --------- procedure Put (c:character) is begin if Active then Ada.Text_Io.Put(c); end if; end Put; pragma Inline(put); --------- -- Put -- --------- procedure Put (s:string) is begin if Active then Ada.Text_Io.Put(s); end if; end Put; pragma Inline(Put); ----------- -- Quiet -- ----------- procedure Quiet is begin Active:=FALSE; end Quiet; ------------- -- Verbose -- ------------- procedure Verbose is begin Active:=TRUE; end Verbose; begin for i in 1..Argument_Count loop declare Arg:String:=Argument(i); begin if Arg'length=2 then if (Arg="-d") or (Arg="-D") then Verbose; end if; end if; end; end loop; end Debug;