Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: aleandro - 22 Dicembre 2013, 12:11:46

Titolo: Interagire con il terminale linux
Inserito da: aleandro - 22 Dicembre 2013, 12:11:46
Salve, sto cercando di creare una semplice gui per il programma units (comando) di linux. Ho notato che manca una gui e pensavo di crearla con gambas.

 Il problema è il seguente. Una volta installato units col comando sudo apt-get install units questo è presente nel sistema operativo pronto per essere lanciato. Se viene lanciato da gambas con Shell si apre e si vede il risultato nella console di gambas. Fino qui tutto ok. Il comando units inizialmente chiede quale unità di misura bisogna convertire. Ho pensato di mettere un bel "shell units for write" per immettere l'input "prova" e "prova1" da due TextArea differenti. Ora mi sono già arenato. Units chiede l'unità da convertire e poi l'unità desiderata, poi converte spara il risultato e inizia da capo.
Non capisco come fargli digerire i due input necessari e visualizzare l'output in una terza Textarea

Codice: [Seleziona]
Public Sub Button1_Click()
 Dim prova As String
 Dim prova1 As String
 Shell "units" For Write
 prova = TextArea1.Text
 prova1 = TextArea2.Text
 Print prova
 Print prova1

Il programmino vorrei integrarlo in Azeotrope insieme ad altri calcoli chimico-fisici.
La ragione di usare la shell di linux è che units è l'unico convertitore che conosco in grado di fare le conversioni con multipli e sottomultipli del S.I.
Riscrivere il programma totalmente in gambas è un obiettivo a medio termine ma per ora mi accontenterei di fare andare la pappa pronta.

Grazie per eventuali dritte.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 22 Dicembre 2013, 13:51:25
Ho pensato di mettere un bel "shell units for write" per immettere l'input "prova" e "prova1" da due TextArea differenti.
Non capisco come fargli digerire i due input necessari e visualizzare l'output in una terza Textarea


Devi gestire il processo lanciato con Shell mediante una viariabile di tipo Process.
Esempio semplice:
Codice: gambas [Seleziona]

Private pr As Process


Public Sub Form_Open()

   pr = Shell "units" For Write

end


Public Sub Button1_Click()

  Write #pr, TextArea1.Text

End

Al riguardo, ad esempio, vedi qua:
https://www.gambas-it.org/wiki/index.php/Lettura_dati_da_un_Processo_e_scrittura_dati_in_un_Processo_mediante_Process

ed anche qua:
http://www.gambas-it.org/smf/index.php?topic=1908.msg21179#msg21179
in modo particolare l'applicativo di esempio fatto da fsurfing.


Riscrivere il programma totalmente in gambas è un obiettivo
...sarebbe molto più interessante !
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 22 Dicembre 2013, 14:27:21
Un'altra modalità, per scrivere nel terminale e lanciare ciò che si è scritto, è quella descritta nel caso analogo seguente:

http://www.gambas-it.org/wiki/index.php?title=Lanciare_un_programma_senza_Shell,_ma_da_una_finestra_di_un_Terminale
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 22 Dicembre 2013, 14:52:11
Codice: [Seleziona]
pr As Process  
 
     
    Public Sub Form_Open() 
     
      pr = Shell "units" For Write As "pr"
     
    End 

     
    Public Sub Button1_Click() 
     
     Print #pr, TextArea1.Text 
     Print #pr, TextArea2.Text
     
 End

Allora funziona.

Problema successivo. I dati di risultato li vedo scritti nella console di gambas. Dovrei portarli in una  terza area  di testo per visualizzarli correttamente.  Come si legge da console gambas e si scrive in un'area di gambas?
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 22 Dicembre 2013, 15:11:53
Allora funziona.

Molto bene !   :)



Problema successivo. I dati di risultato li vedo scritti nella console di gambas. Dovrei portarli in una  terza area  di testo per visualizzarli correttamente.  Come si legge da console gambas e si scrive in un'area di gambas?

Dai uno sguardo alle pagine presenti nel capitolo "Terminale - Console IDE Gambas" della nostra WIKI:

http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Terminale_-_Console_IDE_Gambas
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 22 Dicembre 2013, 16:02:15
Codice: [Seleziona]
 pr As Process  
 
       
    Public Sub Form_Open() 
      Shell "gnome-terminal -e script"
      pr = Shell "units" For Write As "pr"
     
    End 
   
    Public Sub Button1_Click() 
     Desktop.OpenTerminal

    ' Attendiamo la creazione del file speciale "/dev/pts/1":
    Do
    Wait 0.01
    Loop Until Exist("/dev/pts/1")
 
 ' Leggiamo dal file "typescript", ed indirizziamo il contenuto al nuovo Terminale appena aperto:
     Shell "cat /percorso_del_file/typescript > /dev/pts/1"
 
     Print #pr, TextArea1.Text 
     Print #pr, TextArea2.Text
     
   End

Ho provato il metodo script ma non vedo nessun file typescript creato....La guida non mi sembra chiara.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 22 Dicembre 2013, 16:55:09
Print scrive nella console e fin qui tutto ok. Ma come passo dalla console ad un box di testo nella mia interfaccia? Sembra a giudicare dai post che si trovano in giro per google che molti abbiano problemi.

