Simple.pm.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - User interface system
  3. #
  4. #  Copyright (c) 2006 OpenKore development team
  5. #
  6. #  This program is free software; you can redistribute it and/or modify
  7. #  it under the terms of the GNU General Public License as published by
  8. #  the Free Software Foundation; either version 2 of the License, or
  9. #  (at your option) any later version.
  10. #
  11. #  This program is distributed in the hope that it will be useful,
  12. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. #  GNU General Public License for more details.
  15. #########################################################################
  16. ##
  17. # MODULE DESCRIPTION: Simple console interface which polls stdin for input.
  18. package Interface::Console::Simple;
  19. use strict;
  20. use warnings;
  21. no warnings 'redefine';
  22. use Time::HiRes qw(usleep);
  23. use IO::Socket;
  24. use bytes;
  25. no encoding 'utf8';
  26. use Modules 'register';
  27. use Globals qw(%consoleColors);
  28. use Interface;
  29. use base qw(Interface);
  30. use I18N qw(UTF8ToString);
  31. use Utils::Unix;
  32. sub new {
  33. my $class = shift;
  34. binmode STDOUT;
  35. STDOUT->autoflush(0);
  36. return bless {}, $class;
  37. }
  38. sub getInput {
  39. my ($self, $timeout) = @_;
  40. my $line;
  41. my $bits;
  42. if ($timeout < 0) {
  43. my $done;
  44. while (!$done) {
  45. $bits = '';
  46. vec($bits, fileno(STDIN), 1) = 1;
  47. if (select($bits, undef, undef, 1) > 0) {
  48. $line = <STDIN>;
  49. $done = 1;
  50. }
  51. }
  52. } else {
  53. $bits = '';
  54. vec($bits, fileno(STDIN), 1) = 1;
  55. if (select($bits, undef, undef, $timeout) > 0) {
  56. $line = <STDIN>;
  57. }
  58. }
  59. if (defined $line) {
  60. $line =~ s/n//;
  61. $line = undef if ($line eq '');
  62. }
  63. $line = I18N::UTF8ToString($line) if (defined($line));
  64. return $line;
  65. }
  66. sub writeOutput {
  67. my ($self, $type, $message, $domain) = @_;
  68. my $code = Utils::Unix::getColorForMessage(%consoleColors, $type, $domain);
  69. print STDOUT $code;
  70. print STDOUT $message;
  71. print STDOUT Utils::Unix::getColor('reset');
  72. STDOUT->flush;
  73. }
  74. sub title {
  75. my ($self, $title) = @_;
  76. if ($title) {
  77. if (!defined($self->{title}) || $self->{title} ne $title) {
  78. $self->{title} = $title;
  79. if ($ENV{TERM} eq 'xterm' || $ENV{TERM} eq 'screen') {
  80. print STDOUT "e]2;";
  81. print $title;
  82. print "a";
  83. STDOUT->flush;
  84. }
  85. }
  86. } else {
  87. return $self->{title};
  88. }
  89. }
  90. 1;