require "narray"
if /cygwin|mingw/ =~ RUBY_PLATFORM
  begin
    require "glib2"
  rescue LoadError
  end
end
require "numru/dcl_raw"
module NumRu
    module DCL

      #<<< private functions >>>

      def not_nary( na )
	if defined?(NArrayMiss)
	  !na.is_a?(NArray) && !na.is_a?(NArrayMiss)
	else
	  !na.is_a?(NArray)
	end
      end
      module_function :not_nary
      private_class_method :not_nary

      #<<< ??p(set|stx|get) >>>

      %w!gl sl sg uc ud ue ug ul um uu uz!.each do |pkg|
	 %w!set stx!.each do |set|
	    eval <<-EOS
	       def #{pkg}p#{set}( name, value )
		  case name
		  when /^l/i
		     DCL.#{pkg}l#{set}(name,value)
		  when /^[i-n]/i
		     DCL.#{pkg}i#{set}(name,value)
		  else
		     DCL.#{pkg}r#{set}(name,value)
		  end
	       end
	       module_function :#{pkg}p#{set}
	    EOS
	 end
	 eval <<-EOS
	    def #{pkg}pget( name )
	       case name
	       when /^l/i
		  DCL.#{pkg}lget(name)
	       when /^[i-n]/i
		  DCL.#{pkg}iget(name)
	       else
		  DCL.#{pkg}rget(name)
	       end
	    end
	    module_function :#{pkg}pget
	 EOS
      end

      %w!us!.each do |pkg|
	 %w!set stx!.each do |set|
	    eval <<-EOS
	       def #{pkg}p#{set}( name, value )
		  case name
		  when /^c/i
		     DCL.#{pkg}c#{set}(name,value)
		  when /^l/i
		     DCL.#{pkg}l#{set}(name,value)
		  when /^[i-n]/i
		     DCL.#{pkg}i#{set}(name,value)
		  else
		     DCL.#{pkg}r#{set}(name,value)
		  end
	       end
	       module_function :#{pkg}p#{set}
	    EOS
	 end
	 eval <<-EOS
	    def #{pkg}pget( name )
	       case name
	       when /^c/i
		  DCL.#{pkg}cget(name)
	       when /^l/i
		  DCL.#{pkg}lget(name)
	       when /^[i-n]/i
		  DCL.#{pkg}iget(name)
	       else
		  DCL.#{pkg}rget(name)
	       end
	    end
	    module_function :#{pkg}pget
	 EOS
      end

      @@sw_char_params = [/^WSNAME/i,/^FONT/i,/^CL2TN$/i,/^FNAME$/i,/^TITLE$/i,
	    /^CLRMAP$/i,/^LPR$/i]
      %w!set stx!.each do |set|
         eval <<-EOS
	    def swp#{set}(name, value)
	       case name
	       when *@@sw_char_params
		  DCL.swl#{set}(name,value)
	       when /^l/i
		  DCL.swl#{set}(name,value)
	       when /^[i-n]/i
		  DCL.swi#{set}(name,value)
	       else
		  DCL.swr#{set}(name,value)
	       end
	    end
	    module_function :swp#{set}
	 EOS
      end
      def swpget( name )
	 case name
	 when *@@sw_char_params
	    DCL.swcget(name)
	 when /^l/i
	    DCL.swlget(name)
	 when /^[i-n]/i
	    DCL.swiget(name)
	 else
	    DCL.swrget(name)
	 end
      end
      module_function :swpget


      #<<< to eliminate array length arguments >>>

