use strict; use warnings; sub usage () { print STDERR "Usage $0 \n"; exit(8); } binmode(STDIN); binmode(STDOUT); my $eol = "\n"; if ($#ARGV != 0){ usage(); } if ($ARGV[0] eq 'linux') { $eol = "\n"; } elsif ($ARGV[0] eq 'unix') { $eol = "\n"; } elsif ($ARGV[0] eq 'dos') { $eol = "\r\n"; } elsif ($ARGV[0] eq 'apple') { $eol = "\r"; } elsif ($ARGV[0] eq 'mac') { $eol = "\r"; } else { usage(); } while (1) { my $ch; # Character from input # Read a character my $status = sysread(STDIN, $ch, 1); if ($status <= 0){ last; } if ($ch eq "\n"){ syswrite(STDOUT, $eol); next; } if ($ch eq "\r"){ my $next_ch; # Check for \r\n $status = sysread(STDIN, $next_ch, 1); if ($status <= 0){ syswrite(STDOUT, $eol); last; } # Check for \r\n if ($next_ch eq "\n"){ syswrite(STDOUT, $eol); next; } syswrite(STDOUT, $eol); $ch = $next_ch; } syswrite(STDOUT, $ch); }