summaryrefslogtreecommitdiff
path: root/h2pl/cbreak2.pl
diff options
context:
space:
mode:
Diffstat (limited to 'h2pl/cbreak2.pl')
-rw-r--r--h2pl/cbreak2.pl33
1 files changed, 33 insertions, 0 deletions
diff --git a/h2pl/cbreak2.pl b/h2pl/cbreak2.pl
new file mode 100644
index 0000000000..8ac55a3497
--- /dev/null
+++ b/h2pl/cbreak2.pl
@@ -0,0 +1,33 @@
+$sgttyb_t = 'C4 S';
+
+sub cbreak {
+ &set_cbreak(1);
+}
+
+sub cooked {
+ &set_cbreak(0);
+}
+
+sub set_cbreak {
+ local($on) = @_;
+
+ require 'sys/ioctl.pl';
+
+ 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;