X-Git-Url: http://git.shiar.net/descalc.git/blobdiff_plain/7d9af85556b0e64c70e3641764b7b49a306723f3..7db84757c6ba80836bc8c2cc9de326f16862a2cd:/06_disp_slang.pm diff --git a/06_disp_slang.pm b/06_disp_slang.pm new file mode 100644 index 0000000..4fa569d --- /dev/null +++ b/06_disp_slang.pm @@ -0,0 +1,61 @@ +# s-lang output for DCT, by Shiar + +# 1.11.0 200410291300 - + +use strict; +use warnings; + +use Term::Slang qw(:common :screen :term :CONSTANTS); + +push @{$hook{init}}, sub { + SLtt_get_terminfo and exit; + SLang_init_tty(-1, 0, 1); + SLsmg_init_smg; + + END { SLsmg_reset_smg; SLang_reset_tty; } # shutdown display system + + # where are $SLtt_Screen_Rows and $SLtt_Screen_Cols? + ($set{height}, $set{width}) = SLtt_get_screen_size; + $set{height} -= 2; +}; # init + +push @{$hook{showerror}}, sub { + my $error = shift; + SLsmg_draw_box(0, 0, 3, length($error)+4); + SLsmg_gotorc(1, 1); + SLsmg_write_string(" $error "); + SLsmg_refresh; + + ReadKey; # wait for confirm + 1 while defined ReadKey(-1); # clear key buffer +}; # showerror + +push @{$hook{showstack}}, sub { + for (0..@stack-1) { + SLsmg_gotorc($set{height}-$_, 1); + SLsmg_write_string("$_: ".showval($stack[$_], $set{base})); # prompt + SLsmg_erase_eol; + } # show stack + SLsmg_gotorc($set{height}-@stack, 1); + SLsmg_erase_eol; +}; # showstack + +push @{$hook{refresh}}, sub { + SLsmg_cls; + SLsmg_gotorc($set{height}+1, 0); + SLsmg_write_string("> "); # prompt +}; # refresh + +push @{$hook{showentry}}, sub { + SLsmg_gotorc($set{height}+1, 2); + SLsmg_write_string($_[0]); + SLsmg_erase_eol; + SLsmg_refresh; +}; # showentry + +return { + author => "Shiar", + title => "slang output", + version => "1.11", +}; +