Autore Topic: APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)  (Letto 1808 volte)

Offline plasteroid

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)
« il: 04 Maggio 2014, 22:05:32 »
Da qualche anno sono passato a linux, e per caso ho scoperto GAMBAS.
Ho provato a smanettare un po' con le applicazioni in console (applicazione a riga di comando)
Parecchi anni fa me la cavavo abbastanza bene con il quick basic 4.5 di micosoft e pensavo
di cimentatmi sviluppando qualche applicazione in console.  ;D

Non riesco a trovare spiegazioni riguardo al lcuni comandi da poter riprodurre su gambas
Il primo e come pulire lo schermo, in qb45 e CLS
il secondo è LOCATE x y in qb45, posiziona il cursore alle coordinate x y
E come programmare il mouse, sempre in console.
Potete aiutarmi?  ???
Grazie a tutti







Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #1 il: 05 Maggio 2014, 12:37:32 »
...Il primo e come pulire lo schermo
E come programmare il mouse, sempre in console.


Vorrei capire meglio.
Poiché tu parli di "applicazioni a riga di comando", qui per "schermo" e "console" intendi la stessa cosa, cioè il "Terminale" Linux ?
« Ultima modifica: 05 Maggio 2014, 12:57:11 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)
« Risposta #2 il: 05 Maggio 2014, 14:03:10 »
In effetti sembra un pò un bel problema, essendo Gambas un ambiente visuale, non sembra implementata nessuna maniera di creare applicazioni a riga di comando. Vengo anche io dal caro vecchio QB 4.5, e anche io all'inizio mi sono trovato abbastanza in difficoltà.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline plasteroid

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #3 il: 05 Maggio 2014, 23:03:34 »
...Il primo e come pulire lo schermo
E come programmare il mouse, sempre in console.


Vorrei capire meglio.
Poiché tu parli di "applicazioni a riga di comando", qui per "schermo" e "console" intendi la stessa cosa, cioè il "Terminale" Linux ?

Si intendo un applicazione che giri nel terminale di linux, per esempio in konsole.
Grazie

Offline plasteroid

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)
« Risposta #4 il: 05 Maggio 2014, 23:06:47 »
In effetti sembra un pò un bel problema, essendo Gambas un ambiente visuale, non sembra implementata nessuna maniera di creare applicazioni a riga di comando. Vengo anche io dal caro vecchio QB 4.5, e anche io all'inizio mi sono trovato abbastanza in difficoltà.

' Gambas module file

Public Sub Main()
 Dim aa As Integer
 
  Print Chr$(10); Chr$(13)
    For aa = 1 To 2
        Print Space$(8); "pippo"; Space$(16); aa
      Sleep 1 
    Next
    Print Space$(8); "fine"; Space$(8); "fine"; Space$(8); "fine";
    Print Chr$(10)
End
Questo esempio di codice compilato gira sul terminale.
Ciao

Offline plasteroid

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)
« Risposta #5 il: 05 Maggio 2014, 23:56:03 »
In effetti sembra un pò un bel problema, essendo Gambas un ambiente visuale, non sembra implementata nessuna maniera di creare applicazioni a riga di comando. Vengo anche io dal caro vecchio QB 4.5, e anche io all'inizio mi sono trovato abbastanza in difficoltà.

' Gambas module file

scusate le faccine non era mia intenzione, sono nuovo e non so come si fa a mettere il codice.
imparerò grazie a tutti.
Ciao


Public Sub Main()
 Dim aa As Integer
 
  Print Chr$(10); Chr$(13)
    For aa = 1 To 2
        Print Space$(8); "pippo"; Space$(16); aa
      Sleep 1 
    Next
    Print Space$(8); "fine"; Space$(8); "fine"; Space$(8); "fine";
    Print Chr$(10)
