Linux Format forums Forum Index Linux Format forums
Help, discussion, magazine feedback and more
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

A pseudo-GUI for a new shell project...
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Linux Format forums Forum Index -> Programming
View previous topic :: View next topic  
Author Message
Bazza
LXF regular


Joined: Sat Mar 21, 2009 11:16 am
Posts: 1474
Location: Loughborough

PostPosted: Sun Mar 23, 2014 9:34 pm    Post subject: A pseudo-GUI for a new shell project... Reply with quote

Hi all...

Would any of you care to give this demo a workout...

It does NOTHING at the moment but is a pseudo-GUI using terminal codes. It is intended as a fully functional fixed frequency LF stereo function generator.

The A, B, C and D keys shift the cursor and ENTER will quit the program. The ENTER key will become a psuedo-LMB in due course but ATM it just quits the code.

The Cursor keys work the same for OSX but I have no idea if a multitude of Linux flavours will work... This is where you guys come in...

The bottom of the window updates when the cursor movement stops.

Thanks in advance...

EDIT: 23-03-2014, 23:05

Changed all foreground values of 97 to 37...

2nd EDIT: 24-03-2014, 9:56

Use "Q" to quit and added a small piece of extra code...

Code:
#!/bin/bash
# Function_Generator.sh
# This is a GUI style DEMO only and only tested on OSX 10.7.5, default bash terminal.
# $VER: Function_Generator.sh_Version_0.00.00_(C)2014_B.Walker_G0LCU.

# Variables...
ifs_str="$IFS"
ver="0.00.00"
# Reusable variables...
x=0
y=0
n=0
char=" "
text="(C)2014, B.Walker, G0LCU."
arr=$(text)
# Specific variables...
button_text="Not used yet."
cursor_x=1
cursor_y=1

# #########################################################
# Add the program tilte and version to the Terminal title bar...
# This may NOT work in every Terminal so just comment it out if it doesn't.
printf "\x1B]0;Shell Function Generator Version "$ver".\x07"

# #########################################################
# A clear screen function that does NOT use "clear".
# Set up as black on white.
clrscn()
{
   printf "\x1B[H\x1B[0;30;47m"
   printf "\x1B[2J\x1B[H"
}

# Use it to set up screen.
clrscn

# #########################################################
# A timing function that has keyboard override and does NOT use "sleep".
delay()
{
   read -n1 -s -t$1
}

# #########################################################
# A simple INKEY$ function.
inkey() { char=" " ; read -n1 -s -t1 char ; }

# #########################################################
# Enable graphics mode.
graphics_on()
{
   printf "\x1B(0"
}

# #########################################################
# Disable graphics mode.
graphics_off()
{
   printf "\x1B(B"
}

# #########################################################
# Set up the 3D buttons as a pseudo-GUI.
button_off()
{
   x=$1
   y=$2
   graphics_on
   printf "\x1B["$y";"$x"f\x1B[1;37;47mlqqqqqqqqqqqq\x1B[1;30;47mk\x1B[0m"
   y=$(( $y + 1 ))
   printf "\x1B["$y";"$x"f\x1B[1;37;47mx            \x1B[1;30;47mx\x1B[0m"
   y=$(( $y + 1 ))
   printf "\x1B["$y";"$x"f\x1B[1;37;47mm\x1B[1;30;47mqqqqqqqqqqqq\x1B[1;30;47mj\x1B[0m"
   graphics_off
   printf "\x1B[0m"
}

# #########################################################
# Set up a 3D button as a pressed on.
button_on()
{
   x=$1
   y=$2
   graphics_on
   printf "\x1B["$y";"$x"f\x1B[1;30;47mlqqqqqqqqqqqq\x1B[1;37;47mk\x1B[0m"
   y=$(( $y + 1 ))
   printf "\x1B["$y";"$x"f\x1B[1;30;47mx            \x1B[1;37;47mx\x1B[0m"
   y=$(( $y + 1 ))
   printf "\x1B["$y";"$x"f\x1B[1;30;47mm\x1B[1;37;47mqqqqqqqqqqqq\x1B[1;37;47mj\x1B[0m"
   graphics_off
   printf "\x1B[0m"
}

