I
l programma di installazione di OS/2 crea una Scrivania piuttosto scarna che comunque, con pochi accorgimenti, possiamo personalizzare come preferiamo.
Dopo un breve periodo di uso, considerando anche le modifiche apportate dall'installazione di nuovi programmi, la scrivania virtuale su cui sono collocati gli oggetti della Workplace Shell assume un aspetto sempre più diverso da quello iniziale.
Può però capitare di dover reinstallare il sistema, o per spostarlo su un'altra partizione, o per copiarlo su un altro computer, perché, per una chiusura non corretta del sistema, provocata dal malfunzionamento di un programma o da qualche problema di hardware, non riusciamo più ad accedere alla Workplace Shell.
Con la versione 3, OS/2 ci dà la possibilità di salvare fino a 3 configurazioni del sistema selezionando dal blocco impostazioni della Scrivania Creare archivio ad ogni riavvio del sistema.
Per ripristinare una precedente configurazione della scrivania, durante l'avviamento del sistema, bisogna premere Alt-F1 quando in alto a sinistra, nello schermo, compare un rettangolo bianco. Dal menu che appare si può scegliere di ripristinare una delle tre ultime configurazioni memorizzate.
Ci sono però diversi inconvenienti. Per alcune particolari esigenze, tre configurazioni possono non essere sufficienti. Poi, se lasciamo sempre attiva l'opzione di salvataggio della Scrivania, oltre ad allungare ulteriormente il tempo necessario per l'avviamento del sistema, in caso di un danneggiamento dei file INI, tale da non permettere più l'accesso alla Workplace Shell, se non ripristiniamo immediatamente la configurazione precedente rischiamo di trovarci con archivi della Scrivania inutilizzabili.
Per esempio riavviando dopo un black out che ci ha spento la macchina improvvisamente, se uno dei file INI è stato danneggiato da questa accidentale chiusura del sistema, uno dei precedenti archivi della Scrivania verrà sovrascritto dal nuovo che contiene un file INI danneggiato. Se non ci si rende conto immediatamente della causa del problema e si prova a riavviare la macchina altre due volte, tutti gli archivi validi saranno sovrascritti e l'unica possibilità che avremo sarà di ripristinare la Scrivania per la manutenzione, che riproduce la nuda scrivania creata dal programma di installazione, o addirittura reinstallare tutto il sistema operativo.
Nel caso ci limitassimo ad attivare l'opzione di salvataggio della configurazione del sistema solo di tanto in tanto, oltre al possibilità di dimenticarci di disattivarla, con le conseguenze sopra descritte, correremmo il rischio di non ricordarci di eseguire abbastanza spesso il backup, ritrovandoci così con una Scrivania vecchia di alcuni mesi e che richiederebbe sempre un lungo e paziente lavoro di ripristino per reinstallare gli oggetti e programmi più recenti.
Ci sono diverse utility sia shareware che commerciali che forniscono una sicurezza superiore a quella della funzione di archiviazione sopra descritta. Però, con quello che già ci da il sistema operativo stesso, possiamo risolvere in modo abbastanza elegante questo problema, senza spendere una lira e imparando qualche altro piccolo segreto.
Dov'è la Scrivania?
Vediamo innanzitutto cosa è la Scrivania e dove sono memorizzati i vari oggetti in essa presenti, le impostazioni della stessa, gli oggetti del Launchpad (Il pannello di avvio), ecc.
La Scrivania non è altro che una cartella con proprietà un pò speciali. In essa è opportuno collocare solo oggetti non fisici, cioè non rappresentanti il file fisicamente presente sul disco fisso.
Oltre alle cosiddette Copie collegate ci sono altri oggetti che pur essendo, a differenza di queste, indipendenti dall'originale, nel senso che possiamo cambiarne il nome e le impostazioni, sono solo riferimenti al file. Per rendersene facilmente conto basta confrontare il blocco impostazioni di due oggetti programma relativi allo stesso eseguibile, ma uno dei quali creato tramite una Maschera o tramite la voce Creare un altro del menu dell'oggetto: solo il blocco impostazioni dell'oggetto rappresentante il file fisico possiede il separatore File!
Nella Scrivania e nelle sue subdirectory sono presenti tutti gli oggetti con cui interagiamo tutti i giorni, le impostazioni di questi e di quelli presenti sul Pannello di avvio, lo schema dei colori, ecc. sono invece memorizzate nel file corrispondente alla direttiva SET USER_INI del CONFIG.SYS che di default è il file OS2.INI, mentre il file specificato da SET SYSTEM_INI (di default OS2SYS.INI) contiene le impostazioni relative all'hardware presente nel sistema.
Volendo fare una copia di backup delle impostazioni del nostro sistema, dovremo quindi cominciare da questi due file INI, senza però tralasciare la copia dell'intera directory Scrivania con tutte le sue subdirectory e relativi attributi estesi.
Altre informazioni essenziali riguardo la configurazione del sistema si trovano nel CONFIG.SYS, se usiamo anche programmi DOS e Windows, nell'AUTOEXEC.BAT e, se lo abbiamo creato, anche nello STARTUP.CMD che, se presente, viene automaticamente eseguito dal sistema durante l'avvio del sistema stesso.
Riassumendo, dobbiamo eseguire delle copie di backup di:
- X:\SCRIVANIA\* (comprese tutto l'albero delle subdirectory e i relativi attributi estesi)
- X:\OS2\OS2.INI
- X:\OS2\OS2SYS.INI
- X:\CONFIG.SYS
- X:\AUTOEXEC.BAT (solo se esiste)
- X:\STARTUP.CMD (solo se esiste)
Si potrebbe usare un semplice file batch da inserire nella cartella di avviamento, ma questa soluzione non sarebbe migliore della funzione di archivio già inclusa nel sistema. L'utility di backup ideale dovrebbe permettere di creare automaticamente dei backup ad intervalli regolari, assegnando ai file un nome che permetta di risalire facilmente alla versione del sistema, comprimendo inoltre i dati.
Tutto ciò si può ottenere da un semplice file REXX, che chiamiamo SAVEDESK.CMD:
/* SAVEDESK.CMD * (c) 1996 Alessandro Cantatore * Team OS/2 - Italiano */
/* version 0.32 * 1996/06/27 */
arg interval speed fs
/* ottiene la lettera della partizione di boot */
drv = left(value('RUNWORKPLACÈ,,'OS2ENVIRONMENT'),2);
/* se mancano gli argomenti avvia il programma di installazione */
if fs = '' then do
call alarm;
rc = setup();
exit rc;
end;
/* la data dell'ultimo backup eseguito viene memorizzata in SAVEDESK.INI */
inifile = 'SAVEDESK.INI';
curday = date('B'); /* giorni trascorsi dal 1/1/1 */
/* se è la prima volta che viene eseguito crea il file SAVEDESK.INI */
if '' = stream(inifile, 'C', 'query exists') then
call save;
else do /* altrimenti legge la data dell'ultimo*/
lastbackup = linein(inifile); /* backup e se è trascorso il tempo */
if (curday - lastbackup) >= interval then /* stabilito esegue un nuovo */
call save; /* backup */
call lineout inifile; /* chiusura del file ini */
end; /* Do */
exit 0;
/*****************************************************************************/
/* routine di salvataggio dei file */
/*****************************************************************************/
save :
/* ricava il nome del file di backup dalla data corrente */
/*se la partizione è formattata in hpfs usa un nome più lungo*/
if (fs) then
savefile = 'Scrivania_' || translate(date('L'), '_', ' ') || '.bak';
else
savefile = translate( date('È), '_', '/') || '.bak';
call lineout 'SAVEDESK.LOG', copies('-----', 10);
call lineout 'SAVEDESK.LOG', ' - Creazione del file di salvataggio del ' ||,
date('L');
call lineout 'SAVEDESK.LOG';
call lineout inifile, curday, 1;
fileList = ' ' || drv || '\os2\os2.ini ' || '\os2\os2sys.inì ||,
' ' || drv || '\Scrivania ' || '\config.sys ' ||,
stream(drv || '\autoexec.bat', 'C', 'query exists'),
stream(drv || '\startup.cmd', 'C', 'query exists');
'@zip -' || 10 - speed || 'rST' savefile fileList ||,
' 2>> SAVEDESK.LOG 1>>&2';
return;
/*****************************************************************************/
/* routine di installazione : viene invocata automaticamente la prima volta */
/* che si avvia il programma senza parametri */
/* crea un oggetto 'Desktop Saver' nella cartella */
/* di avviamento */
/*****************************************************************************/
setup:
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
call SysLoadFuncs;
parse source . . callPath;
call clrScr;
say ' +----------------------------------------------------------------------+';
say ' | |';
say ' | SAVEDESK.CMD * (c) 1996 Alessandro Cantatore * Team OS/2 - Italia |';
say ' | versione 0.32 |';
say ' | |';
say ' | Programma di installazione di "Desktop Saver" |';
say ' | Premere "X" per terminare, un tasto qualsiasi per continuare . . . |';
say ' | |';
say ' | |';
say ' +----------------------------------------------------------------------+';
say;
say;
pull reply;
if reply = 'X' then
exit 1;
interval = getInterval();
speed = getSpeed();
outDir = getOutDir();
fs = checkFS(outDir);
call clrScr;
rc = SysCreateObject('WPProgram', 'Desktop Saver', '<WP_START>',,
'EXENAME=' || callPath || ';MINIMIZED=YES;' ||,
'PROGTYPE=WINDOWABLEVIO;NOAUTOCLOSE=NO;PARAMETERS=' ||,
interval speed fs || ';STARTUPDIR=' || outDir || ';',,
'U');
if \rc then do
call alarm;
say ' Impossibile portare a termine l''installazionè;
end; /* Do */
else do
say ' Installazione conclusa!';
say 'L''oggetto "Desktop Saver" è stato creato\aggiornato.';
end; /* Do */
say;
say ' Premere un tasto qualsiasi per terminare il programma.';
call SysGetKey;
return \rc;
/*****************************************************************************/
/* routine di impostazione dell'intervallo di archiviazione */
/*****************************************************************************/
getInterval: procedure
call clrScr;
say ' Impostazione dell''intervallo di archiviazione automatica: (1 - 365)';
say ' Ogni quanti giorni si vuole salvare la configurazione del sistema?';
say ' (Premere "Invio" per accettare il valore di default di giorni -> 10)';
say;
pull interval;
if interval = '' then /* eventualmente imposta al valore di default */
interval = 10;
/* controlla la validità del parametro intervallo (1 - 365 giorni) */
if interval < 1 | interval > 365 then do
call alarm;
call SysCurPos 10, 0;
say copies(' ', length(interval));
say ' ' interval 'è un valore non valido!!!';
say ' L''intervallo deve essere compreso tra 1 e 365 giornì;
say ' Premere un tasto qualsiasi per continuarè;
call SysGetKey;
interval = getInterval();
end;
return interval;
/*****************************************************************************/
/* routine di impostazione della velocità di archiviazione */
/*****************************************************************************/
getSpeed: procedure
call clrScr;
say ' Impostazione della velocità di archiviazione (1 - 10):';
say ' Il rapporto di compressione è inversamente proporzionale allà;
say ' velocità. Per salvare il massimo dello spazio sul disco sceglierè;
say ' un valore 1, per ridurre al minimo il tempo di esecuzione del';
say ' salvataggio della Scrivania scegliere 10.';
say ' Introdurre il valore della velocità di archiviazionè;
say ' (Premere "Invio" per accettare il valore di default di -> 5)';
say;
pull speed;
if speed = '' then
speed = 5;
/* controlla la validità del parametro velocità di archiviazione (1-10) */
if speed > 10 | speed < 1 then do
call alarm;
call SysCurPos 14, 0;
say copies(' ', length(speed));
say ' ' speed 'è un valore non valido!!!';
say ' La velocità di archiviazione deve essere compresa tra 1 e 10';
say ' Premere un tasto qualsiasi per continuarè;
call SysGetKey;
speed = getSpeed();
end
return speed;
/*****************************************************************************/
/* routine di impostazione della directory di archiviazione */
/*****************************************************************************/
getOutDir: procedure expose drv
call clrScr;
say ' Impostazione della directory di archiviazione:';
say ' In questa directory verranno memorizzati gli archivi dì;
say ' configurazione del sistema e i file SAVEDESK.INI e SAVEDESK.LOG.';
say ' Introdurre il percorso della directory di archiviazionè;
say ' (Premere "Invio" per accettare la directory di default ->' drv ||,
'\SAVEDESK )';
say;
pull outDir;
if outDir = '' then
outDir = drv || '\SAVEDESK';
/* controlla l'esistenza della directory outDir */
call SysFileTree outDir, 'filè, 'D';
if file.0 = 0 then
outDir = askUser(outDir);
return outDir;
/*****************************************************************************/
/* se la directory prescelta non esiste la crea dopo aver chiesto conferma */
/* all'utente */
/*****************************************************************************/
askUser: procedure expose drv
arg outDir
call SysCurPos 12, 0;
say copies(' ', length(outDir));
say ' La directory' outDir 'non esiste!!!';
say ' Per crearla ora premere ....................... [C]';
say ' Per specificare una nuova directory premere ... [N]';
pull reply;
select
when reply = 'C' then do
if (SysMkDir(outDir) \= 0) then do
call alarm;
say ' impossibile crearè outDir || '!!! Specificare un''altra directory.';
say ' Premere un tasto qualsiasi per continuarè;
call SysGetKey;
outDir = getOutDir();
end; /* Do */
end; /* Do */
when reply = 'N' then
outDir = getOutDir();
otherwise do
call alarm;
call SysCurPos 16, 0;
say ' ';
call SysCurPos 13, 0;
outDir = askUser(outDir);
end; /* Do */
end; /* select */
return outDir;
/*****************************************************************************/
/* determina se la partizione su cui si è scelto di memorizzare gli archivi */
/* risiede su una partizione formattata HPFS o FAT */
/*****************************************************************************/
checkFS: procedure
arg outDir
filename = outDir || '\veryLongFileNamè;
rc = lineout(filename);
if (\rc) then
call SysFileDelete filename;
return \rc;
/* pulisce lo schermo e sposta il cursore in basso di 6 righe */
clrScr:
call SysCls;
call SysCurPos 6, 0;
return;
/* emette un segnale acustico */
alarm:
call beep 440, 300;
call beep 880, 300;
return;
L'uso di SAVEDESK.CMD è estremamente semplice. Dopo aver copiato il file ed averlo salvato in una qualsiasi directory (ricordatevi che non ci deve essere alcuna riga vuota o spazio prima della riga di commento "/* ... */" iniziale), o aver prelevato e scompattato il file SDESK032.ZIP, è sufficiente avviarlo o dalla riga di comando, o dalla sua icona, per installare un oggetto Desktop Saver, con le impostazioni che desiderate, nella cartella di Avviamento.
Dopo una schermata di presentazione, se scegliete di continuare l'installazione, il programma vi chiede di immettere il valore relativo all'intervallo, in giorni, tra due successivi salvataggi della configurazione del sistema. Se il valore non è valido (cioè non è compreso tra 1 e 365 giorni) la richiesta di immissione del valore viene ripetuta finché non si immette un valore valido.
Successivamente viene richiesto di introdurre il valore, compreso tra 1 e 10, relativo alla velocità di archiviazione. Questo valore è inversamente proporzionale alla compressione dei dati, cioè maggiore è la velocità scelta e maggiore sarà lo spazio occupato sul disco dal file di salvataggio della Scrivania. Volendo risparmiare al massimo lo spazio sul disco, invece, bisognerà selezionare un valore di 1.
Infine viene chiesto di specificare la directory in cui salvare gli archivi. In tale directory verranno inoltre collocati il file SAVEDESK.INI, dove viene memorizzata la data dell'ultimo archivio, e il file SAVEDESK.LOG dove viene scritto il risultato del processo di archiviazione in quanto, procedura di installazione a parte, il programma viene eseguito minimizzato.
Volendo cambiare le impostazioni prescelte è sufficiente ripetere la procedura avviando SAVEDESK.CMD senza parametri: l'oggetto Desktop Saver nella cartella di Avviamento verrà aggiornato automaticamente.
Riavviando il sistema l'oggetto Desktop Saver, durante boot, legge la data corrente, la memorizza nel file SAVEDESK.INI ed esegue il backup dei file da cui dipende la configurazione del sistema. Tale backup, compresso nel formato ZIP, viene salvato come dd_mm_aa.bak dove dd indica il giorno corrente, mm il mese e aa l'anno (per esempio 21_06_96.bak) se la directory in cui si è scelto di salvare gli archivi è collocata su una partizione formattata in FAT, altrimenti viene salvato come Scrivania_dd_mese_anno.bak (Scrivania_21_june_1996).
All'avvio successivo la data corrente viene confrontata con quella memorizzata nel file SAVEDESK.INI: se la differenza è uguale o superiore all'intervallo stabilito, il file SAVEDESK.INI viene aggiornato e viene effettuato il backup dei file di configurazione, altrimenti il programma termina immediatamente.
Note:
- Per il corretto funzionamento di Desktop Saver è necessario aver installato in una delle directory menzionate nella direttiva PATH del CONFIG.SYS il programma freeware ZIP.EXE.
- Secondo quanto riportato nella documentazione dell'Info-ZIP, in alcune versioni dell'OS/2, per la presenza di un bug, potrebbero non venire archiviati i file e le directory che contengono nel loro nome il segno esclamativo (cioè il cui nome è spezzato su più righe) o il carattere '#'. Per sicurezza provate a creare alcuni file con tali caratteri e ad archiviarli o controllate nel file SAVEDESK.LOG che siano state archiviate tutte le subdirectory contenute nella Scrivania.
- In questa versione non è stato previsto alcun controllo sulla lunghezza del file SAVEDESK.LOG. Il resoconto di ogni nuova archiviazione della Scrivania viene aggiunto in fondo a tale file che con il passare del tempo potrebbe occupare molto spazio. Se avete un pò di pratica con il REXX potete provare a modificare il file SAVEDESK.CMD, altrimenti potete periodicamente cancellare le parti più vecchie o tutto il file SAVEDESK.LOG.
Sperando che questo semplice script REXX possa esservi di aiuto, sono a vostra disposizione per eventuali richieste di chiarimenti o di modifiche.
L'esplorazione della WorkPlace Shell non si esaurisce certamente qui. Nel prossimo numero continueremo il nostro viaggio nell'interfaccia ad oggetti di OS/2.
Alessandro Cantatore è direttore di JustWarp! Magazine
e può essere reperito all'indirizzo e-mail alexcant@mbox.vol.it.
|