Hi all...
Well guys and gals, I jumped in at the deep end and found things that PERL cannot do by default.
Many tricky terminal escape codes are not catered for so I had to create workarounds.
One thing I searched for was this:
Passing perl variable to shell command
AND, @Neo this was top of the Google search list.
I thanked Chubler_XL for the post as it saved an awful lot of head scratching.
I might add that Python 2.0.x to the current 3.7.4 can do ALL of the escape codes that the shell can.
Right, I am now open to criticism just on this part alone...
I will include, ' arecord
' for ALSA systems and ' /dev/dsp
' for others. This is just a taster to see how convoluted PERL is...
#!/usr/bin/perl
# Audio Oscillograph, (uncalibrated AF Oscilloscope).
# NOTE: Many terminal escape codes are not supported, so workarounds ARE needed.
# Oscillograph.pl
use warnings;
use strict;
# Global variables...
my $horiz=9;
my $vert=9;
my $plot="";
# #########################################################
# Clear the screen and reset the terminal.
sub clrscn
{
my $clearscn=1;
print "\x1B[0m\x1Bc";
for($clearscn=1; $clearscn<=25; $clearscn=$clearscn+1)
{
print " \n";
}
system("/usr/bin/printf", "\x1B[1;1f");
}
# #########################################################
# Screen DISPLAY setup function. For a terminal size of 80 x 24.
sub display
{
# Set foreground and background graticule colours and foreground and background other window colours.
print "\x1B[H\x1B[0;36;44m +-------+-------+-------+---[\x1B[1;37;44mDISPLAY\x1B[0;36;44m]---+-------+-------+--------+
| | | | + | | | | \x1B[0;31;44mMAX\x1B[0;36;44m
| | | | + | | | |
| | | | + | | | |
\x1B[0;31;44m+ve\x1B[0;36;44m +-------+-------+-------+-------+-------+-------+-------+--------+
| | | | + | | | |
| | | | + | | | |
| | | | + | | | |
\x1B[1;32;44m0\x1B[0;36;44m +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+ \x1B[1;32;44mREF\x1B[0;36;44m
| | | | + | | | |
| | | | + | | | |
| | | | + | | | |
\x1B[0;30;44m-ve\x1B[0;36;44m +-------+-------+-------+-------+-------+-------+-------+--------+
| | | | + | | | |
| | | | + | | | |
| | | | + | | | |
| | | | + | | | | \x1B[0;30;44mMIN\x1B[0;36;44m
+-------+-------+-----[\x1B[1;37;44mAUDIO OSCILLOGRAPH\x1B[0;36;44m]-----+-------+--------+ \x1B[0m\n\n"
}
# #########################################################
# Plot the points in the terminal window.
sub plotter
{
for($horiz=9; $horiz<=72; $horiz=$horiz+1)
{
# Simulate an 8 bit grab and divide by 16 to give 4 bit depth. Add offset of 2 to allow
# for mssing the top graticule line...
$vert=int(rand(256/16)+2);
$plot="\x1B["."$vert".";"."$horiz"."f\x1B[1;37;44m*";
# NOTE: 'print "$plot";' does not work because '\x1B[v;hf' is not supported!
system("printf", "$plot");
}
}
# #########################################################
# Main loop.
clrscn;
while(1)
{
display;
plotter;
# The hard coded line below is not supported, use 'system("/usr/bin/printf", "\x1B[23;1f")' instead...
# print "\x1B[21;1f";
system("printf", "\x1B[21;1f\x1B[0mPress Ctrl-C to stop! ");
sleep(1);
}
Have fun shredding it... ;o)