summaryrefslogtreecommitdiff
path: root/h2pl/cbreak.pl
diff options
context:
space:
mode:
Diffstat (limited to 'h2pl/cbreak.pl')
-rw-r--r--h2pl/cbreak.pl34
1 files changed, 34 insertions, 0 deletions
diff --git a/h2pl/cbreak.pl b/h2pl/cbreak.pl
new file mode 100644
index 0000000000..422185eb7b
--- /dev/null
+++ b/h2pl/cbreak.pl
@@ -0,0 +1,34 @@
+$sgttyb_t = 'C4 S';
+
+sub cbreak {
+ &set_cbreak(1);
+}
+
+sub cooked {
+ &set_cbreak(0);
+}
+
+sub set_cbreak {
+ local($on) = @_;
+
+ require 'sizeof.ph';
+ require 'sys/ioctl.ph';
+
+ ioctl(STDIN,&TIOCGETP,$sgttyb)
+ || die "Can't ioctl TIOCGETP: $!";
+
+ @ary = unpack($sgttyb_t,$sgttyb);
+ if ($on) {
+ $ary[4] |= &CBREAK;
+ $ary[4] &= ~&ECHO;
+ } else {
+ $ary[4] &= ~&CBREAK;
+ $ary[4] |= &ECHO;
+ }
+ $sgttyb = pack($sgttyb_t,@ary);
+ ioctl(STDIN,&TIOCSETP,$sgttyb)
+ || die "Can't ioctl TIOCSETP: $!";
+
+}
+
+1;