
[31m--    Ultrason is small Virtual Composer for MIDI instruments.[m
[31m--    Copyright (C) 2015 2018 M. De Girardi[m

[31m--    This program is free software; you can redistribute it and/or modify[m
[31m--    it under the terms of the GNU General Public License as published by[m
[31m--    the Free Software Foundation; either version 2 of the License, or[m
[31m--    (at your option) any later version.[m

[31m--    This program is distributed in the hope that it will be useful,[m
[31m--    but WITHOUT ANY WARRANTY; without even the implied warranty of[m
[31m--    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the[m
[31m--    GNU General Public License for more details.[m

[31m--    You should have received a copy of the GNU General Public License[m
[31m--    along with this program; if not, write to the Free Software[m
[31m--    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA[m
[31m-----------------------------------------------------------------[m
[31m-- Authors     : E. Sens                                       --[m
[31m-- Date        : Thu Feb  1 18:19:58 CET 2018                  --[m
[31m-- Version     : 7.0.5                                         --[m
[31m-- Description : Virtual Composer for MIDI instruments written --[m
[31m--               with Ada programming language.                --[m
[31m-- Ultrason version 6 : This version accept multiple files     --[m
[31m-- to open the main application in autoplay and/or in loop.    --[m
[31m--                                                             --[m
[31m-- Dependencies : Ada, Gnat, GtkAda 2016, portmidi PragmARC.   --[m
[31m-----------------------------------------------------------------[m
[31m-- Accept -i -v -h -a -l switchs and then multiple filenames.  --[m
[31m-- Where :[m
[31m--           "-i" switch is ignore indicator for first device. --[m
[31m--           "-v" switch is verbose console messages. not used.--[m
[31m--           "-h" switch is help message printing en exit.     --[m
[31m--           "-a" switch is auto_play indicator.               --[m
[31m--           "-l" switch is in_loop indicator for play list.   --[m
[31m-----------------------------------------------------------------[m
[31m--                                                             --[m
[31m--                                                             --[m
[31m--                                       for GNU/Linux         --[m
[31m--                                                             --[m
[31m--                 Ultrason 7.x.x....                 and      --[m
[31m--                                                             --[m
[31m--                                      Microsoft Windows      --[m
[31m--                                                             --[m
[31m--                                                             --[m
[31m-----------------------------------------------------------------[m

[01;34mwith[m Glib[31m;[m                              [01;34muse[m Glib[31m;[m

[01;34mwith[m GNAT[31m.[mCommand_Line[31m;[m                 [01;34muse[m GNAT[31m.[mCommand_Line[31m;[m

[01;34mwith[m Libsens[31m.[mExceptions[31m;[m                [01;34muse[m Libsens[31m.[mExceptions[31m;[m
[01;34mwith[m Libsens[31m.[mVirtual[31m;[m                   [01;34muse[m Libsens[31m.[mVirtual[31m;[m
[01;34mwith[m Libsens[31m.[mVirtual[31m.[mWork_Class[31m;[m        [01;34muse[m Libsens[31m.[mVirtual[31m.[mWork_Class[31m;[m
[01;34mwith[m Libsens[31m.[mApplications[31m.[mGM_Interface[31m;[m [01;34muse[m Libsens[31m.[mApplications[31m.[mGm_Interface[31m;[m

[01;34mwith[m Gtk[31m.[mMain[31m;[m                          [01;34muse[m Gtk[31m.[mMain[31m;[m

[01;34mwith[m Text_Io[31m;[m                           [01;34muse[m Text_Io[31m;[m

[01;34mwith[m Libsens[31m.[mArch[31m;[m                      [01;34muse[m Libsens[31m;[m

[01;34mprocedure[m Ultrason [01;34mis[m
   
   
   
   Gm_Int    [31m:[m Gm_Interface_Pointer[31m;[m
   
   Error     [31m:[m Gint [31m:=[m [35m0[m[31m;[m
   
   
   Auto_Play [31m:[m [32mBoolean[m [31m:=[m False[31m;[m   
   In_Loop   [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   
   Verbose   [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   Help      [31m:[m [32mBoolean[m [31m:=[m False[31m;[m   
   Ignore    [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   
   Work_Id   [31m:[m Natural [31m:=[m [35m0[m[31m;[m
   Works     [31m:[m [01;34maliased[m Work_Array[31m;[m
[01;34mbegin[m   
   
   [01;34mbegin[m
      
      [01;34mloop[m
	 [01;34mcase[m [01;30mGetopt[m [31m([m[31m"i a l v h"[m[31m)[m [01;34mis[m
	    [31m-- Accept :=[m
	    [31m-- i ignore device(s).[m
	    [31m-- v verbose ;[m
	    [31m-- h help ;[m
	    [31m-- a auto play ;[m
	    [31m-- l in loop ;[m
	    [01;34mwhen[m ASCII[31m.[mNUL [31m=>[m [01;34mexit[m[31m;[m
	    [01;34mwhen[m [31m'i'[m [31m=>[m
	       [01;34mif[m Full_Switch [31m=[m [31m"i"[m [01;34mthen[m
		  [01;30mPut_Line[m [31m([m[31m"Got ignore"[m[31m);[m
		  ignore[31m:=[m True[31m;[m
	       [01;34mend[m [01;34mif[m[31m;[m
	    [01;34mwhen[m [31m'a'[m [31m=>[m
	       [01;34mif[m Full_Switch [31m=[m [31m"a"[m [01;34mthen[m
		  [01;30mPut_Line[m [31m([m[31m"Got auto play"[m[31m);[m
		  Auto_Play [31m:=[m True[31m;[m
	       [01;34mend[m [01;34mif[m[31m;[m
	    [01;34mwhen[m [31m'l'[m [31m=>[m
	       [01;34mif[m Full_Switch [31m=[m [31m"l"[m [01;34mthen[m
		  In_Loop [31m:=[m True[31m;[m
		  [01;30mPut_Line[m [31m([m[31m"Got in loop"[m[31m);[m
	       [01;34mend[m [01;34mif[m[31m;[m
	    [01;34mwhen[m [31m'v'[m [31m=>[m		  
	       [01;34mif[m Full_Switch [31m=[m [31m"v"[m [01;34mthen[m
		  Verbose [31m:=[m True[31m;[m
		  [01;30mPut_Line[m [31m([m[31m"Got verbose"[m[31m);[m
	       [01;34mend[m [01;34mif[m[31m;[m
	    [01;34mwhen[m [31m'h'[m [31m=>[m 
	       [01;34mif[m Full_Switch [31m=[m [31m"h"[m [01;34mthen[m
		  Help [31m:=[m True[31m;[m
		  [01;30mPut_Line[m [31m([m[31m"Got help"[m[31m);[m
	       [01;34mend[m [01;34mif[m[31m;[m
	       [31m-- Put_Line ("Got b + " & Parameter);[m
	    [01;34mwhen[m [01;34mothers[m [31m=>[m
	       [01;34mraise[m Program_Error[31m;[m [31m-- cannot occur[m
	 [01;34mend[m [01;34mcase[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      
      [01;34mif[m Help [01;34mthen[m	       
	 [01;30mPut_Line[m[31m([m[31m"ultrason : usage : ultarson [ -a ] [ -l ] [ -i ] [ -h ] [ -v ] [Filename(s)...]"[m[31m);[m
	 Arch[31m.[mFinalize[31m;[m
	 [01;34mreturn[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m	
      
      [01;34mdeclare[m
	 
      [01;34mbegin[m
	 
	 [01;34mloop[m
	    [01;34mdeclare[m
	       S [31m:[m [01;34mconstant[m [32mString[m [31m:=[m [01;30mGet_Argument[m [31m([mDo_Expansion [31m=>[m True[31m);[m
	    [01;34mbegin[m	 
	       [01;34mexit[m [01;34mwhen[m S'Length [31m=[m [35m0[m[31m;[m
	       [01;30mPut_Line[m [31m([m[31m"Adding work for "[m [31m&[m S[31m);[m
	       [01;30mWorks[m[31m([m[01;30mWork_Num[m[31m([mWork_Id[31m+[m[35m1[m[31m))[m [31m:=[m [01;34mnew[m Work_Record[31m;[m
	       [01;30mWorks[m[31m([m[01;30mWork_Num[m[31m([mWork_Id[31m+[m[35m1[m[31m)).[m[01;30mInitialize[m[31m([m[01;30mWork_Num[m[31m([mWork_Id[31m+[m[35m1[m[31m),[m S[31m);[m
	       Work_Id [31m:=[m Work_Id [31m+[m [35m1[m[31m;[m
	    [01;34mend[m[31m;[m   
	 [01;34mend[m [01;34mloop[m[31m;[m
	 
      [01;34mend[m[31m;[m
   [01;34mexception[m
      [01;34mwhen[m Invalid_Switch    [31m=>[m [01;30mPut_Line[m [31m([m[31m"Invalid Switch "[m [31m&[m Full_Switch[31m);[m
	 [01;34mraise[m Spec_Error[31m;[m
      [01;34mwhen[m Invalid_Parameter [31m=>[m [01;30mPut_Line[m [31m([m[31m"No parameter for "[m [31m&[m Full_Switch[31m);[m
	 [01;34mraise[m Spec_Error[31m;[m
   [01;34mend[m[31m;[m
   
   
   [01;34mif[m Work_Id [31m=[m [35m0[m [01;34mthen[m
      [01;30mWorks[m[31m([m[01;30mWork_Num[m[31m([mWork_Id[31m+[m[35m1[m[31m))[m [31m:=[m [01;34mnew[m Work_Record[31m;[m
      [01;30mWorks[m[31m([m[01;30mWork_Num[m[31m([mWork_Id[31m+[m[35m1[m[31m)).[m[01;30mInitialize[m[31m([m[01;30mWork_Num[m[31m([mWork_Id[31m+[m[35m1[m[31m),[m [31m""[m[31m);[m      
      Work_Id [31m:=[m Work_Id [31m+[m [35m1[m[31m;[m     
   [01;34mend[m [01;34mif[m[31m;[m
         
   
   
   [01;30mPut_Line[m[31m([m[31m"Program running..."[m[31m);[m
   
   [01;34mif[m [01;34mnot[m Gtk[31m.[mMain[31m.[mInit_Check [01;34mthen[m
      [01;34mreturn[m[31m;[m
   [01;34mend[m [01;34mif[m[31m;[m
   [01;30mPut_Line[m[31m([m[31m"Gtk Ok !"[m[31m);[m   
   [01;30mInitialize[m[31m([mGm_Int[31m,[m Error[31m,[m Works'[01;34maccess[m[31m,[m Verbose[31m,[m Auto_Play[31m,[m In_Loop[31m,[m Help[31m,[m Ignore[31m);[m
   
   [01;34mif[m Error [31m/=[m [35m0[m [01;34mthen[m
      
      [01;30mPut_Line[m[31m([m[31m"Gm_interface error ="[m [31m&[m Gint'[01;30mImage[m[31m([mError[31m));[m
      
   [01;34mend[m [01;34mif[m[31m;[m   
   
   [01;30mPut_Line[m[31m([m[31m"Gm_interface terminated succefully."[m[31m);[m
   
[01;34mexception[m
   [01;34mwhen[m Spec_Error [31m=>[m
      Arch[31m.[mFinalize[31m;[m
[01;34mend[m Ultrason[31m;[m