Chiedo lumi
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 22 Dicembre 2013, 17:18:39
Ho provato il metodo script ma non vedo nessun file typescript creato....La guida non mi sembra chiara.

La guida della nostra WIKI ci dice che dopo aver scritto nel terminale, si deve lanciare il comando exit (si può anche inviare Ctrl+d). La nota n. 1 a pie' pagina ci dice che il nome numerico del file speciale pts può essere anche diverso da 1 (come invece è lì riportato per mere esigenze esemplificative). Il file pts (relativo al terminale) che sarà creato, va verificato preventivamente in modo empirico lanciando il Terminale e controllando quale file si crea. In vero, tale verifica può essere compiuta a post non empiricamente, ma a livello di codice Gambas: verificando l'ID dell'ultima finestra aperta.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 23 Dicembre 2013, 00:42:08
... come passo dalla console ad un box di testo nella mia interfaccia?

Una possibilità (...non molto automatica, purtroppo) è quella descritta nell'ultimo paragrafo ("Intercettare il testo scritto nella console dell'IDE di gambas") di questa pagina:
http://www.gambas-it.org/wiki/index.php?title=Rendere_la_console_dell%27IDE_funzionale_come_un_Terminale


Altro caso:
http://www.gambas-it.org/wiki/index.php?title=Intercettare_quanto_viene_scritto_manualmente_nella_console_o_in_un_Terminale#L.27applicativo_intercetta_i_dati_scritti_nella_propria_console_ed_inviati_alla_propria_console
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 23 Dicembre 2013, 12:12:52
Ho provato tutti i modi. Purtroppo se inserisco comandi shell write non posso mettere poi lo stesso comando con read. Mi sembra strano che non ci sia una soluzione semplice per leggere quello che avviene in console di gambas tenendo conto che programmare gambas è davvero semplice e logico.

Ovviamente riscrivere il programmino per convertire le unità di misura sarebbe semplice ma comunque dispendioso in termini di tempo e poi -units- è talmente efficiente da sbalordire. Forse se inserisco la discussione nel forum di ubuntu qualcuno riuscirà a trovare una soluzione. Per ora mi limito a riprovare le varie soluzioni riportate magari cambiando un pò di variabili. Se volete provare il codice vi zippo una cartellina. La prima parte viaggia bene ed è sorprendente nella semplicità.

Se qualcuno ha già avuto esperienza con l'interazione con la shell di linux si faccia avanti. Mi piacerebbe sapere se ci sono nei programmi pubblici di gambas degli esempi di interazione con la shell un pò più complessi. 
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 23 Dicembre 2013, 12:24:13
Purtroppo se inserisco comandi shell write non posso mettere poi lo stesso comando con read.

Codice: gambas [Seleziona]
pr = Shell "comando" For Read Write




Mi sembra strano che non ci sia una soluzione semplice per leggere quello che avviene in console di gambas 

...non è proprio una cosa semplice.


Ovviamente riscrivere il programmino per convertire le unità di misura sarebbe semplice...e poi -units- è talmente efficiente da sbalordire.
Se non erro, la libraria esterna su cui si basa units è "libudunits2-0".
Utilizzando le risorse della sua API, otterresti i medesimi risultati.  :-\
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 23 Dicembre 2013, 12:58:47
Codice: [Seleziona]
pr As Process  

Private prova As Process
      
    Public Sub Form_Open()  
      
    pr = Shell "units" For Write As "pr"
    prova = Exec [System.Shell] For Read Write As "processo"
      
    End  
    

Public Sub processo_Read()

 Dim s As String
 
  Line Input #prova, s
  
  result.Text &= s & "\n"
 
End
 
      
  Public Sub Button1_Click()  
    
     Print #pr, TextArea1.Text  
     Print #pr, TextArea2.Text
    
  End

Con questo codice non mi apre nessuna shell. Per System.shell si intende /bin/sh?

Mentre con questo non succede nulla.

Codice: [Seleziona]
pr As Process  
Private por As Process
Private fl As File   

    Public Sub Form_Open()  
      
    pr = Shell "units" For Write As "pr"
    por = Exec [System.Shell] For Write
' Apriamo in lettura e sottoponiamo in osservazione lo standard Out:
   fl = Open "/dev/stdout" For Read Watch
End  
    
    
Public Sub Button1_Click()  
    
  Print #pr, TextArea1.Text  
  Print #pr, TextArea2.Text
    
End



Public Sub File_Read()

 Dim s As String
 Line Input #fl, s
 result.Text &= s
 Print "Osservato: "; s

End
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 23 Dicembre 2013, 13:13:50
Con questo codice non mi apre nessuna shell. Per System.shell si intende /bin/sh?

Non fa aprire alcun Terminale.
Di default viene utilizzato /bin/sh.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 23 Dicembre 2013, 13:18:05
Citazione
Non fa aprire alcun Terminale.