End
Questo esempio di codice compilato gira sul terminale.
Ciao

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)
« Risposta #6 il: 06 Maggio 2014, 00:03:06 »
Si, ma posizionami il cursore sulla riga 8 colonna 15 del terminale. Come fai? :)
Nel QB il mouse si gestiva con il mitico interrupt &h33, ma qui?  :-\
Se devi leggere cosa c'è scritto alla riga 8 colonna 15 con il QB facevi un DEF SEG %hB800 e leggevi direttamente la memoria video, ma qui non vedo nessuna maniera. Non è facile...
« Ultima modifica: 06 Maggio 2014, 00:14:53 da Top Fuel »
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #7 il: 06 Maggio 2014, 19:39:52 »
A mio modesto parere credo che, essendo Gambas un linguaggio "orientato agli oggetti", esso ha una predisposizione "originaria" al superamento, laddove non sia effettivamente necessario (demone o non uso di testo o della grafica), della logica del funzionamento "a riga di comando" all'interno della finestra del Terminale.
Del resto, il tuo uso prevede l'utilizzo comunque di una normale finestra (quella del Terminale), nella quale scrivere del testo. Pertanto, non è comprensibile, agendo in ambiente Gambas, il perché del non-utilizzo di un Form (che è comunque una finestra) e degli oggetti che supportano testo e/o grafica messi a disposizioni dalle risorse di Gambas.

Ad ogni modo, non è certo vietato l'uso del linguaggio Gambas per applicazioni "a riga di comando". Pertanto, vediamo cosa possiamo risolvere riguardo alle domande da te poste.

Affronterei la questione della "pulizia dello schermo", che si risolve nella pulizia del Terminale.
Di norma, la pulizia del Terminale avviene con il comando "clear" (ma anche Ctrl+l). Pertanto, dovrai inviare questo comando al Terminale.
Va segnalato che potrebbe essere necessario inviare preliminarmente la riga: export TERM=xterm, al fine di evitare il problema "TERM environment variable not set".

Il tuo codice quindi assumerebbe per ora questo tenore:
Codice: gambas [Seleziona]
Public Sub Main()
 
 Dim aa As Integer

' Per un corretto funzionamento è necessario conoscere l'esatto
' tipo del terminale su cui si sta lavorando. Andrebbe quindi settata
' la variabile TERM con la sintassi propria del sistema su cui si lavora.
' Va, pertanto, verificato se l'attivazione di questa riga è necessaria:
  ' Shell "export TERM=xterm"

  Print Chr$(10); Chr$(13)
  For aa = 1 To 2
    Print Space$(8); "pippo"; Space$(16); aa
    Sleep 1  
  Next
    
  Print Space$(8); "fine"; Space$(8); "fine"; Space$(8); "fine";
  Print Chr$(10)

  Wait 1   ' oppure Sleep se preferisci
    
' Puliamo il Terminale inviandogli il comando "clear":
  Shell "clear"
    
  Wait 0.01
  Print "Ultima riga"
  Wait 2
    
End
« Ultima modifica: 07 Maggio 2014, 01:24:54 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline plasteroid

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)
« Risposta #8 il: 06 Maggio 2014, 20:15:23 »
Si, ma posizionami il cursore sulla riga 8 colonna 15 del terminale. Come fai? :)
Nel QB il mouse si gestiva con il mitico interrupt &h33, ma qui?  :-\
Se devi leggere cosa c'è scritto alla riga 8 colonna 15 con il QB facevi un DEF SEG %hB800 e leggevi direttamente la memoria video, ma qui non vedo nessuna maniera. Non è facile...

In effetti hai ragione,  nel qb45 per posizionare il cursore il comando era locate x,y
con il mouse come hai detto tu si usava interupt 33
ho anche il libro di basic avanzato di Peter Norton. dove spiega molte cose.
Io non sono bravo come voi per questo ho chiesto.


Offline plasteroid

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #9 il: 06 Maggio 2014, 20:24:45 »
A mio modesto parere credo che, essendo Gambas un linguaggio "orientato agli oggetti", esso ha una predisposizione "originaria" al superamento, laddove non sia effettivamente necessario (demone o non uso di testo o della grafica), della logica del funzionamento "a riga di comando" all'interno della finestra del Terminale.
Del resto, il tuo uso prevede l'utilizzo comunque di una normale finestra (quella del Terminale), nella quale scrivere del testo. Pertanto, non è comprensibile, agendo in ambiente Gambas, il perché del non-utilizzo di un Form (che è comunque una finestra) e degli oggetti che supportano testo e/o grafica messi a disposizioni dalle risorse di Gambas.

Ad ogni modo, non è certo vietato l'uso del linguaggio Gambas per applicazioni "a riga di comando". Pertanto, vediamo cosa possiamo risolvere riguardo alle domande da te poste.

Affronterei la questione della "pulizia dello schermo", che si risolve nella pulizia del Terminale.
Di norma, la pulizia del Terminale avviene con il comando "clear" (ma anche Ctr+l). Pertanto, dovrai inviare questo comando al Terminale.
Va segnalato che potrebbe essere necessario inviare preliminarmente la riga: export TERM=xterm, al fine di evitare il problema "TERM environment variable not set".