# Set up a pseudo-3D display...
display()
{
   clrscn
   graphics_on
   printf "\x1B[1;2f\x1B[1;30;47mlqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\x1B[1;37;47mk\x1B[0m"
   for y in {2..13}
   do
      printf "\x1B["$y";2f\x1B[1;30;47mx                                                                            \x1B[1;37;47mx\x1B[0m"
   done
   printf "\x1B[14;2f\x1B[1;30;47mm\x1B[1;37;47mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\x1B[1;37;47mj\x1B[0m"
   graphics_off
   for x in $( seq 4 15 64 )
   do
      for y in $( seq 2 3 11 )
      do
         button_off $x $y
      done
   done
   text="Sinewave\x1B[0m Squarewave Triangle Noise Sawtooth+ Sawtooth- Pulse+ Pulse- Quit/Exit Reset"
   arr=($text)
   n=0
   for x in $( seq 6 15 66)
   do
      for y in $( seq 3 3 6 )
      do
         printf "\x1B[0;30;47m\x1B["$y";"$x"f${arr[$n]}"
         n=$(( $n + 1 ))
      done
   done
   text="20Hz 50Hz 100Hz 200Hz 500Hz 1000Hz 2000Hz 5000Hz Sweep Mono"
   arr=($text)
   n=0
   for x in $( seq 6 15 66)
   do
      for y in $( seq 9 3 12 )
      do
         printf "\x1B[0;30;47m\x1B["$y";"$x"f${arr[$n]}"
         n=$(( $n + 1 ))
      done
   done
}
display
while true
do
   inkey
   if [ "$char" == "Q" ]
   then
      printf "Quitting...\n\n"
      break
   fi
   
   if [ "$char" == " " ] || [ "$char" == "" ]
   then
      printf "\x1B[22;2fPress Q, (uppercase), to Quit. (X = $cursor_x, Y = $cursor_y)..."
   fi
   # These are the same as the four cursor keys for OSX too.
   # Cursor up...
   if [ "$char" == "A" ]
   then
      cursor_y=$(( $cursor_y - 1 ))
   fi
   # Cursor down...
   if [ "$char" == "B" ]
   then
      cursor_y=$(( $cursor_y + 1 ))
   fi
   # Cursor right...
   if [ "$char" == "C" ]
   then
      cursor_x=$(( $cursor_x + 1 ))
   fi
   # Cursor left...
   if [ "$char" == "D" ]
   then
      cursor_x=$(( $cursor_x - 1 ))
   fi
   if [ $cursor_x -le 1 ]
   then
      cursor_x=1
   fi
   if [ $cursor_x -ge 80 ]
   then
      cursor_x=80
   fi
   if [ $cursor_y -le 1 ]
   then
      cursor_y=1
   fi
   if [ $cursor_y -ge 24 ]
   then
      cursor_y=24
   fi
   printf "\x1B["$cursor_y";"$cursor_x"f"
done
exit 0

_________________
73...

Bazza, G0LCU...

Team AMIGA...


Last edited by Bazza on Mon Mar 24, 2014 7:17 pm; edited 3 times in total
Back to top
View user's profile Send private message
johnhudson
LXF regular


Joined: Wed Aug 03, 2005 2:37 pm
Posts: 870

PostPosted: Sun Mar 23, 2014 9:58 pm    Post subject: Reply with quote

So the fame in LXF has gone to your head:

Output from running follows:
Code:
john@linux-7k4h:~> #!/bin/bash                                                                                                                                                     
c                                                                                                                                                                                   
john@linux-7k4h:~> # Function_Generator.sh                                                                                                                                         

john@linux-7k4h:~> # This is a GUI style DEMO only and only tested on OSX 10.7.5, default bash terminal.                                                                           

john@linux-7k4h:~> # $VER: Function_Generator.sh_Version_0.00.00_(C)2014_B.Walker_G0LCU.                                                                                           

john@linux-7k4h:~>                                                                                                                                                                 

john@linux-7k4h:~> # Variables...                                                                                                                                                   
f                                                                                                                                                                                   
john@linux-7k4h:~> ifs_str="$IFS"                                                                                                                                                   
"                                                                                                                                                                                   
john@linux-7k4h:~> ver="0.00.00"                                                                                                                                                   
                                                                                                                                                                                   
john@linux-7k4h:~> # Reusable variables...                                                                                                                                         

john@linux-7k4h:~> x=0                                                                                                                                                             
t                                                                                                                                                                                   
john@linux-7k4h:~> y=0                                                                                                                                                             
                                                                                                                                                                                   
john@linux-7k4h:~> n=0                                                                                                                                                             
f                                                                                                                                                                                   
john@linux-7k4h:~> char=" "                                                                                                                                                         
$                                                                                                                                                                                   
john@linux-7k4h:~> text="(C)2014, B.Walker, G0LCU."                                                                                                                                 

john@linux-7k4h:~> arr=$(text)                                                                                                                                                     
r                                                                                                                                                                                   
john@linux-7k4h:~> # Specific variables...                                                                                                                                         

john@linux-7k4h:~> button_text="Not used yet."                                                                                                                                     

