|
|
Riga 1: |
Riga 1: |
− | La questione è abbastanza complessa. Si tratta di capire come poter raccogliere (leggere) quanto viene mostrato all'interno di una finestra di un Terminale.
| |
| | | |
− | E' il caso di precisare che è <SPAN style="text-decoration:underline">non</span> si intende capire come intercettare, ma come raccogliere tutto ciò che è leggibile, e quindi ciò che è stato già scritto ed ottenuto, nel Terminale.
| |
− |
| |
− | Facciamo un esempio pratico: si apra un Terminale, e si lanci per esempio il comando: ''ls''.
| |
− |
| |
− | La domanda è: una volta che il comando ''ls'' ha esercitato la sua funzione, ed il risultato è mostrato nel terminale, come raccogliere con codice Gambas <SPAN style="text-decoration:underline">ogni</span> riga appunto visibile nel Terminale ?
| |
− |
| |
− |
| |
− | =Uso delle risorse del Componente ''gb.ncurses''=
| |
− | Una modalità molto efficace è quella che prevede l'uso delle risorse fornite dal Componente "''gb.ncurses''" di Gambas. <SUP>[[[#Note|Nota 1]]]</sup>
| |
− |
| |
− | Mostriamo un semplice esempio pratico:
| |
− | Private wn As Window
| |
− |
| |
− |
| |
− | '''Public''' Sub Main()
| |
− |
| |
− | <FONT Color=gray>' ''Non mostra il tasto premuto della tastiera:''</font>
| |
− | Screen.Echo = False
| |
− |
| |
− | <FONT Color=gray>' ''Genera l'area di gestione "ncurses" nella console:''</font>
| |
− | With wn = New Window(True, 0, 0, 300, 20) As "WinCurses"
| |
− | .Border = Border.ACS
| |
− | .Background = Color.Green
| |
− | .Caption = "Console ncurses"
| |
− | .SetFocus()
| |
− | End With
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− | '''Public''' Sub WinCurses_Read()
| |
− |
| |
− | Dim tasto As Integer
| |
− | Dim s As String
| |
− |
| |
− | <FONT Color=gray>' ''Intercetta il tasto premuto della tastiera:''</font>
| |
− | tasto = Window.Read()
| |
− |
| |
− | With wn
| |
− | <FONT Color=gray>' ''Scrive il testo sulla console:''</font>
| |
− | If tasto = Key["s"] Then .Print("Testo sulla console.", 0, 1)
| |
− | <FONT Color=gray>' ''Cattura il testo presente sulla console...''</font>
| |
− | If tasto = Key["c"] Then
| |
− | s = .Get(0, 1)
| |
− | <FONT Color=gray>' ''...e lo riscrive poco più in basso:''</font>
| |
− | .Print(s, 0, 10)
| |
− | Endif
| |
− | .Raise()
| |
− | End With
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− | =Uso di comandi ''bash'' e di risorse Gambas=
| |
− | Un'altra modalità prevede una sorta di compromesso fra comandi ''Bash'' e funzioni Gambas.
| |
− |
| |
− | ==Uso del comando "''Script''"==
| |
− | Faremo in modo da aprire una finestra di Terminale e lanciarvi all'interno il comando ''Script'':
| |
− | '''Public''' Sub Form_Open()
| |
− |
| |
− | Shell "gnome-terminal -e <FONT color=#B22222>script</font> /tmp/prova"
| |
− |
| |
− | '''End'''
| |
− | Nel percorso "/tmp" sarà creato un file chiamato "prova". Se non è stato specificato alcun percorso, né nome, allora nel medesimo percorso ove è presente il programma Gambas, sarà creato un file chiamato: "''typescript''". Si comincerà a scrivere e ad usare normalmente il terminale. Conclusa la scrittura, si dovrà lanciare in Terminale il comando ''Exit''. Questa fase finale chiuderà il Terminale, e procederà a copiare all'interno del file "''typescript''" quanto scritto e ritornato nel predetto Terminale, aggiungendovi dei codici speciali, leggibili ed interpretabili solo da un Terminale.
| |
− | Quindi, tornando in Gambas, si potrà leggere agevolmente in un nuovo Terminale, quanto presente nel file "''typescript''":
| |
− | '''Public''' Sub Button1_Click()
| |
− |
| |
− | Dim bb As Byte[]
| |
− | Dim ss As String[]
| |
− | Dim s As String
| |
− | Dim i As Integer
| |
− |
| |
− | <FONT color=gray>' ''Individua il file speciale "/dev/pts/n" che sarà creato con riferimento all'apertura del nuovo Terminale:''</font>
| |
− | ss = Dir("/dev/pts", "*", gb.Device)
| |
− |
| |
− | bb = New Byte[ss.Count]
| |
− |
| |
− | For Each s In ss
| |
− | If IsNumber(s) Then bb[Val(s)] = CByte(Val(s))
| |
− | Next
| |
− |
| |
− | i = bb.Find(0, 1)
| |
− |
| |
− |
| |
− | <FONT color=gray>' ''Apre un nuovo Terminale per la lettura del contenuto del file "typescript":''</font>
| |
− | Desktop.OpenTerminal
| |
− |
| |
− | <FONT color=gray>' ''Attende la creazione del file speciale "/dev/pts/1":''</font>
| |
− | Do
| |
− | Wait 0.01
| |
− | Loop Until Exist("/dev/pts" &/ CStr(i))
| |
− |
| |
− | <FONT color=gray>' ''Legge dal file "typescript", ed indirizze il contenuto al nuovo Terminale appena aperto:''</font>
| |
− | Shell "cat typescript > /dev/pts" &/ CStr(i)
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− |
| |
− | ==Uso del comando "''xterm -l''"==
| |
− | Per usare questa modalità, bisognerà aver installato nel proprio sistema il Terminale "''xterm''".
| |
− |
| |
− | Si dovrà lanciare il comando ''xterm -l'':
| |
− | '''Public''' Sub Button1_Click()
| |
− |
| |
− | Shell "<FONT color=#B22222>xterm -l</font>"
| |
− |
| |
− | '''End'''
| |
− | si aprirà quindi il Terminale "''xterm''". Nel medesimo percorso ove è posizionato l'eseguibile Gambas, verrà creato un file, il cui nome inizia con: ''Xterm.log.'' . Si potrà quindi scrivere ed utilizzare regolarmente il Terminale "''xterm''".
| |
− |
| |
− | Successivamente, per rivedere quanto scritto ed ottenuto nel terminale, si chiuderà il Terminale "''xterm''" e si leggerà il contenuto del predetto file in un nuovo Terminale:
| |
− | '''Public''' Sub Button2_Click()
| |
− |
| |
− | Dim bb As Byte[]
| |
− | Dim ss As String[]
| |
− | Dim s As String
| |
− | Dim i As Integer
| |
− |
| |
− | <FONT color=gray>' ''Individua il file speciale "/dev/pts/n" che sarà creato con riferimento all'apertura del nuovo Terminale:''</font>
| |
− | ss = Dir("/dev/pts", "*", gb.Device)
| |
− |
| |
− | bb = New Byte[ss.Count]
| |
− |
| |
− | For Each s In ss
| |
− | If IsNumber(s) Then bb[Val(s)] = CByte(Val(s))
| |
− | Next
| |
− |
| |
− | i = bb.Find(0, 1)
| |
− |
| |
− |
| |
− | <FONT color=gray>' ''Apre un nuovo Terminale per la lettura del contenuto del file "Xterm.log.":''</font>
| |
− | Desktop.OpenTerminal
| |
− |
| |
− | <FONT color=gray>' ''Attende la creazione del file speciale "/dev/pts/n":''</font>
| |
− | Do
| |
− | Wait 0.01
| |
− | Loop Until Exist("/dev/pts" &/ CStr(i))
| |
− |
| |
− | <FONT color=gray>' ''Legge dal file "typescript", ed indirizza il contenuto al nuovo Terminale appena aperto:''</font>
| |
− | Shell "cat Xterm.log.* > /dev/pts" &/ CStr(i)
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | =Note=
| |
− | [1] Vedere la guida ufficiale di Gambas:
| |
− | * http://gambaswiki.org/wiki/comp/gb.ncurses
| |
− | * http://gambaswiki.org/wiki/tutorial/ncursestut
| |