Il tuo codice quindi assumerebbe per ora questo tenore:
Codice: gambas [Seleziona]
Public Sub Main()
 
 Dim aa As Integer

 ' Va verificato se l'attivazione di questa riga è necessaria:
  ' Shell "export TERM=xterm"

  Print Chr$(10); Chr$(13)
  For aa = 1 To 2
    Print Space$(8); "pippo"; Space$(16); aa
    Sleep 1  
  Next
    
  Print Space$(8); "fine"; Space$(8); "fine"; Space$(8); "fine";
  Print Chr$(10)

  Wait 1   ' oppure Sleep se preferisci
    
' Puliamo il Terminale inviandogli il comando "clear":
  Shell "clear"
    
  Wait 0.01
  Print "Ultima riga"
  Wait 2
    
End

Ti ringrazio proverò quello da te descritto.
hai qualche altra idea su come posizionare il cursore del mouse in una qualunque posizione dello schermo, e se non è troppo difficile anche quello del mouse.
Ma forse sto approfittando troppo della tua pazienza.  :)
Puoi dirmi se esiste qualche libro che possa spiegare queste cose.
Ciao

Comandi da te descritti provati. Funzionano perfettamente.
« Ultima modifica: 06 Maggio 2014, 20:26:46 da plasteroid »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #10 il: 06 Maggio 2014, 20:31:15 »
Io non sono bravo come voi per questo ho chiesto.

Qui non si tratta, a mio avviso, di essere bravi. La questione è che rischi di non usare adeguatamente Gambas.

Voglio dire che, se invece di utilizzare il Terminale, tu utilizzassi le risorse grafiche di Gambas, potresti mooooolto più agevolmente fare quelle cose che ti sei proposto di realizzare.  :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #11 il: 07 Maggio 2014, 02:49:43 »
hai qualche altra idea su come posizionare il cursore del mouse in una qualunque posizione dello schermo, e se non è troppo difficile anche quello del mouse.

A mio avviso si tratta di utilizzare risorse "al di là" di Gambas considerato in senso stretto.

Ad ogni modo, sono per ora riuscito a fare solo questo (è necessario espandere a schermo intero la finestra del terminale):
Codice: gambas [Seleziona]
Public Sub Main()
 
 Dim aa As Integer
 Dim s As String
 Dim fl As File

   s = "aaa bbb cccc ddd eee ffff gggg hhhh iiii llll mmmm nnnn oooo pppp qqqq rrr ssss tttt vvvvv uuuu zzz " &
          "aaa bbb cccc ddd eee ffff gggg hhhh iiii llll mmmm nnnn oooo pppp qqqq rrr ssss tttt vvvvv uuuu zzz " &
          "aaa bbb cccc ddd eee ffff gggg hhhhh"
 
 ' Shell "export TERM=xterm"

   fl = Open "/dev/stdout" For Write
   Write #fl, s
   
   Wait 3

' Sposta il cursore 100 caratteri a sinistra lungo la riga:
   For aa = 1 To 100
     Write #fl, "\x08"
   Next

   Wait 3

' Salta di 8 caratteri alla volta a destra x 10 volte lungo la riga:
   For aa = 1 To 10
     Write #fl, "\x09"
     Wait 0.3
   Next

   Wait 2

' Si sposta (ora più lentamente) di 150 caratteri a sinistra lungo la riga:
   For aa = 1 To 150
     Write #fl, "\x08"
     Wait 0.05
   Next

   fl.Close

  Wait 4
 
' Pulisce la finestra del terminale, perché.... è una cosa allucinante operare così !!!
   Shell "clear"

End


Che San Midi mi protegga !   :'(
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #12 il: 08 Maggio 2014, 14:12:55 »
hai qualche altra idea su come posizionare il cursore del mouse in una qualunque posizione dello schermo


Riprendo questo problema. Tenendo sempre conto che per schermo tu intendi la finestra del Terminale, bisogna operare con il protocollo supportato dal Bash's prompt (PS1).