john@linux-7k4h:~> cursor_x=1                                                                                                                                                       
                                                                                                                                                                                   
john@linux-7k4h:~> cursor_y=1                                                                                                                                                       
p                                                                                                                                                                                   
john@linux-7k4h:~>                                                                                                                                                                 

john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # Add the program tilte and version to the Terminal title bar...                                                                                                 
john@linux-7k4h:~> # This may NOT work in every Terminal so just comment it out if it doesn't.                                                                                     
john@linux-7k4h:~> printf "\x1B]0;Shell Function Generator Version "$ver".\x07"                                                                                                     
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # A clear screen function that does NOT use "clear".                                                                                                             
john@linux-7k4h:~> # Set up as black on white.                                                                                                                                     
john@linux-7k4h:~> clrscn()                                                                                                                                                         
> {                                                                                                                                                                                 
>    printf "\x1B[H\x1B[0;30;47m"                                                                                                                                                   
>    printf "\x1B[2J\x1B[H"                                                                                                                                                         
> }                                                                                                                                                                                 
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # Use it to set up screen.                                                                                                                                       
john@linux-7k4h:~> clrscn                                                                                                                                                           
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # A timing function that has keyboard override and does NOT use "sleep".                                                                                         
john@linux-7k4h:~> delay()                                                                                                                                                         
> {                                                                                                                                                                                 
>    read -n1 -s -t$1                                                                                                                                                               
> }                                                                                                                                                                                 
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # A simple INKEY$ function.                                                                                                                                     
john@linux-7k4h:~> inkey() { char=" " ; read -n1 -s -t1 char ; }                                                                                                                   
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # Enable graphics mode.                                                                                                                                         
john@linux-7k4h:~> graphics_on()                                                                                                                                                   
> {                                                                                                                                                                                 
>    printf "\x1B(0"                                                                                                                                                               
> }                                                                                                                                                                                 
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # Disable graphics mode.                                                                                                                                         
john@linux-7k4h:~> graphics_off()                                                                                                                                                   
> {                                                                                                                                                                                 
>    printf "\x1B(B"                                                                                                                                                               
> }                                                                                                                                                                                 
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # Set up the 3D buttons as a pseudo-GUI.                                                                                                                         
john@linux-7k4h:~> button_off()                                                                                                                                                     
> {                                                                                                                                                                                 
>    x=$1                                                                                                                                                                           
>    y=$2                                                                                                                                                                           
>    graphics_on                                                                                                                                                                   
>    printf "\x1B["$y";"$x"f\x1B[1;97;47mlqqqqqqqqqqqq\x1B[1;30;47mk\x1B[0m"                                                                                                       
>    y=$(( $y + 1 ))                                                                                                                                                               
>    printf "\x1B["$y";"$x"f\x1B[1;97;47mx            \x1B[1;30;47mx\x1B[0m"                                                                                                       
>    y=$(( $y + 1 ))                                                                                                                                                               
>    printf "\x1B["$y";"$x"f\x1B[1;97;47mm\x1B[1;30;47mqqqqqqqqqqqq\x1B[1;30;47mj\x1B[0m"                                                                                           
>    graphics_off                                                                                                                                                                   
>    printf "\x1B[0m"                                                                                                                                                               
> }                                                                                                                                                                                 
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # #########################################################                                                                                                     
john@linux-7k4h:~> # Set up a 3D button as a pressed on.                                                                                                                           
john@linux-7k4h:~> button_on()                                                                                                                                                     
> {                                                                                                                                                                                 
>    x=$1                                                                                                                                                                           
>    y=$2                                                                                                                                                                           
>    graphics_on                                                                                                                                                                   
>    printf "\x1B["$y";"$x"f\x1B[1;30;47mlqqqqqqqqqqqq\x1B[1;97;47mk\x1B[0m"                                                                                                       
>    y=$(( $y + 1 ))                                                                                                                                                               
>    printf "\x1B["$y";"$x"f\x1B[1;30;47mx            \x1B[1;97;47mx\x1B[0m"                                                                                                       
>    y=$(( $y + 1 ))                                                                                                                                                               
>    printf "\x1B["$y";"$x"f\x1B[1;30;47mm\x1B[1;97;47mqqqqqqqqqqqq\x1B[1;97;47mj\x1B[0m"                                                                                           
>    graphics_off                                                                                                                                                                   
>    printf "\x1B[0m"                                                                                                                                                               
> }                                                                                                                                                                                 
john@linux-7k4h:~>                                                                                                                                                                 
john@linux-7k4h:~> # Set up a pseudo-3D display...                                                                                                                                 
john@linux-7k4h:~> display()                                                                                                                                                       
> {                                                                                                                                                                                 
>    clrscn                                                                                                                                                                         
>    graphics_on                                                                                                                                                                   
>    printf "\x1B[1;2f\x1B[1;30;47mlqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\x1B[1;97;47mk\x1B[0m"                                             
>    for y in {2..13}                                                                                                                                                               
>    do                                                                                                                                                                             
>       printf "\x1B["$y";2f\x1B[1;30;47mx                                                                            \x1B[1;97;47mx\x1B[0m"                                       
>    done                                                                                                                                                                           
>    printf "\x1B[14;2f\x1B[1;30;47mm\x1B[1;97;47mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\x1B[1;97;47mj\x1B[0m"                               
>    graphics_off                                                                                                                                                                   
>    for x in $( seq 4 15 64 )                                                                                                                                                     
>    do                                                                                                                                                                             
>       for y in $( seq 2 3 11 )                                                                                                                                                   
>       do                                                                                                                                                                         
>          button_off $x $y                                                                                                                                                         
>       done                                                                                                                                                                       
>    done                                                                                                                                                                           
>    text="Sinewave\x1B[0m Squarewave Triangle Noise Sawtooth+ Sawtooth- Pulse+ Pulse- Quit/Exit Reset"                                                                             
>    arr=($text)                                                                                                                                                                   
>    n=0                                                                                                                                                                           
>    for x in $( seq 6 15 66)                                                                                                                                                       
>    do                                                                                                                                                                             
>       for y in $( seq 3 3 6 )                                                                                                                                                     
>       do                                                                                                                                                                         
>          printf "\x1B[0;30;47m\x1B["$y";"$x"f${arr[$n]}"                                                                                                                         
>          n=$(( $n + 1 ))                                                                                                                                                         
>       done                                                                                                                                                                       
>    done                                                                                                                                                                           
>    text="20Hz 50Hz 100Hz 200Hz 500Hz 1000Hz 2000Hz 5000Hz Sweep Mono"                                                                                                             
>    arr=($text)                                                                                                                                                                   
>    n=0                                                                                                                                                                           
>    for x in $( seq 6 15 66)                                                                                                                                                       
>    do                                                                                                                                                                             
>       for y in $( seq 9 3 12 )                                                                                                                                                   
>       do                                                                                                                                                                         
>          printf "\x1B[0;30;47m\x1B["$y";"$x"f${arr[$n]}"                                                                                                                         
>          n=$(( $n + 1 ))                                                                                                                                                         
>       done                                                                                                                                                                       
>    done                                                                                                                                                                           
> }                                                                                                                                                                                 
john@linux-7k4h:~> display                                                                                                                                                         
 ┌────────────────────────────────────────────────────────────────────────────┐
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
 │ │ Sinewave   │ │ Triangle   │ │ Sawtooth+  │ │ Pulse+     │ │ Quit/Exit  │ │
 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
 │ │ Squarewave │ │ Noise      │ │ Sawtooth-  │ │ Pulse-     │ │ Reset      │ │
 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
 │ │ 20Hz       │ │ 100Hz      │ │ 500Hz      │ │ 2000Hz     │ │ Sweep      │ │
 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
 │ │ 50Hz       │ │ 200Hz      │ │ 1000Hz     │ │ 5000Hz     │ │ Monojohn@linux-7k4h:~> while true                                                                                 
