git @ Cat's Eye Technologies Ypsilax / 9510474
Clean up the module-loading code in Console::Virtual. catseye 12 years ago
1 changed file(s) with 23 addition(s) and 38 deletion(s). Raw diff Collapse all Expand all
00 # Console::Virtual.pm - unbuffered-input/addressed-display layer
1 # v2007.1122 Chris Pressey, Cat's Eye Technologies
1 # v2007.1122-YPSILAXDEV Chris Pressey, Cat's Eye Technologies
22
33 # Copyright (c)2003-2007, Chris Pressey, Cat's Eye Technologies.
44 # All rights reserved.
4747
4848 BEGIN
4949 {
50 my $c;
51 my $fc = 0; # found Curses.pm?
52 my $fs = 0; # found Term::Screen?
53 my $fp = 0; # found POSIX.pm?
54 my $ft = 0; # found $TERM and /etc/termcap?
55 foreach $c (@INC)
50 my $found_curses = 0; # found Curses.pm?
51 my $found_term_screen = 0; # found Term::Screen?
52 my $found_posix = 0; # found POSIX.pm?
53 my $found_termcap = 0; # found $TERM and /etc/termcap?
54 foreach my $path (@INC)
5655 {
57 $fc = 1 if -r "$c/Curses.pm";
58 $fs = 1 if -r "$c/Term/Screen.pm";
59 $fp = 1 if -r "$c/POSIX.pm";
56 $found_curses = 1 if -r "$path/Curses.pm";
57 $found_term_screen = 1 if -r "$path/Term/Screen.pm";
58 $found_posix = 1 if -r "$path/POSIX.pm";
6059 }
61 $ft = $ENV{TERM} && -r "/etc/termcap";
60 $found_termcap = $ENV{TERM} && -r "/etc/termcap";
6261 $| = 1;
6362
6463 # Determine raw input module to use.
6766
6867 if (defined $setup{input})
6968 {
70 require "Console/Input/$setup{input}.pm";
7169 }
72 elsif ($fc)
70 elsif ($found_curses)
7371 {
74 require Console::Input::Curses;
7572 $setup{input} = 'Curses';
7673 }
7774 elsif ($^O eq 'MSWin32')
7875 {
79 require Console::Input::Win32;
8076 $setup{input} = 'Win32';
8177 }
82 elsif ($fs)
78 elsif ($found_term_screen)
8379 {
84 require Console::Input::Screen;
8580 $setup{input} = 'Screen';
8681 }
87 elsif ($fp)
82 elsif ($found_posix)
8883 {
89 require Console::Input::POSIX;
9084 $setup{input} = 'POSIX';
9185 } else
9286 {
9387 warn "Warning! Raw input probably not available on this '$^O' system.\n";
94 require Console::Input::Teletype;
9588 $setup{input} = 'Teletype';
9689 }
90 require "Console/Input/$setup{input}.pm";
9791
9892 # Determine screen-addressed output method to use.
9993 # This can be pre-set by the calling code
10195
10296 if (defined $setup{display})
10397 {
104 require "Console/Display/$setup{display}.pm";
10598 }
106 elsif ($fc)
99 elsif ($found_curses)
107100 {
108 require Console::Display::Curses;
109101 $setup{display} = 'Curses';
110102 }
111103 elsif ($^O eq 'MSWin32')
112104 {
113 require Console::Display::Win32;
114105 $setup{display} = 'Win32';
115106 }
116 elsif ($fs)
107 elsif ($found_term_screen)
117108 {
118 require Console::Display::Screen;
119109 $setup{display} = 'Screen';
120110 }
121 elsif ($ft)
111 elsif ($found_termcap)
122112 {
123 require Console::Display::Tput;
124113 $setup{display} = 'Tput';
125114 } else
126115 {
127116 warn "Addressable screen must be emulated on this '$^O' system";
128 require Console::Display::Teletype;
129117 $setup{display} = 'Teletype';
130118 }
119 require "Console/Display/$setup{display}.pm";
131120
132121 # 2001.01.27 CAP
133122 # Determine color module to use.
136125
137126 if (defined $setup{color})
138127 {
139 require "Console/Color/$setup{color}.pm";
140128 }
141 elsif ($fc)
129 elsif ($found_curses)
142130 {
143 require Console::Color::Curses;
144131 $setup{color} = 'Curses';
145132 }
146133 elsif ($^O eq 'MSWin32')
147134 {
148 require Console::Color::Win32;
149135 $setup{color} = 'Win32';
150136 }
151 elsif ($fs)
137 elsif ($found_term_screen)
152138 {
153 # require Console::Color::Screen; # TODO! needs to be written
154 require Console::Color::ANSI16; # not a very general solution
155 $setup{color} = 'ANSI16';
139 # $setup{color} = 'Screen'; # TODO! needs to be written
140 $setup{color} = 'ANSI16'; # not a very general solution
156141 }
157142 else
158143 {
159 require Console::Color::Mono;
160144 $setup{color} = 'Mono';
161145 }
146 require "Console/Color/$setup{color}.pm";
162147 }
163148
164149 1;