Riavviamo il sistema con REXX


Nello scorso numero abbiamo introdotto il linguaggio REXX. Prima di riprendere l'argomento in maniera più sistematica (aspettiamo i vostri commenti in proposito), per mostrare come è semplice creare dell utility usando il REXX, con questo numero vi guidiamo alla realizzazione di una utility PM che vi permetterà, nel caso usiate il boot manager, di resettare il sistema o di riavviarlo da un'altra partizione o sistema operativo con un semplice click su un'icona.

Le funzioni RexxUtil

Le funzioni RexxUtil sono delle funzioni aggiuntive del REXX classico, incluse nell'OS/2. La maggior parte di esse servono per manipolare gli oggetti della Workplace Shell e i file INI. La funzione che useremo nella nostra semplice utility, Rebooter, è RxMessageBox(), che utilizzeremo per visualizzare una Message Box.
Per utilizzare le funzioni RexxUtil, è prima necessario caricare in memoria la DLL che le contiene, caricando solo la funzione che ci interessa:
call RxFuncAdd 'RxMessageBox', 'RexxUtil', 'RxMessageBox'
o nel caso sia necessario usare più funzioni, caricando tutte le funzioni disponibili:
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
Volendo scaricare la DLL dalla memoria, al termine dell'esecuzione (cosa non strettamente necessaria, specialmente nel nostro caso) si dovrà usare la funzione SysDropFuncs() con la seguente sintassi:
call RxFuncAdd 'SysDropFuncs', 'RexxUtil', 'SysDropFuncs'
call SysDropFuncs
nel caso precedentemente si sia caricata solo la funzione che interessava (nel nostro esempio RxMessageBox), oppure semplicemente:
call SysDropFuncs
nel caso si siano precedentemente caricate tutte le funzioni.
Nei prossimi numeri continueremo a parlare delle funzioni RexxUtil, introducendo le altre funzioni con descrizione dettagliata della sintassi ed esempi, per ora vediamo di approfondire l'uso della funzione RxMessageBox.

RxMessageBox() - sintassi

action = RxMessageBox(text, [title], [button], [icon])

Esempio di Message Box

Dove:

text
è il testo che viene visualizzato all'interno della Message Box
title
(opzionale) è il testo visualizzato nella parte centrale in alto della Message Box. Se non viene specificato viene visualizzato il titolo di default "Errore!".
button
(opzionale) definisce il numero e il tipo di pulsanti presenti:
OK
viene visualizzato un solo bottone con la scritta "OK".
OKCANCEL
vengono visualizzati i bottoni "OK" e "Annullo".
CANCEL
è presente solo il pulsante "Annullo".
ENTER
pulsante "Invio".
ENTERCANCEL
pulsanti "Invio" e "Annullo".
RETRYCANCEL
pulsanti "Riprovare" e "Annullo".
ABORTRETRYIGNORE
pulsanti "Interrompere", "Riprovare", "Ignorare".
YESNO
pulsanti "Sì" e "No".
YESNOCANCEL
pulsanti "Sì", "No", "Annullo".
Se non viene specificato l'argomento button viene visualizzato un pulsante "OK".
icon
l'icona visualizzata nella Message Box. Sono possibili i seguenti stili:
NONE
non viene visualizzata alcuna icona (azione di default nel caso non venga specificato icon).
HAND
icona rappresentante un segnale di divieto di accesso.
EXCLAMATION
icona rappresentante un punto esclamativo in un triangolo azzurro.
ASTERISK
icona rappresentante una "i" (informazioni) in un cerchio azzurro.
INFORMATION
uguale a ASTERISK.
QUERY
icona rappresentante un punto interrogativo racchiuso in un cerchio verde.
WARNING
uguale a EXCLAMATION.
ERROR
uguale a HAND.
action
ritorna un valore intero corrispondente al pulsante selezionato nella Message Box:
1
pulsante "OK".
2
pulsante "Annullo".
3
pulsante "Interrompere".
4
pulsante "Riprovare".
5
pulsante "Ignorare".
6
pulsante "Sì".
7
pulsante "No".
8
pulsante "Invio".
Nota: Per eseguire script che facciano uso della funzione RxMessageBox è necessario avviare lo script come parametro del programma PMREXX.EXE incluso in OS/2 con la seguente sintassi:
PMREXX [drive][path]SCRIPT.CMD [script_parameters]
Dove:

Un esempio di Message Box

L'esempio è spiegato nei commenti dello script riportato qui di seguito. Per eseguire l'esempio, dopo averlo salvato su un file chiamato MSGBOX.CMD, da una finestra comandi OS/2 si scriverà:
PMREXX [drive:][\path]MSGBOX.CMD [stile tasto][stile icona][titolo Message Box]
per esempio:
PMREXX D:\TEST\MSGBOX.CMD ABORTRETRYIGNORE HAND Esempio di Message Box
Premendo su uno dei tasti visualizzati nella Message Box, apparirà una nuova Message Box in cui viene riportato il tipo di tasto premuto.

/*     MSGBOX.CMD     -     esempio di uso di RxMessageBox()    -            */
/*    (c) 1996 Alessandro Cantatore    -   Team OS/2 - Italia                */

/* carica la funzione in memoria                                             */
call RxFuncAdd 'RxMessageBox', 'RexxUtil', 'RxMessageBox'

/* acquisisce gli argomenti passati dalla riga di comando                    */
parse arg button icon title