Io ho capito questo. Il comando Exec in quel caso dovrebbe aprire un terminale esterno a quello di gambas per poter gestire dall'esterno i dati di risultato e poi riportarli dentro in gambas...
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 23 Dicembre 2013, 13:20:00
.....Inoltre, affinché la console dell'IDE di Gambas possa essere utilizzata come fosse un Terminale (e quindi lanciare comandi bash), la riga di comando deve essere molto essenziale:
Codice: gambas [Seleziona]
Exec [System.Shell]

tutt'al più
Codice: gambas [Seleziona]
pr = Exec [System.Shell]


insomma senza For..... As "...."
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 23 Dicembre 2013, 13:25:26
Citazione
Non fa aprire alcun Terminale.
... aprire un terminale esterno a quello di gambas per poter gestire dall'esterno i dati di risultato e poi riportarli dentro in gambas...

Questa modalità probabilmente sarebbe più agevole, se usi l'applicativo Gambas come progetto e non come eseguibile mioapplicativo.gambas.

Inoltre, per aprire un classico Terminale esterno con le sole funzioni di Gambas, si può utilizzare la funzione:
Codice: gambas [Seleziona]

   Desktop.OpenTerminal

avendo cura, però, di attivare il componente gb.desktop
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 23 Dicembre 2013, 13:27:48
Grazie per le dritte. Ci sto prendendo gusto. Ora faccio altre prove.

Codice: [Seleziona]
Desktop.OpenTerminal
  Visto. Mi viene il dubbio che sia praticabile quello che ho detto ovvero di dirigere all'esterno gli output.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 23 Dicembre 2013, 13:37:38
Ci sto prendendo gusto. Ora faccio altre prove.

Questo argomento da te sollevato è una bestia nera !  :-X
I miei esperimenti e studi al riguardo sono esposti nelle pagine che ti ho segnalato innanzi, ed in particolare in questo capitolo della nostra WIKI:
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Terminale_-_Console_IDE_Gambas


... dirigere all'esterno gli output.

Potresti anche dirigere su un file qualsiasi, o addirittura su un programma Gambas secondario d'appoggio.  :-\
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 23 Dicembre 2013, 13:46:21
Citazione
Potresti anche dirigere su un file qualsiasi

Non per come funziona units. Bisognerebbe modificare units in modo da avere un output su file. Allora sarebbe tutto più semplice.

Forse per questo motivo nessuno ha mai fatto una gui per units.

Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 24 Dicembre 2013, 01:35:07
Ho fatto altre prove, creando un apposito piccolo e semplicissimo programma, che ho scritto in C:
Codice: c [Seleziona]
#include <stdio.h>

int a;

void main() {

   while (1) {

      printf("-> %d\n", a);
      sleep (1);
      a++;

   };

}

il quale ogni secondo scrive nello standard output un valore numerico crescente.

Ho, poi, realizzato un piccolo applicativo in Gambas che lancia e gestisce il processo di quel programmino C con Exec [].

Se pongo la riga del comando Exec [] in modo essenziale:
Codice: gambas [Seleziona]
pr = Exec ["/percorso/del/programmino/C"]

vedo scrivere nella console dell'IDE di Gambas ogni secondo i numeri crescenti.

Invece, per intercettare questi dati dalla console ad una TextArea, posta sul Form, ho dovuto ovviamente porre in osservazione il processo.
La differenza rispetto ai precedenti tentativi, anche in questa discussione esposti negli ultimi inteventi e nella WIKI, è che il processo va dichiarato eseguito in lettura con la parola For Input, e non For Read:
Codice: gambas [Seleziona]

   pr = Exec ["/percorso/del/programmino/C"] For INPUT As "prova"


Mi pare che tu, però, abbia bisogno di una dichiarazione doppia, in lettura ed in scrittura, del processo. In tal caso, Gambas non accetta la compresenza della parola Input e della parola Write. Pertanto, devi provare l'efficienza del tuo codice utilizzando congiuntamente le parole Input ed Output.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 24 Dicembre 2013, 02:22:01
Codice: [Seleziona]
 pr As Process  
 
     
  Public Sub Form_Open() 
     
    pr = Shell "units" For Input Output As "pr"
     
  End 
 
  Public Sub Button1_Click() 
   
     Print #pr, TextArea1.Text 
     Print #pr, TextArea2.Text
     
  End

Mi sembrava ragionevole che fosse così. Purtroppo non va. Era un esperimento che avevo già fatto ieri. Non funziona neppure con Read Write- Nel tuo caso di programma in C l'interazione è di sola lettura. Invece units ha due fasi di scrittura ed una di lettura.....
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 24 Dicembre 2013, 02:31:17
Non funziona neppure con Read Write- ... units ha due fasi di scrittura ed una di lettura.....

Ma con il solo Write
   http://www.gambas-it.org/smf/index.php?topic=3165.msg31618#msg31618
mi sembra che tu abbia detto che funziona. Giusto ?
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 24 Dicembre 2013, 02:50:06
Con il solo Write funzionano le prime due fasi del programma ovvero quelle in scrittura sulla console di gambas. La terza fase è quella di lettura del risultato. Questa è un mistero.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 24 Dicembre 2013, 03:01:21
Con il solo Write funzionano le prime due fasi del programma ovvero quelle in scrittura sulla console di gambas.

