Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input
E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "Process".
Facciamo un esempio in cui abbiamo un programma principale ed uno secondario.
Avremo il programma principale che avvia il programma secondario (che chiameremo: secondo.gambas) e lo gestisce con Process. Il programma principale invia mediante Process un dato numerico al programma secondario. Il programma secondario intercetta quindi con l'evento _Read() il dato passato dallo standard Input, lo mostra in una TextLabel e lo modifica sommandolo ad un altro valore. Dopo ciò invierà il dato come modificato al programma principale mediante lo standard Output, il quale lo intercetterà mediante l'evento _Read() di Process.
Private scnd As Process Public Sub Button1_Click() ' Avviamo il programma secondario e lo gestiamo con "Process": scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo" End Public Sub Button1_Click() ' Inviamo al programma secondario il valore numerico: Write #scnd, 99 As Byte End ' Se potrà essere letto almeno un byte dal processo "secondo", verrà sollevata questa subroutine: Public Sub secondo_Read() Dim by As Byte ' Legge i dati scritti dal programma secondo: Read #scnd, by ' Qui mostriamo in console il dato intercettato: TextLabel1.Text = "Dato intercettato modificato = "; CStr(by) End
Il programma secondario (chiamato: secondo.gambas) che intercetta attraverso lo standard Input il dato inviatogli, e lo re-invia - come modificato - al programma principale attraverso lo standard output, sarà questo:
Private flIn As File Public Sub Form_Open() ' Apre lo standard Input per la lettura... flIn = Open "/dev/stdin" For Read Watch End Public Sub File_Read() Dim out As File Dim a, b As Byte ' Legge il dato passato dallo standard Input: Read #flIn, b flIn.Close ' Mostra nella propria TextLabel il dato intercettato: TextLabel1.Text = CStr(b) ' Effettua la modifica del dato intercettato: a = b + 1 ' Apre lo standard Output per la Scrittura... out = Open "/dev/stdout" For Write ' ...e vi scrive il valore della variabile "a": Write #out, a As Byte out.Close End
Al termine dell'intera procedura avremo nella TextLabel del programma secondario scritto il dato: 99, mentre nella TextLabel del programma principale scritto il dato come modificato: 100.