He estado jugando un poquito con la salida de apt a ver que podía obtener sobre paquetes y dependencias y como ha sido algo muy simple os posteo aquí los códigos para que los podais probar.
El objetivo es poder buscar un paquete y las dependencias totales que tiene. Esto es un arbol de dependencias completo.
Se me ocurre que la mejor forma de visualizarlo es en un columview mostrando una estructura arbórea, pero para hacer mas inteligible el código pondré los paquetes y en un gridview y las dependencias en otro. Al fin y al cabo se trata de hacer código comprensible.
Rutina para buscar un paquete
necesitamos en un formulario un textbox donde escribiremos el paquete a buscar, un botón para buscar y un grid de un tamaño de width=700 para que se vea bien en un formulario con miximized=true
Este es el código que va en el botón
DIM lineas AS String[], paquetes AS String[], Salida AS String, contador AS Integer
Grid.Columns.Count = 2
Grid.Columns[0].Width = 150
SHELL ("apt-cache search " & textbox.text) TO salida
salida = Replace(salida, " - ", " @ ") ' ----> para distinguir donde está el nombre del paquete y donde su descripción
lineas = Split(salida, gb.newline) ---> meter en cada linea el paquete y descripción separados por @
Grid.Rows.count = lineas.Length + 1 ' ---> dimensionar las filas que necesito en el grid mas la cabecera
Grid[0, 0].Text = "Paquete"
Grid[0, 1].text = "Descripción"
FOR contador = 0 TO lineas.Max
paquetes = Split(lineas[contador], "@") ' ---> separar nombre de descripción
TRY Grid[contador + 1, 0].text = paquetes[0] '---> el nombre del paquete
TRY Grid[contador + 1, 1].text = paquetes[1] ' ---> la descripción del paquete
NEXT
FINALLY
Grid.Refresh
CATCH
END
Grid.Columns.Count = 2
Grid.Columns[0].Width = 150
SHELL ("apt-cache search " & textbox.text) TO salida
salida = Replace(salida, " - ", " @ ") ' ----> para distinguir donde está el nombre del paquete y donde su descripción
lineas = Split(salida, gb.newline) ---> meter en cada linea el paquete y descripción separados por @
Grid.Rows.count = lineas.Length + 1 ' ---> dimensionar las filas que necesito en el grid mas la cabecera
Grid[0, 0].Text = "Paquete"
Grid[0, 1].text = "Descripción"
FOR contador = 0 TO lineas.Max
paquetes = Split(lineas[contador], "@") ' ---> separar nombre de descripción
TRY Grid[contador + 1, 0].text = paquetes[0] '---> el nombre del paquete
TRY Grid[contador + 1, 1].text = paquetes[1] ' ---> la descripción del paquete
NEXT
FINALLY
Grid.Refresh
CATCH
END