Ma il Write non credo sia il comando che ti faccia scrivere sulla console i dati di units.

Dovrebbe bastare per scrivere nella console dell'IDE di Gambas la semplice riga:
Codice: gambas [Seleziona]
Shell "units"


Il comando Write scrive nel flusso del processo.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 24 Dicembre 2013, 18:53:07
Codice: [Seleziona]
 pr As Process  
 
     
  Public Sub Form_Open() 
     
    pr = Shell "units" For Write
     
  End 
 
  Public Sub Button1_Click() 
   
     Print #pr, TextArea1.Text 
     Print #pr, TextArea2.Text
     Read #pr, TextArea3.Text
     
  End

Invece proprio quello mi permette di immettere i dati di TextArea1 e TextArea2. Mi spiego ma sarebbe meglio che tu provassi ad installare units.
TextArea1.Text  contiene le unità da convertire
TextArea2.Text contiene le unità che si vogliono ottenere.
TextArea3.Text contiene l'equivalenza tra la prima e la seconda ovvero il risultato finale.

Non riesco a leggere il risultato finale malgrado sia scritto in chiaro nella console di gambas. Questo è il problema.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 24 Dicembre 2013, 19:19:55
Invece proprio quello mi permette di immettere i dati di TextArea1 e TextArea2.

Non riesco a leggere il risultato finale malgrado sia scritto in chiaro nella console di gambas. Questo è il problema.


Io ho sin dall'inizio compreso il problema fondamentale.
Avevo capito male la questione della scrittura. Certo, dunque, con For Write ti consente appunto di scrivere il contenuto delle TextAree nel flusso del processo.

Riguardo all'intercettazione dei dati dalla console dell?IDE di Gambas, c'è il problema di non poter scrivere For Input Write.


... sarebbe meglio che tu provassi ad installare units.


Scusa, ma il nome del programma sarebbe: udunits2 ?
http://www.unidata.ucar.edu/software/udunits/udunits-2/udunits2.html
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 24 Dicembre 2013, 20:00:38
No il programma si chiama units.

Codice: [Seleziona]
sudo apt-get install units
units

Ti confondi con un pacchetto che fa cose simili.

http://manpages.ubuntu.com/manpages/maverick/man1/units.1.html

Lol ho appena letto che si può usare in modo non interattivo e che riesce a generare degli output...Buona speranza allora.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 25 Dicembre 2013, 00:46:51
No il programma si chiama units.

Ah, capisco.


Ad ogni modo, tornerei a valutare la possibilità di intercettare i dati mediante la sola parola For INPUT (anziché For Read). Infatti gli argomenti da passare, potrebbero essere passati preliminarmente all'atto del lancio del programma units. Ciò eviterebbe di prevedere una gestione in scrittura del flusso del processo.  :-\
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 25 Dicembre 2013, 01:51:58
...direi di più.
Se il programma units deve essere sempre riavviato per effettuare una conversione richiesta, allora non c'è proprio bisogno di porre in osservazione il flusso del processo.

Si può fare mooolto più semplicemente come nell'esempio che segue con il programma wmctrl:
Codice: gambas [Seleziona]
Public Sub Form_Open()

  Dim s As String

    Shell "wmctrl -l -p" To s

    Print s

End

Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 25 Dicembre 2013, 14:23:03
Codice: [Seleziona]
Public Sub Form_Open()  
  End
    
    
    Public Sub Button1_Click()
    
     Dim a As String
     Dim b As String
     Dim risultato As String  
    
     a = TextArea1.Text
     b = TextArea2.Text
     Shell "units a b" To risultato
    
     TextArea3.Text = risultato
    
    
    End

Ho provato a cambiare approccio. Units viene avviato immettendo come unità di misura da convertire la variabile "a" e quella da ottenere come variabile "b" poi come detto il programma termina e si può ripartire da capo (mentre prima si avviava un processo infinito). Il comando da shell è giusto perchè funziona dalla shell di linux. Tuttavia il risultato non quadra perchè è come se non leggesse la a e la b. Forse sbaglio a mettere questo codice in questo modo. Eppure le due variabili le devo pescare dai due campi TextArea1 e  TextArea2 per poi essere in grado di mettere il risultato in unad terza TextArea3.

Suggerimenti? Penso che siamo vicini alla soluzione. Si tratta di immettere correttamente le due variabili a e b.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 25 Dicembre 2013, 18:03:27
....è come se non leggesse la a e la b. Forse sbaglio a mettere questo codice in questo modo.

Si tratta di immettere correttamente le due variabili a e b.

Prova così:
Codice: gambas [Seleziona]

Shell "units " & a & b To risultato
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 25 Dicembre 2013, 18:19:10
Codice: [Seleziona]
Public Sub Form_Open()  
  End
   
   
    Public Sub Button1_Click()
     
     Dim a As String
     Dim b As String
     Dim resultat As String 
 
     a = TextArea1.Text
     b = TextArea2.Text
     Shell "units" & a & b To resultat   
     TextArea3.Text = resultat
     
    End