Quindi nel seguente codice esemplificativo, sposteremo il cursore all'interno del Terminale posizionandolo in due posizioni successive diverse; scriveremo in ciascuno spostamento due parole diverse che coloreremo la prima di giallo e la seconda di rosso.
(Anche questa applicazione va lanciata nel terminale, essendo anch'essa ovviamente "a linea di comando").
Codice: gambas [Seleziona]
Public Sub Main()

 Dim fl As File

  fl = Open "/dev/stdout" For Write

  Write #fl, "\e[1;33m"
  Write #fl, "\e[10;10f"
  Write #fl, "giallo"

  Wait 3

  Write #fl, "\e[1;31m"
  Write #fl, "\e[20;30f"
  Write #fl, "rosso"

  Wait 3

  Shell "clear"
  Write #fl, "\e[0m"

  fl.Close

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: APPLICAZIONE A RIGA DI COMANDO (IN CONSOLE)
« Risposta #13 il: 08 Maggio 2014, 18:58:21 »
... e se non è troppo difficile anche quello del mouse.

Passiamo a risolvere l'ultimo problema.
Tu probabilmente intendevi sapere come spostare il puntatore del mouse all'interno dello schermo, intendendo qui per schermo l'intero schermo in senso proprio.

Mostreremo di seguito un semplice esempio - ovviamente sempre "a riga di comando" - per spostare il puntatore del mouse sullo schermo sia orizzontalmente che verticalmente.
Codice: gambas [Seleziona]
Public Struct timeval
  tv_sec As Long      ' secondi
  tv_usec As Long    ' microsecondi
End Struct

Public Struct input_event
  tv As Struct Timeval
  type As Short
  code As Short
  value As Integer
End Struct

Private Const EV_SYN As Short = 0
Private Const EV_REL As Short = 2
Private Const REL_X As Short = 0
Private Const REL_Y As Short = 1
Private Const SYN_REPORT As Short = 0


Public Sub Main()

  Dim eventoX, eventoY, fine_evento As New Input_event
  Dim s As String
  Dim ss As String[]
  Dim fl As File
  Dim b As Byte
  

' Individuiamo esattamente il file-device del mouse:
    s = File.Load("/proc/bus/input/devices")
    s = Replace$(s, "\n", " ")
    ss = Split(s, " ", "", True)
    
    For b = 0 To ss.Max
' Individuiamo la riga contenente il testo "Handlers=mouse...",
' e quindi raccogliamo l'ultima parola della riga medesima.
' Tale parola sarà il nome del file-device del mouse:
     If ss[b] Like "Handlers=mouse*" Then s = ss[b + 1]
   Next

''''''''''''''


' Per leggere il file-device individuato, bisogna avere i necessari permessi.
' Pertanto, se non sono stati modificati i permessi del file-device, allora vengono modificati
' (bisognerà inserire la propria password !):
    If Stat("/dev/input" &/ s).Auth <> "rwsrwxrwx" Then
      Shell "echo 'password' | sudo -S chmod 4777 /dev/input"  &/ s Wait
    Endif
    
  
    fl = Open "/dev/input" &/ s For Write
    If IsNull(fl) Then Error.Raise("Impossibile aprire il file-device !")
  
' Assegna i dati per lo spostamento orizzontale del mouse sullo schermo:
    With eventoX
      .type = EV_REL
      .code = REL_X
' Si assegna un valore positivo per lo spostamento a destra,
' un valore negativo per lo spostamento a sinistra:
      .value = 100
   End With
  
' Assegna i dati per lo spostamento verticale del mouse sullo schermo:
    With eventoY
      .type = EV_REL
      .code = REL_Y
' Si assegna un valore positivo per lo spostamento in basso,
' un valore negativo per lo spostamento in alto:
      .value = 100
    End With
  
    With fine_evento
      .type = EV_SYN
      .code = SYN_REPORT
      .value = 0
    End With
  
    For b = 1 To 5
      Write #fl, eventoX As Input_event          ' Sposta il mouse orizzontalmente
      Write #fl, fine_evento As Input_event    ' Mostra lo spostamento del mouse
      Wait 1
      Write #fl, eventoY As Input_event          ' Sposta il mouse verticalmente
      Write #fl, fine_evento As Input_event    ' Mostra lo spostamento del mouse
      Wait 1
    Next
  
' Va in chiusura:
    fl.Close

End

Come avrai notato, questo codice non posiziona il puntatore del mouse a delle coordinate stabilite all'interno dello schermo, ma sposta il puntatore di tot pixel.
« Ultima modifica: 11 Maggio 2014, 03:14:24 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: APPLICAZIONE ARIGA DI COMANDO (IN CONSOLE)
« Risposta #14 il: 08 Maggio 2014, 19:03:30 »
Ne sa una più del diavolo. ;D
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.