Kitty

Kitty
Aros Mascotte By Eric Schwartz

martedì 20 novembre 2012

Il grub questo sconosciuto! e 1

Il grub è un animale strano. Appartiene alla specie dei boot loader. Sto scrivendo un programmillo per controllarne la configurazione in via visuale. In breve un'interfaccia grafica di grub. Per che piattaforma? Per Aros ovviamente! Aros carica al suo avvio il menu di grub permettendo personalizzazioni quali la risoluzione video, la profondità, etc. Tutte le impostazioni di grub sono contenute (come da grub 2.0) in un file che si chiama grub.cfg. Questo fillo lo troviamo in /boot/grub/ (mi sto linuxizzando ultimamente). Ora per modificarlo, dicevo, bisogna farlo a mano! Male!!! Il tool cosa fa allora? Si carica il file grub.cfg e lo "interpreta", cioè estrapola tutte quelle informazioni che possono essere utili ai fini di una personalizzazione. Nello specifico abbiamo il valore di timeout il menu di default la risoluzione la profondità di colore i moduli gli argomenti del kernel (tipo il supporto del floppy, l'usb etc) Alcune impostazioni sono standard di grub. Altre no. Tra queste ultime ricadono, ad esempio, gli argomenti del kernel. Ora, una volta caricato il file in memoria e tirate fuori le informazioni essenziali, il programma deve passare queste informazioni all'interfaccia grafica che le visualizza. L'utente a questo punto effettua le sue personalizzazioni e se gli piace, salva il tutto. Il programma a questo punto rispedisce le variazioni a grub.cfg. Le jeux sont fex (non si scrive così ma chi se ne frega). Non ho un grub.cfg sottomano per far vedere la struttura (ne avevo uno in tasca) ma l'avrò perso. Comunque da tenere presente che: 1) ogni file grub ha un preambolo, un gongolo e un mammolo. 2) i comandi sono distanziati da spazi dai dati: ex set default=2 3) i dati non hanno spazi e il nome del dato ha un uguale che lo collega al valore del dato: set default=2 corretto. set default = 2 scorretto! 3) (mi piace il 3) i comandi sono separati da righe. Ho provato a mettere un grub su linea unica e aros non ha caricato una mazza. 4) 5) Ogni riga che inizia per # è un commento 6) Nello stesso grub.cfg ci sono istruzioni per il caricamento di diversi os (multiboot). 7) Ogni blocco di menu è delimitato da: menuentry ciccio {...} dove ciccio è il titolo mnemonico che diamo a quel menu. Detto questo, ho scritto le funzioni di caricamento e quasi finita quella del trattamento dati. Tramite il caricamento spezzo il file testo in una lista dinamica di righe. Ogni riga contiene una lista dinamica di parole. Ogni parola corrisponde a un comando, a un dato o a un commento. Perchè sto casotto? Perchè così sono sicuro di rimontare il file correttamente senza creare casini e usare funzioni di ricerca che odio. Detto questo la funzione di trattamento dati legge in un grosso switch-case (il cosiddetto casone) le parole e a seconda dell'ambito si regola. (a volte si mette in pausa, si accende una sigaretta e riprende dopo il break (questa me la scrivo)). Passa quindi all'interfaccia i dati. La procedura di gestione dati dall'interfaccia è bella che pronta. Ora si tratta di: 1) ampliare le casistiche (il vocabolario) del parser (chiamiamolo col suo nome) 2) scrivere le funzioni al contrario, cioè di salvataggio. Ma credo, sia roba da poco dopo aver buttato il sangue con liste di liste e puntatori a char dalla dimensione non prefissata (amo il risparmio della memoria anche se oggi con tonnellate di ram è inutile) e, come diceva la prof: non c'è niente di eccitante come una bella struttura dati dinamica. Sai come inizia, non sai mai come finisce!. Cmq amen.