Non le legge neppure in questo modo. Strano. Forse dovrebbero rientrare tra le virgolette come ho fatto precedentemnte. Possibile che non ci sia documentazione?
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 25 Dicembre 2013, 18:22:31
Forse dovrebbero rientrare tra le virgolette come ho fatto precedentemnte.

Non credo, poiché facendo questo test:
Codice: gambas [Seleziona]

Public Sub Main()

 Dim s As String = "/percorso/di/un/file.wav"

  Shell "aplay s"


non funziona.

Invece, così:
Codice: gambas [Seleziona]

Public Sub Main()

 Dim s As String = "/percorso/di/un/file.wav"

  Shell "aplay " & s


funziona.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 25 Dicembre 2013, 18:42:24
...prova a distaccare in modo esplicito le due variabili; o con una virgola:
Codice: gambas [Seleziona]
Shell "units " & a & "," & b


oppure con uno spazio:
Codice: gambas [Seleziona]
Shell "units " & a & " " & b


...o con una virgola ed uno spazio:
Codice: gambas [Seleziona]
Shell "units " & a & ", " & b


Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 25 Dicembre 2013, 18:43:50
Codice: [Seleziona]
Public Sub Button1_Click() 
    
     Dim a As String
     Dim b As String
     Dim resultat As String  
     'Print #pr, TextArea1.Text  
    ' Print #pr, TextArea2.Text
     a = TextArea1.Text
     b = TextArea2.Text
     Shell "units " & a To resultat    
     TextArea3.Text = resultat
    
    End

Legge solo la a ma la variabile successiva non "gli entra".

Edit: ora provo come hai riportato sopra ed incrocio le dita.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 25 Dicembre 2013, 18:47:02
 ;D

bingo

Codice: [Seleziona]
Public Sub Form_Open()  
  End
    
    
    Public Sub Button1_Click()
    
     Dim a As String
     Dim b As String
     Dim resultat As String  
     'Print #pr, TextArea1.Text  
    ' Print #pr, TextArea2.Text
     a = TextArea1.Text
     b = TextArea2.Text
     Shell "units " & a & " " & b To resultat    
     TextArea3.Text = resultat
    
    End

Ora perfeziono il codice con un menu a tendina e le unità di misura, un help e una breve guida. Dopo dovrebbe essere pronto. Si aprono scenari sconvolgenti per l'uso della shell di linux e di bash (la mia passione). Posso aprire un topic nel forum di ubuntu per perfezionare il tutto ovviamente facendo riferimento a questa discussione?

Intanto buon Natale.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 25 Dicembre 2013, 19:06:34
bingo


Sì, dunque possiamo dire che per passare due o più variabili come argomenti, bisogna tenere presente della modalità prevista dal comando specifico.

Ad esempio, ho fatto la prova con il compilatore gcc. Funziona, come per units, così:
Codice: gambas [Seleziona]

Public Sub Main()

  Dim s1, s2 As String
  
    s1 = "/percorso/del/file/C/compilato"
    s2 = "/percorso/del/file.c/da/compilare"
    
    
      Shell "gcc -o " & s1 & " " & s2

End

appunto con lo spazio che separa le due variabili di tipo Stringa.


Caso diverso quando il comando prevede che gli argomenti siano separati da virgole.
Vediamo l'esempio del comando wmctrl utilizzato per spostare una finestra sul desktop.
Una linea di comando come questa:
Codice: gambas [Seleziona]
Shell "wmctrl -r nome_finestra_da_spostare -e 0,500,800,600,300"


utilizzando le variabili funziona così:
Codice: gambas [Seleziona]
Public Sub Main()

  Dim s1, s2, s3 As String
  
    s1 = "0"
    s2 = "500"
    s3 = "800"
      
   Shell "wmctrl -r nome_finestra_da_spostare -e " & s1 & "," & s2 & "," & s3 & ",600,300"

End
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 25 Dicembre 2013, 19:08:16
Certo che questo gambas è davvero potente e formidabile. Manca della documentazione ma provvederò a crearla e contribuire di volta in volta.

Grazie e a presto qui sul forum.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 25 Dicembre 2013, 19:11:18
Manca della documentazione ma provvederò a crearla e contribuire di volta in volta.


Puoi dare un grosso contributo nella nostra WIKI:
http://www.gambas-it.org/smf/index.php?topic=2680.0
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 26 Dicembre 2013, 00:44:19
Codice: [Seleziona]
 Public Sub Button1_Click() 
    
     Dim a As String
     Dim b As String
     Dim c As String
     Dim d As String
     Dim e As String
     Dim f As String
     Dim resultat As String
    
     a = TextArea1.Text
     b = TextArea2.Text
     c = a & b
     d = TextArea3.Text
     e = TextArea4.Text
     f = d & e
    
     Shell "units " & c & " " & f To resultat  
     TextArea5.Text = resultat
    
    End
  