> do ───────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
>    inkey ───────────────────────────────────────────────────────────────────┘
>    if [ "$char" == "" ]                                                                                                                                                           
>    then                                                                                                                                                                           
>       printf "Quitting...\n\n"                                                                                                                                                   
>       break                                                                                                                                                                       
>    fi                                                                                                                                                                             
>                                                                                                                                                                                   
>    if [ "$char" == " " ]                                                                                                                                                         
>    then                                                                                                                                                                           
>       printf "\x1B[22;2fPress RETURN/ENTER to Quit. (X = $cursor_x, Y = $cursor_y)..."                                                                                           
>    fi                                                                                                                                                                             
>    # These are the same as the four cursor keys for OSX too.                                                                                                                     
>    # Cursor up...                                                                                                                                                                 
>    if [ "$char" == "A" ]                                                                                                                                                         
>    then                                                                                                                                                                           
>       c                                                                                                                                                                           
>    fi                                                                                                                                                                             
>    # Cursor down.                                                                                                                                                                 
>    if [ "$char" == "B" ]                                                                                                                                                         
>    then                                                                                                                                                                           
>       cursor_y=$(( $cursor_y + 1 ))                                                                                                                                               
>    fi
>    # Cu
>    if [ "$char" == "C" ]
>    then
>       cursor_x=$(( $cursor_x + 1 ))
>
>    # Cursor lef
>    if [ "$char"
>    then
>     
>    fi
bash: syntax error near unexpected token `fi'
john@linux-7k4h:~>    if [ $cursor_x
>    t
>     
>    f
>    if [ $
>    then
>       cursor_x=80
>    fi
>    if [ $cur
>    then
>       cursor_y=
>    fi
>    if [ $cursor_y -ge
>    then
>   
>    fi
bash: syntax error near unexpected token `fi'
john@linux-7k4h:~>    p
If 'p' is not a typo you can use command-not-found to lookup the package that contains it, like this:
    cnf p

The table of options displayed properly except that the bottom right was overwritten with the prompt - perhaps a carriage return missing.
Back to top
View user's profile Send private message
Bazza
LXF regular


Joined: Sat Mar 21, 2009 11:16 am
Posts: 1474
Location: Loughborough

PostPosted: Sun Mar 23, 2014 10:18 pm    Post subject: Reply with quote

Hi jh...

> So the fame in LXF has gone to your head:

Ha ha, yeah maybe...

Seriously though this will hopefully become part of a suite but the GUI idea is just that, an idea at the moment.

I copied and pasted the script back to this machine and all worked well.

No idea why your c&p gave those errors, except it looks as though parts of the script are missing...

However, I am assuming this script HAS _bugs_ because trying to get things to work on differing platforms is seriously difficult...

Thanks for your test...

What machine and OS was it on?
_________________
73...

Bazza, G0LCU...

Team AMIGA...
Back to top
View user's profile Send private message
Ram
LXF regular


Joined: Thu Apr 07, 2005 10:44 pm
Posts: 1668
Location: Guisborough

PostPosted: Sun Mar 23, 2014 11:12 pm    Post subject: Reply with quote

I get 20 buttons ( for the want of a better word ) the last saying 'Mono'

script pauses for a second - adding 'Quitting...' to 'Mono' then stops.

Quick hack

Change this
Code:

display
while true
do
   inkey
   if [ "$char" == "" ]
   then
      printf "Quitting...\n\n"
      break
   fi
   
   if [ "$char" == " " ]
   then
      printf "\x1B[22;2fPress RETURN/ENTER to Quit. (X = $cursor_x, Y = $cursor_y)..."
   fi


To

Code:

display
while true
do
   inkey
   if [ "$char" == "X" ]
   then
      printf "Quitting...\n\n"
      break
   fi
   
   if [ "$char" == "" ]
   then
      printf "\x1B[22;2fPress X to Quit. (X = $cursor_x, Y = $cursor_y)..."
   fi


Stops the script from ending, after a slight pause on printing button ' Mono' The curse re-appears top left and 'Press X to Quit. (X = 1, Y = 1)...' print at the bottom of the screen.

I can now navigate around the screen with 'ABCD' or the arrow keys with 'X' quitting the script..
_________________

lubuntu LXDE 13.10 running on AMD Phenom II*4; ASUS Crosshair III Formula MB; 4 GB Ram.....
Back to top
View user's profile Send private message MSN Messenger
guy
LXF regular


Joined: Thu Apr 07, 2005 1:07 pm
Posts: 1070
Location: Worcestershire

PostPosted: Mon Mar 24, 2014 9:54 am    Post subject: Reply with quote

Hi Bazza, have you checked out ncurses? It's a similarly character-based pseudo-GUI, might give you a few tips. Try:

$ man ncurses

and if that fails, install it.

Meanwhile I copy-pasted your script into a terminal:

me@here:~$ #!/bin/bash

me@here:~$ # Function_Generator.sh

me@here:~$ # This is a GUI style DEMO only and only tested on OSX 10.7.5, default bash terminal.

me@here:~$ # $VER: Function_Generator.sh_Version_0.00.00_(C)2014_B.Walker_G0LCU.

me@here:~$

me@here:~$ # Variables...

me@here:~$ ifs_str="$IFS"

me@here:~$ ver="0.00.00"

me@here:~$ # Reusable variables...

me@here:~$ x=0

me@here:~$ y=0

me@here:~$ n=0

me@here:~$ char=" "

me@here:~$ text="(C)2014, B.Walker, G0LCU."

me@here:~$ arr=$(text)
bash: text: command not found
me@here:~$ # Specific variables...
me@here:~$ button_text="Not used yet."
me@here:~$ cursor_x=1
me@here:~$ cursor_y=1
me@here:~$
me@here:~$ # #########################################################
me@here:~$ # Add the program tilte and version to the Terminal title bar...me@here:~$ # This may NOT work in every Terminal so just comment it out if it doesn't.
me@here:~$ printf "\x1B]0;Shell Function Generator Version "$ver".\x07"
me@here:~$
me@here:~$ # #########################################################
me@here:~$ # A clear screen function that does NOT use "clear".
me@here:~$ # Set up as black on white.
me@here:~$ clrscn()
> {
> printf "\x1B[H\x1B[0;30;47m"
> printf "\x1B[2J\x1B[H"
> }
me@here:~$
me@here:~$ # Use it to set up screen.
me@here:~$ clrscn

me@here:~$
me@here:~$ # #########################################################
me@here:~$ # A timing function that has keyboard override and does NOT use "sleep".
me@here:~$ delay()
> {
> read -n1 -s -t$1
> }
me@here:~$
me@here:~$ # #########################################################
me@here:~$ # A simple INKEY$ function.
me@here:~$ inkey() { char=" " ; read -n1 -s -t1 char ; }
me@here:~$
me@here:~$ # #########################################################
me@here:~$ # Enable graphics mode.
me@here:~$ graphics_on()
> {
> printf "\x1B(0"
> }
me@here:~$
me@here:~$ # #########################################################
me@here:~$ # Disable graphics mode.
me@here:~$ graphics_off()
> {
> printf "\x1B(B"
> }
me@here:~$
me@here:~$ # #########################################################
me@here:~$ # Set up the 3D buttons as a pseudo-GUI.
me@here:~$ button_off()
> {
> x=$1
> y=$2
> graphics_on
> printf "\x1B["$y";"$x"f\x1B[1;37;47mlqqqqqqqqqqqq\x1B[1;30;47mk\x1B[0m"
> y=$(( $y + 1 ))
> printf "\x1B["$y";"$x"f\x1B[1;37;47mx \x1B[1;30;47mx\x1B[0m"
> y=$(( $y + 1 ))
> printf "\x1B["$y";"$x"f\x1B[1;37;47mm\x1B[1;30;47mqqqqqqqqqqqq\x1B[1;30;47mj\x1B[0m"
> graphics_off
> printf "\x1B[0m"
> }
me@here:~$
me@here:~$ # #########################################################
me@here:~$ # Set up a 3D button as a pressed on.
me@here:~$ button_on()
> {
> x=$1
> y=$2
> graphics_on
> printf "\x1B["$y";"$x"f\x1B[1;30;47mlqqqqqqqqqqqq\x1B[1;37;47mk\x1B[0m"
> y=$(( $y + 1 ))
> printf "\x1B["$y";"$x"f\x1B[1;30;47mx \x1B[1;37;47mx\x1B[0m"
> y=$(( $y + 1 ))
> printf "\x1B["$y";"$x"f\x1B[1;30;47mm\x1B[1;37;47mqqqqqqqqqqqq\x1B[1;37;47mj\x1B[0m"
> graphics_off
> printf "\x1B[0m"
> }
me@here:~$
me@here:~$ # Set up a pseudo-3D display...
me@here:~$ display()
> {
> clrscn
> graphics_on
> printf "\x1B[1;2f\x1B[1;30;47mlqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\x1B[1;37;47mk\x1B[0m"
> for y in {2..13}
> do
> printf "\x1B["$y";2f\x1B[1;30;47mx \x1B[1;37;47mx\x1B[0m"
> done
> printf "\x1B[14;2f\x1B[1;30;47mm\x1B[1;37;47mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\x1B[1;37;47mj\x1B[0m"
> graphics_off
> for x in $( seq 4 15 64 )
> do
> for y in $( seq 2 3 11 )
> do
> button_off $x $y
> done
> done
> text="Sinewave\x1B[0m Squarewave Triangle Noise Sawtooth+ Sawtooth- Pulse+ Pulse- Quit/Exit Reset"
> arr=($text)
> n=0
> for x in $( seq 6 15 66)
> do
> for y in $( seq 3 3 6 )
> do
> printf "\x1B[0;30;47m\x1B["$y";"$x"f${arr[$n]}"
> n=$(( $n + 1 ))
> done
> done
> text="20Hz 50Hz 100Hz 200Hz 500Hz 1000Hz 2000Hz 5000Hz Sweep Mono"
> arr=($text)
> n=0
> for x in $( seq 6 15 66)
> do
> for y in $( seq 9 3 12 )
> do
> printf "\x1B[0;30;47m\x1B["$y";"$x"f${arr[$n]}"
> n=$(( $n + 1 ))
> done
> done
> }
me@here:~$ display

┌────────────────────────────────────────────────────────────────────────────┐
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Sinewave │ │ Triangle │ │ Sawtooth+ │ │ Pulse+ │ │ Quit/Exit │ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Squarewave │ │ Noise │ │ Sawtooth- │ │ Pulse- │ │ Reset │ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 20Hz │ │ 100Hz │ │ 500Hz │ │ 2000Hz │ │ Sweep │ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 50Hz │ │ 200Hz │ │ 1000Hz │ │ 5000Hz │ │ Monome@here:~$ while true─┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
> do──────────────────────────────────────────────────────────────────────────┘
> inkey
> if [ "$char" == "" ]
> then
> printf "Quitting...\n\n"
> break
> fi
>
> if [ "$char" == " " ]
> then
> printf "\x1B[22;2fPress RETURN/ENTER to Quit. (X = $cursor_x, Y = $cursor_y)..."
> fi
> # These are the same as the four cursor keys for OSX too.
> # Cursor up...
> if [ "$char" == "A" ]
> then
> cursor_y=$(( $cursor_y - 1 ))
> fi
> # Cursor down...
> if [ "$char" == "B" ]
> then
> cursor_y=$(( $cursor_y + 1 ))
> fi
> # Cursor
> if [ "$char" == "C"
> then
> cursor_x=$(( $cursor_x + 1 ))
> fi
> # Cursor left...
> if [ "$char"
> then
> cursor_x=$(( $cursor_x - 1 ))
> fi
> if [ $cursor_x -
>
> cursor_x
> fi
bash: syntax error near unexpected token `fi'
me@here:~$ if [
> then
>
> fi
bash: syntax error near unexpected token `fi'
me@here:~$ if [ $cursor_y
>
>
>
> if [
> then
> cursor_y=24
> fi
>
> done
bash: syntax error near unexpected token `done'
me@here:~$ exit 0
_________________
Cheers,
Guy
The eternal help vampire
Back to top
View user's profile Send private message
Bazza
LXF regular


Joined: Sat Mar 21, 2009 11:16 am
Posts: 1474
Location: Loughborough

PostPosted: Mon Mar 24, 2014 10:02 am    Post subject: Reply with quote

Thanks so far chaps...

Just got the code working on CygWin...

See code mods in original posting...

I am not sure where the syntax errors are coming from, copy and paste perhaps?

@guy, I am aware of ncurses, but it is a extra install for OSX so I have opted to try and write this purely using __builtins__ and terminal codes...

By __builtins__ I mean literal builtins and /bin ONLY, no /usr/bin is allowed... I am stretching the bash shell to its limits...
_________________
73...

Bazza, G0LCU...

Team AMIGA...
Back to top
View user's profile Send private message
guy
LXF regular


Joined: Thu Apr 07, 2005 1:07 pm
Posts: 1070
Location: Worcestershire

PostPosted: Mon Mar 24, 2014 11:01 am    Post subject: Reply with quote

<snip load of tosh />

As for ncurses, I was thinking more of UI design tips rather than actually invoking it.
_________________
Cheers,
Guy
The eternal help vampire


Last edited by guy on Mon Mar 24, 2014 11:20 am; edited 1 time in total
Back to top
View user's profile Send private message
guy
LXF regular


Joined: Thu Apr 07, 2005 1:07 pm
Posts: 1070
Location: Worcestershire

PostPosted: Mon Mar 24, 2014 11:07 am    Post subject: Reply with quote

You were right about the copy-paste. I saved it as a script file and ran it:

Code:























 ┌────────────────────────────────────────────────────────────────────────────┐
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
 │ ││Sinewave     ││Triangle     ││Sawtooth+    ││Pulse+       ││Quit/Exit
 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
 │ ││Squarewave   ││Noise        ││Sawtooth-    ││Pulse-       ││Reset
 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
 │ ││20Hz         ││100Hz        ││500Hz        ││2000Hz       ││Sweep
 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘
 │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
 │ ││50Hz         ││200Hz        ││1000Hz       ││5000Hz       ││Mono
 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘
 └────────────────────────────────────────────────────────────────────────────┘







 Press RETURN/ENTER to Quit. (X = 1, Y = 1)...




How about that, then.

Sorry I can't get the font to fixed-pitch on this BB, it all lines up nicely in my terminal, only the right hand screen border is missing and button borders are in a bit of a mess.

Also, it doesn't quit cleanly. I get a nice grey background tint for the output, but it doesn't revert to white when I quit. Also, the command prompt reappears superimposed over the top left corner of the display - would be cool if the quit action also output enough lines to send the command prompt below the display and into clean white space. ATM I resort to killing the terminal and reopening a new one.
_________________
Cheers,
Guy
The eternal help vampire
Back to top
View user's profile Send private message
Ram
LXF regular


Joined: Thu Apr 07, 2005 10:44 pm
Posts: 1668
Location: Guisborough

PostPosted: Mon Mar 24, 2014 1:56 pm    Post subject: Reply with quote

Tested from my OpenSUSE 13.1 running laptop as well my Desktop.

Works & Displays fine - you need to edit the text to quit now you've changed it to 'Q'


_________________

lubuntu LXDE 13.10 running on AMD Phenom II*4; ASUS Crosshair III Formula MB; 4 GB Ram.....
Back to top
View user's profile Send private message MSN Messenger
Bazza
LXF regular


Joined: Sat Mar 21, 2009 11:16 am
Posts: 1474
Location: Loughborough

PostPosted: Mon Mar 24, 2014 4:16 pm    Post subject: Reply with quote

Hi Ram...

That is exactly how it should look, except it was designed around an OSX default 80 x 24 terminal window...

CygWin looks the same as does PCLinuxOS 2009.

Not tried it on Debian yet...

The quit is not needed and will be deleted in due course, and...

@guy... The final cut will return the terminal back to its original state.

This is hust proof of concept at the moment, AND, making it __multi-platform__...

I will post a piccy of the CygWin one soon...

To those risking their machines sp far, many thanks...
_________________
73...

Bazza, G0LCU...

Team AMIGA...
Back to top
View user's profile Send private message
Ram
LXF regular


Joined: Thu Apr 07, 2005 10:44 pm
Posts: 1668
Location: Guisborough

PostPosted: Mon Mar 24, 2014 5:47 pm    Post subject: Reply with quote

Bazza wrote:


Not tried it on Debian yet...



My Desktop is lubuntu so that shouldn't be an issue.
_________________

lubuntu LXDE 13.10 running on AMD Phenom II*4; ASUS Crosshair III Formula MB; 4 GB Ram.....
Back to top
View user's profile Send private message MSN Messenger
guy
LXF regular


Joined: Thu Apr 07, 2005 1:07 pm
Posts: 1070
Location: Worcestershire

PostPosted: Mon Mar 24, 2014 6:00 pm    Post subject: Reply with quote

Ram wrote:
Bazza wrote:


Not tried it on Debian yet...



My Desktop is lubuntu so that shouldn't be an issue.

Au contraire. You are using Konsole while the Debian default is the GNOME Terminal. Mine does not display all the right hand borders in the right places (as seen above). It is a bit old - v2.30.2 - so that may or may not be why.
_________________
Cheers,
Guy
The eternal help vampire
Back to top
View user's profile Send private message
Bazza
LXF regular


Joined: Sat Mar 21, 2009 11:16 am
Posts: 1474
Location: Loughborough

PostPosted: Mon Mar 24, 2014 7:15 pm    Post subject: Reply with quote

CygWin on an HP laptop with Vista as the prime mover...

Note the cursor over the 100Hz range and its x,y co-ords.
(PCLinuxOS 2009 looks the same.)


_________________
73...

Bazza, G0LCU...

Team AMIGA...
Back to top
View user's profile Send private message
Ram
LXF regular


Joined: Thu Apr 07, 2005 10:44 pm
Posts: 1668
Location: Guisborough

PostPosted: Mon Mar 24, 2014 8:26 pm    Post subject: Reply with quote

guy wrote:
Ram wrote:
Bazza wrote:


Not tried it on Debian yet...



My Desktop is lubuntu so that shouldn't be an issue.

Au contraire. You are using Konsole while the Debian default is the GNOME Terminal. Mine does not display all the right hand borders in the right places (as seen above). It is a bit old - v2.30.2 - so that may or may not be why.


That piccy was OpenSUSE on the laptop.

Desktop is using: LXTerminal 0.1.11 and the display is the same as with OpenSUSE.


Just tried it with uxTerm & xTerm on the desktop - both display correctly though I can't see the cursor, that might because they start with white text on black.
_________________

lubuntu LXDE 13.10 running on AMD Phenom II*4; ASUS Crosshair III Formula MB; 4 GB Ram.....
Back to top
View user's profile Send private message MSN Messenger
johnhudson
LXF regular


Joined: Wed Aug 03, 2005 2:37 pm
Posts: 870

PostPosted: Mon Mar 24, 2014 9:47 pm    Post subject: Reply with quote

Konsole in openSUSE 13.1 on an Acer eMachine 520.

I tried it again and didn't get the fi error at the end but otherwise it was the same. None of the beautiful displays that others have got.
Back to top
View user's profile Send private message
View previous topic :: View next topic  
Display posts from previous:   
Post new topic   Reply to topic    Linux Format forums Forum Index -> Programming All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Linux Format forums topic RSS feed 


Powered by phpBB © 2001, 2005 phpBB Group


Copyright 2011 Future Publishing, all rights reserved.


Web hosting by UKFast