text = 'Prova!!!'                     /* testo visualizzato nella message box*/
if button = ''                        /* se non è stato introdotto alcun     */
   then                               /* argomento visualizza la message box */
      result = RxMessageBox(text)     /* di default                          */
else                                  /* altrimenti lo stile prescelto       */
   result = RxMessageBox(text, title, button, icon)

/* viene usata l'istruzione "select" per mostrare in una seconda message box */
/* un messaggio indicante il tasto che precedentemente era stato premuto     */
select
   when result = 1
      then text = " Hai premuto OK!"
   when result = 2
      then text = " Hai premuto Annullo!"
   when result = 3
      then text = " Hai premuto Interrompere!"
   when result = 4
      then text = " Hai premuto Riprovare!"
   when result = 5
      then text = " Hai premuto Ignorare!"
   when result = 6
      then text = " Hai premuto Sì!"
   when result = 7
      then text = " Hai premuto No!"
   when result = 8
      then text = " Hai premuto Invio!"
otherwise nop
end  /* select */

title = "Pulsante selezionato:"
icon = "INFORMATION"

/* notate la differenza di sintassi tra la chiamata con "call" e la chiamata */
/* precedente in cui il valore di ritorno di "RxMessageBox()" veniva         */
/* assegnato a "result". Inoltre il parametro "button" non è stato           */
/* specificato, ma al suo posto si è lasciato uno spazio vuoto, in questa    */
/* seconda message box verrà perciò visualizzato solo il pulsante di default */
call RxMessageBox text, title, , icon

exit

Un esempio più utile: REBOOTER.CMD

Se usiamo più partizioni ed abbiamo installato il Boot Manager, potremo utilizzare lo script che descriveremo ora, creando degli oggetti programma con le opportune icone, per resettare il sistema facendo partire la stessa partizione su cui stavamo lavorando o una partizione diversa con un diverso sistema operativo.
Il comando usato per chiudere e riavviare il sistema è SETBOOT con il parametro /IBD:X dove X rappresenta la lettera identificativa della partizione che si vuole avviare. Sul Riferimento per i comandi potete trovare maggiori informazioni su SETBOOT e i parametri che è possibile usare.

Lo script è piuttosto breve:

/* REBOOTER.CMD - (c) 1995-96 Alessandro Cantatore - Team OS/2 Italia        */
/* i parametri sono:                                                         */
/*            drive = lettera identità della partizione da avviare           */
/*           prompt = messaggio da visualizzare nella finestra               */
parse arg drive prompt
call RxFuncAdd 'RxMessageBox', 'RexxUtil', 'RxMessageBox'
if RxMessageBox(prompt, "RICHIESTA DI CONFERMA", "OKCANCEL", "QUERY") = 1
   then
      "SETBOOT /IBD:" || drive  /* la doppia barra verticale "||" serve ad   */
                                /* unire il contenuto della variabile drive  */
                                /* al comando SETBOOT /IBD:                  */
call RxFuncAdd 'SysDropFuncs', 'RexxUtil', 'SysDropFuncs'
call SysDropFuncs
exit
Copiato lo script e salvatolo nel file REBOOTER.CMD, per il miglior utilizzo dovremo creare degli oggetti programma:
  1. aprite la cartella \OS2;
  2. con il tasto 2 del mouse, dal menu dell'oggetto PMREXX.EXE selezionate Creare un altro;
  3. nella finestra di dialogo che apparirà, nel campo Nuovo nome:, scrivete il nome che volete dare al nuovo oggetto, per esempio Avvio del MS DOS 6.2;
  4. nel notebook sottostante selezionate la cartella di destinazione del nuovo oggetto, o selezionate semplicemente la Scrivania, spostando poi l'oggetto nella cartella desiderata in un secondo momento;
  5. cliccate sul tasto Creare ed aprite il blocco impostazioni del nuovo oggetto;
  6. nel campo Parametri scrivete il nome ed il percorso di REBOOTER.CMD, poi separati da uno spazio ciascuno, la lettera di identità della partizione che volete avviare cliccando sull'oggetto appena creato (nell'esempio precedente semplicemente "C" senza le virgolette) e la frase da visualizzare nella message box (per esempio "Avvio del MS DOS 6.2" senza le virgolette);
  7. infine dopo aver selezionato il separatore Generale trascinate l'icona che ritenete più adatta nel campo Icona corrente.

A questo punto potremo trascinare il nuovo oggetto sul Pannello di avvio spostando l'oggetto originale dove preferiamo. Per chiudere la corrente sessione OS/2 riavviando il computer dalla partizione C su cui è installato, nel precedente esempio, il DOS 6.2 sarà sufficiente cliccare sull'icona del nuovo oggetto confermando od annullando poi il riavvio dalla message box che apparirà.
Creati diversi oggetti con impostazioni differenti, potremo riavviare il sistema dalla partizione preferita senza che sia necessario caricare il menu del Boot Manager e selezionare la partizione voluta.
Nota: con questo metodo i file INI non vengono aggiornati, per cui non vengono salvate alcune modifiche apportate recentemente al sistema come la nuova posizione delle icone sulla Scrivania, la dimensione di alcune finestre, ecc. Se non avete apportato alcun cambiamento importante, dall'ultima volta che avete avviato il sistema, potete tranquillamente usare REBOOTER.CMD, altrimenti è opportuno chiudere il sistema secondo il metodo usuale.


a cura di Alessandro Cantatore

Pagina
precedente
Home Page Sommario Pagina
successiva