Creo passo per passo le tendine per le unità di misura. Vado avanti in questa discussione così si vedono i risultati. Le unità di misura aggiornate si trovano in un file installato su ubuntu che allego.


Codice riepilogativo:
Codice: [Seleziona]
Public Sub Form_Open()  
  End
   
   
    Public Sub Button1_Click()
     
     Dim a As String
     Dim b As String
     Dim c As String
     Dim d As String
     Dim e As String
     Dim f As String
     Dim g As String
     Dim h As String
     Dim resultat As String
     
     a = TextArea1.Text
     b = ComboBox1.Text
     c = ComboBox2.Text
     d = a & b & c
     e = TextArea2.Text
     f = ComboBox3.Text
     g = ComboBox4.Text
     h = e & f & g
     
     Shell "units -v " & d & " " & h To resultat   
     TextArea3.Text = resultat
     
    End
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 30 Dicembre 2013, 23:30:50
Prima beta allegata.

Tutto funziona mancano solo le opzioni per i calcoli tra le unità di misura e altre opzioni meno importanti di units che comunque implementerò poco alla volta nelle prossime versioni.

Invece trovo decisamente ostiche tre parti:



Delle tre la più urgente è quella della stampa. Per me rimane un mistero.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 30 Dicembre 2013, 23:46:45
vorrei poter stampare i risultati; ho provato con l'icona printer e con mezze soluzioni trovate sul forum ma non ho capito una mazza

Delle tre la più urgente è quella della stampa. Per me rimane un mistero.

Proviamo con le pagine della WIKI:
http://www.gambas-it.org/wiki/index.php?title=Printer
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Stampa
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 31 Dicembre 2013, 00:31:56
Se metto printer sul form non compare neppure l'icona della stampa sul form.

Forse non ho abilitato alcuni componenti?
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 00:56:36
Se metto printer sul form non compare neppure l'icona della stampa sul form.
E' alquanto strano !  ???


Forse non ho abilitato alcuni componenti?
Non sono necessari particolari componenti.


Prova a creare l'oggetto Printer da codice .
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 31 Dicembre 2013, 01:01:05
Citazione
E' alquanto strano !

Strano ma vero. Non compare assolutamente nulla. A dire il vero non è mai comparso. Eppure ho inserito la classe printer dal menu degli speciali in basso a destra.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 01:04:34
Effettui l'aggiornamento di Gambas spesso ?

Ma tu hai Gambas 2 oppure Gambas 3 ?
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 31 Dicembre 2013, 01:06:14
Gambas 3.5.1. L'icona non compariva neppure nella 3.1.1 di ubuntu 13.10.

Codice: [Seleziona]
[System]
Gambas=3.5.1
OperatingSystem=Linux
Kernel=3.11.0-15-generic
Architecture=x86_64
Distribution=Ubuntu 13.10
Desktop=GNOME
Theme=QGtk
Language=it_IT.UTF-8
Memory=3829M
[Libraries]
Cairo=libcairo.so.2.11200.16
Curl=libcurl.so.4.3.0
DBus=libdbus-1.so.3.7.4
GStreamer=libgstreamer-0.10.so.0.30.0
GStreamer=libgstreamer-1.0.so.0.200.0
GTK+=libgtk-x11-2.0.so.0.2400.20
OpenGL=libGL.so.1.2.0
Poppler=libpoppler.so.43.0.0
Qt4=libQtCore.so.4.8.4
SDL=libSDL-1.2.so.0.11.4
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 01:28:01
Porrò la questione sulla M.L. ufficiale, per vedere se già anno affrontato questo problema.



Fatto, ora attendiamo la risposta.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 31 Dicembre 2013, 01:39:42
Agli ordini.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 10:50:50
......se riponderanno !   :-\
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 31 Dicembre 2013, 11:08:00
Scusa ho provato ad iscrivermi alla mailing list italiana attraverso yahoo ma mi sembra che non funzioni nulla nel sito.Ho provato a sottomettere un topic riportando il baco ma non mi pare di poterlo visualizzare da nessuna parte.  Inoltre mi pare che l'ultimo aggiornamento della mailing list sia del 2005. Mi sto sbagliando?
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 11:52:42
Non so cosa sia questa Mailing List italiana.
La M.L. ufficiale è qui:

https://lists.sourceforge.net/lists/listinfo/gambas-user
Titolo: Re: Interagire con il terminale linux
Inserito da: fsurfing - 31 Dicembre 2013, 12:10:13
Citazione
Se metto printer sul form non compare neppure l'icona della stampa sul form.
questo è normale , l' icona è visibile solo mentre si edita il form , avviando il programma l' icona sparisce, del resto è solo un oggetto printer, mica un bottone che premi e ti stampa quello che vuoi tu solo grazie alla comunicazione neurale!
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 12:13:55
questo è normale , l' icona è visibile solo mentre si edita il form , avviando il programma l' icona sparisce,

A me è sembrato  :-\ di capire (ma probabilmente mi sono sbagliato) che lui non riesca a vedere l'icona neppure in fase di impostazione iniziale del componente sul Form.

