X-Git-Url: https://git.distorted.org.uk/~mdw/zx-fizzbuzz/blobdiff_plain/f97b241f1bf18496ca48191aa509abb796f76267..79f866505582c4e8e6e7ead838bdb7bdc3c31396:/tapify diff --git a/tapify b/tapify new file mode 100755 index 0000000..79adf5b --- /dev/null +++ b/tapify @@ -0,0 +1,33 @@ +#! /usr/bin/perl + +use autodie; + +sub intify ($) { + my ($n) = @_; + if ($n =~ /^0/) { $n = oct $n; } + return $n; +} + +sub frame ($$) { + my ($flag, $d) = @_; + my $a = $flag; + for (my $i = 0; $i < length $d; $i++) { $a ^= ord substr $d, $i, 1; } + return pack("S< C", 2 + length $d, $flag) . $d . chr($a); +} + +@ARGV == 4 or die "usage: $0 TY NAME P1 P2"; +my ($ty, $name, $p1, $p2) = @ARGV; + +my $body = ""; +READ: for (;;) { + sysread STDIN, my $buf, 4096; + last READ unless length $buf; + $body .= $buf; +} + +my $tap = ""; +$tap .= frame 0, pack "C A10 S< S< S<", + $ty, $name, length $body, intify $p1, intify $p2; +$tap .= frame 255, $body; + +syswrite STDOUT, $tap;