colour_prompt.rb revision 290012
1184610Salfred# ==========================================
2184610Salfred#   Unity Project - A Test Framework for C
3184610Salfred#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
4184610Salfred#   [Released under MIT License. Please refer to license.txt for details]
5184610Salfred# ========================================== 
6184610Salfred
7184610Salfredif RUBY_PLATFORM =~/(win|w)32$/
8184610Salfred	begin
9184610Salfred		require 'Win32API'
10184610Salfred	rescue LoadError
11184610Salfred		puts "ERROR! \"Win32API\" library not found"
12184610Salfred		puts "\"Win32API\" is required for colour on a windows machine"
13184610Salfred		puts "  try => \"gem install Win32API\" on the command line"
14184610Salfred		puts
15184610Salfred	end
16184610Salfred	# puts
17184610Salfred  # puts 'Windows Environment Detected...'
18184610Salfred	# puts 'Win32API Library Found.'
19184610Salfred	# puts
20184610Salfredend
21184610Salfred
22184610Salfredclass ColourCommandLine
23184610Salfred  def initialize
24184610Salfred    if RUBY_PLATFORM =~/(win|w)32$/  
25184610Salfred      get_std_handle = Win32API.new("kernel32", "GetStdHandle", ['L'], 'L')
26184610Salfred      @set_console_txt_attrb =
27184610Salfred      Win32API.new("kernel32","SetConsoleTextAttribute",['L','N'], 'I')
28184610Salfred      @hout = get_std_handle.call(-11)
29184610Salfred    end
30184610Salfred  end
31184610Salfred  
32184610Salfred  def change_to(new_colour)
33184610Salfred    if RUBY_PLATFORM =~/(win|w)32$/
34184610Salfred      @set_console_txt_attrb.call(@hout,self.win32_colour(new_colour))
35190174Sthompsa    else
36187170Sthompsa	  	"\033[30;#{posix_colour(new_colour)};22m"
37184610Salfred	 	end
38184610Salfred  end
39184610Salfred  
40184610Salfred  def win32_colour(colour)
41184610Salfred    case colour
42184610Salfred      when :black then 0  
43184610Salfred      when :dark_blue then 1
44184610Salfred      when :dark_green then 2
45184610Salfred      when :dark_cyan then 3
46184610Salfred      when :dark_red then 4
47184610Salfred      when :dark_purple then 5
48184610Salfred      when :dark_yellow, :narrative then 6
49184610Salfred      when :default_white, :default, :dark_white then 7
50184610Salfred      when :silver then 8
51184610Salfred      when :blue then 9
52184610Salfred      when :green, :success then 10
53184610Salfred      when :cyan, :output then 11
54184610Salfred      when :red, :failure then 12
55184610Salfred      when :purple then 13
56184610Salfred      when :yellow then 14
57184610Salfred      when :white then 15
58184610Salfred      else
59184610Salfred        0
60184610Salfred    end
61184610Salfred  end
62184610Salfred	
63184610Salfred	def posix_colour(colour)
64184610Salfred	  case colour
65184610Salfred      when :black then 30  
66184610Salfred      when :red, :failure then 31
67184610Salfred      when :green, :success then 32
68184610Salfred			when :yellow then 33
69184610Salfred      when :blue, :narrative then 34
70184610Salfred      when :purple, :magenta then 35
71184610Salfred      when :cyan, :output then 36
72184610Salfred      when :white, :default_white, :default then 37
73184610Salfred      else
74184610Salfred        30
75184610Salfred    end
76184610Salfred  end
77184610Salfred	
78184610Salfred  def out_c(mode, colour, str)
79184610Salfred    case RUBY_PLATFORM
80184610Salfred			when /(win|w)32$/
81184610Salfred			  change_to(colour)
82184610Salfred				 $stdout.puts str if mode == :puts
83184610Salfred				 $stdout.print str if mode == :print
84184610Salfred			  change_to(:default_white)
85184610Salfred			else
86184610Salfred				$stdout.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts
87184610Salfred				$stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print
88184610Salfred		end			
89184610Salfred  end
90184610Salfredend # ColourCommandLine
91184610Salfred
92184610Salfreddef colour_puts(role,str)  ColourCommandLine.new.out_c(:puts, role, str)  end
93184610Salfreddef colour_print(role,str) ColourCommandLine.new.out_c(:print, role, str) end
94184610Salfred
95184610Salfred