Magari, se aleandro può chiarire meglio la questione....
Titolo: Re: Interagire con il terminale linux
Inserito da: fsurfing - 31 Dicembre 2013, 12:21:04
per l' invio delle mail ti mancano alcuni parametri:

correggi così:

Codice: gambas [Seleziona]
Public Sub ToolButton4_Click()

 Dim vTo As New String[]
 Dim bcc As New String[]
 Dim cc As New String[]
 Dim vSubject As String
 Dim vBody As String
 Dim vAttach As String
 vTo.Add("pippolippo@yahoo.it")
 Desktop.SendMail(vTo, cc, bcc, vSubject, vBody, vAttach)
 

End



Citazione
A me è sembrato  Indeciso di capire (ma probabilmente mi sono sbagliato) che lui non riesca a vedere l'icona neppure in fase di impostazione iniziale del componente sul Form.

Magari, se aleandro può chiarire meglio la questione....

impossibile, al limite è nascosta da altri componenti presenti sul form, anzi no si vede benissimo vicino al pulsante conversione
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 12:24:20
impossibile, al limite è nascosta da altri componenti presenti sul form


Condivido il tuo forte dubbio e la tua ipotesi.
E' evidente che avevo mal interpretato, ahimé, le sue parole.  :mad:
Titolo: Re: Interagire con il terminale linux
Inserito da: fsurfing - 31 Dicembre 2013, 12:30:47
Citazione
E' evidente che avevo mal interpretato, ahimé, le sue parole.  mad
è hai pure chiesto sulla mailing list?  ti prenderanno per un super niubbo che non legge le miriadi di guide sulla programmazione gambas! ( a già è vero in realtà non si trova molto :)  )
cmq per alejandro , se vuoi stampare qualcosa guardati gli esempi printer presenti in gambas
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 12:36:48
è hai pure chiesto sulla mailing list?  ti prenderanno per un super niubbo che non legge le miriadi di guide sulla programmazione gambas! ( a già è vero in realtà non si trova molto :)  )


Già ! E' vero !

Che San Midi mi protegga !   :'(

      (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/papa.gif)


Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 31 Dicembre 2013, 12:52:47
Cavoli mi sono sbagliato allora....Nel form si vede come ho detto. Non vedo l'icona di printer perchè non è un pulsante. La cosa non mi sembra logica ma forse una logica c'è. Ora faccio altre prove anche se la wiki non spiega la questione del pulsante....

Citazione
correggi così:
Bene ora evolution mail si apre.

Citazione
Se metto printer sul form non compare neppure l'icona della stampa sul form.
Scusate ho editato il messaggio e mi è scomparsol un "in esecuzione". Non so come sia successo.

Citazione
cmq per alejandro , se vuoi stampare qualcosa guardati gli esempi printer presenti in gambas
Lo vedo ora l'esempio e forse ne esco da solo.
Titolo: Re: Interagire con il terminale linux
Inserito da: fsurfing - 31 Dicembre 2013, 13:09:15
per stampare puoi partire da qui, dopo aver inserito un nuovo bottone per la stampa

Codice: gambas [Seleziona]


Public Sub button6_Click()


 If Printer1.Configure() Then Return  'fai apparire il modulo di  conf. stampante     
 
  printer1.Print()
 End
 
Public Sub Printer1_Draw()


  Dim x As Integer
Dim y As Integer
draw.Begin(printer1) ' Initializes the draw
draw.LineWidth = 1
Draw.Foreground = Color.black

x = 10
y = 10

draw.rect(x, y, 400, 200)

draw.Font.Name = "Utopia"
draw.Font.size = 9


draw.Font.Italic = True

Draw.Text("ciao a tutti", x, y)


Draw.end


End



tieni presente che perà questa modalità di stampa che hai utilizzato deriva da gambas2 ed utilizza i metodi draw, sarà compatibile solo con le ultime versioni di g3 , mi pare che prima della 3.1 non funzionasse.

Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 31 Dicembre 2013, 13:12:03
la wiki non spiega la questione del pulsante....


Non può spiegarla, poiché l'icona del componente Printer non è un pulsante, non è una sorta di Button speciale per avviare la stampa.

Se vuoi utilizzare un tasto per avviare la stampa, come ha già detto fsurfing, dovrai utilizzare un vero e proprio Button.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 31 Dicembre 2013, 13:28:11
Sto risolvendo. Ho messo il codice dell'esempio di gambas e funziona l'apertura della configurazine di stampa e permette di stampare. Se stampo su file cerca di creare un pdf ma non ci riesce. Comunque questo problema lo risolvo dopo. Per ora tutto ok.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 01 Gennaio 2014, 17:36:50
Rieccomi. Mi pare di aver risolto quasi tutto a parte qualche baco e alcune funzionalità che verranno poi.

Ho i seguenti problemi:

Vi allego intanto la beta del programma.
Titolo: Re: Interagire con il terminale linux
Inserito da: fsurfing - 01 Gennaio 2014, 18:42:14
per stampare la list box ti basta un ciclo for /nex dell proprietà Listbox.list

per la seconda cosa puo dare listbox1.enabled=false e questa diviene traslucida
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 01 Gennaio 2014, 18:47:05
Citazione
per la seconda cosa puo dare listbox1.enabled=false e questa diviene traslucida


Vorrei che diventasse grigio anche il testo.

Citazione
per stampare la list box ti basta un ciclo for /nex dell proprietà Listbox.list

Non mi era venuto in mente ora lo implemento.
Titolo: Re: Interagire con il terminale linux
Inserito da: fsurfing - 01 Gennaio 2014, 19:51:28
Se non ricordo male anche il testo diviene grigio
al limite con la proprietà visible la rendi invisibile
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 01 Gennaio 2014, 19:59:20
Citazione
Se non ricordo male anche il testo diviene grigio

A me non diventa grigio.

Sto cercando la documentazione di ListBox.List per implementare il ciclo for/next. Non trovo nulla.
Titolo: Re: Interagire con il terminale linux
Inserito da: fsurfing - 01 Gennaio 2014, 20:21:36
se non vuoi complicarti la vita puoi fare così:

Codice: [Seleziona]
Private Sub GetText() As String
  
  Dim sText As String
  dim i as integer

  ' sText = Listbox1.Text
  ' If Not btnRichText.Value Then sText = Replace(Html(sText), "\n", "<br>")  
  ' Return sText
  
 
  
  For i = 0 To Listbox1.List.Max
    
    sText = sText & Listbox1.List[i] & "\n"
  Next
  
  Return sText
End

altrimenti il ciclo for lo inserisci nel metodo draw e per ogni riga dai un comando di stampa testo
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 02 Gennaio 2014, 00:58:45
Citazione
se non vuoi complicarti la vita puoi fare così:

Perfetto. Il programma è quasi ultimato nelle funzionalità di base e i bachi da risolvere sono pochi. Penso che tra qualche giorno potrò pubblicare la RC.

Preziosi consigli qui in comunità. :)
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 02 Gennaio 2014, 02:29:40
Preziosi consigli qui in comunità.

Sono d'accordo con te.
Del resto, fsurfing è uno dei migliori qui.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 02 Gennaio 2014, 16:02:12
Ultimo problema da risolvere.

Le descrizioni dei comandi sono immesse in una TextArea quando si attivano le opzioni dei vari menu.

Per l'immissione utilizzo un codice così:

Codice: [Seleziona]
TextArea4.Text = "Il comando esegue una conversione tra due unità di misura eventualmente anche non uguali riportando il risultato sotto forma di fattore moltiplicativo ed anche sotto forma di quoziente."

Dunque il testo compare ma solo una parte resta dentro la TextArea che è decisamente più ristretta. Io vorrei che rimanesse tutto dentro in automatico senza dover creare dei capolinea artificiali; vorrei una cosa come la formattazione giustificata di libreoffice che mi tiene tutto il testo dentro i margini di TextArea.

Intanto allego l'ultima beta.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 02 Gennaio 2014, 16:12:38
Dunque il testo compare ma solo una parte resta dentro la TextArea che è decisamente più ristretta. Io vorrei che rimanesse tutto dentro in automatico senza dover creare dei capolinea artificiali; vorrei una cosa come la formattazione giustificata di libreoffice che mi tiene tutto il testo dentro i margini di TextArea.

Devi richiamare e porre a Vero la proprietà: ".Wrap"
Codice: gambas [Seleziona]
TextArea4.Wrap = True
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 02 Gennaio 2014, 16:19:15
Ottimo. Incredibile questo gambas ed incredibili voi del forum. :ok:
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 02 Gennaio 2014, 16:47:30
vorrei una cosa come la formattazione giustificata

L'azione sulla proprietà .Wrap che ti ho appena sopra segnalata, pur facendo restare il testo nei limiti della larghezza della TextArea, non conferisce un allineamento "giustificato" del testo medesimo.

Per ottenere anche questa caratteristica devi operare pure sulla proprietà ".Alignment":
Codice: gambas [Seleziona]
With TextArea1
   .Alignment = Align.Justify
   .Wrap = True
   .Text = "Il comando esegue una conversione tra due unità di misura eventualmente anche non uguali riportando il risultato sotto forma di fattore moltiplicativo ed anche sotto forma di quoziente."
End With
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 02 Gennaio 2014, 17:03:59
Bello ancora meglio.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 03 Gennaio 2014, 23:23:57
Vorrei avere dei sottomenu in un combobox. E' possibile oppure esistono altri oggetti validi per questa cosa. Mi servirebbe per distinguere le varie unità di misura in sottogruppi.
Titolo: Re: Interagire con il terminale linux
Inserito da: vuott - 04 Gennaio 2014, 00:27:08
Anche per utilità di altri futuri utenti attraverso la ricerca nel forum, io penso che sarebbe opportuno :-\  se tu aprissi una discussione specifica sugli argomenti diversi dall'argomento iniziale e principale di questa discussione.
Titolo: Re: Interagire con il terminale linux
Inserito da: aleandro - 04 Gennaio 2014, 00:56:29
Sì scusa provvedo subito. :-[