![]() |
Corso di programmazione in REXX - Lezione 4 - nozioni avanzate![]() |
Il REXX e i file batch rem HELP.CMD (versione batch OS/2) @echo off if %1.==. goto msg if %1 == on goto yes if %1 == off goto no if %1 == ON goto yes if %1 == OFF goto no if %1 == On goto yes if %1 == oN goto yes if %1 == OFf goto no if %1 == OfF goto no if %1 == Off goto no if %1 == oFF goto no if %1 == oFf goto no if %1 == ofF goto no helpmsg %1 goto exit :msg helpmsg goto exit :yes prompt $i[$p] goto exit :no cls prompt :exitIl programma REXX equivalente è: /* HELP.CMD - ottiene l'help per un messaggio di sistema */ arg action . select when action='' then 'helpmsg' when action='ON' then 'prompt $i[$p]' when action='OFF' then do 'cls' 'prompt' end otherwise 'helpmsg' action end exit
Trapping degli errori nell'esecuzione dei comandi
Le istruzioni SIGNAL ON e CALL ON inoltre fanno sì che
l'interprete del REXX memorizzi il numero di riga dello script in cui
è il comando che ha provocato la rilevazione della condizione di errore. L'uso delle istruzioni CALL e SIGNAL comporta diversi vantaggi:
Istruzioni e condizioni SIGNAL ON condition [NAME trapname] CALL ON condition [NAME trapname]dove:
Usando SIGNAL ON o CALL ON per la rilevazione solo di condizioni ERROR, si ottiene la rilevazione sia di condizioni di ERROR che di FAILURE. Se viene specificata anche una condizione di FAILURE allora la condizione di ERROR ignora il rilevamento di FAILURE. Opzionalmente è possibile usare la parola chiave NAME per specificare una particolare subroutine da eseguire quando viene rilevata una condizione di ERROR o FAILURE.
Se il trap è specificato tramite NAME, il REXX salta alla
riga di codice successiva all'etichetta specificata. Questo argomento verrà approfondito ulteriormente in seguito.
Disabilitazione dei trap SIGNAL OFF ERROR SIGNAL OFF FAILURE CALL OFF ERROR CALL OFF FAILURE
Uso di SIGNAL ON ERROR "COPY" file1 file2l'esecuzione passa direttamente alle righe successive all'etichetta error:. /* esempio di "error trap" */ signal on error /* Stabilisce il trap */ . . . +--<-"COPY" file1 file2 /* se si verifica un errore ... */ | . | . | exit . +--->error: /* ...salta all'etichetta */ say "Errore" rc "alla linea" sigl say "Il programma non può continuare." exit /* e termina il programma */
Uso di CALL ON ERROR /* esempio di ripristino da una condizione di errore */ call on error . . . +--<- "COPY" file1 file2 | say file2 "in uso" -<---------------+ | . | | . | | exit | +---> error: | say "Impossibile trovare" file1 | say "Premere S per continuare." | pull ans | if ans = "S" then | do | /* crea un nuovo file */ | . | . | . | file2 = "dummy.fil" | RETURN ->---------------------+ end else exit
Esempio di routine per la gestione degli errori /* SIGERR.CMD: esempio di gestione degli errori */ signal on error /* abilita il rilevamento degli errori */ "ersae myfiles.*" /* istruzione ERASE scritta scorretta */ exit /* questa è una routine generica di gestione degli errori */ error: say "Errore" rc "in una chiamata di sistema." say say "numero riga =" sigl say "istruzione = " || sourceline(sigl) exit
Il programma PMREXX
L'uso del programma PMREXX è semplice. Per una singola istruzione basta digitare dalla riga di comando, per esempio: PMREXX rexxtry say "Ciao programmatore!"PMREXX mostrerà "Ciao programmatore!" in una finestra PM, poi farà apparire una finestra di dialogo per notificare che il programma REXX è terminato. Un semplice programma REXX per mostrare il contenuto delle directory: /* REXXDIR.CMD */ '@echo off' Do Forever Say "Introdurre il nome di un file o directory" Parse Pull filename If filename = "" Then Leave "dir" filename EndPer provare il programma digitate al prompt: PMREXX [PATH\]REXXDIRspecificando al posto di [PATH\] il path in cui è collocato REXXDIR.CMD se questo non si trova nella directory corrente o in una delle directory incluse nella direttiva PATH del CONFIG.SYS. Nella finestra inferiore del PMREXX verrà mostrato: Introdurre il nome di un file o directorynella finestra superiore del PMREXX si dovrà digitare il nome del file o della directory, premendo poi INVIO. Se si preme INVIO senza scrivere alcun nome il programma termina. Le barre di scorrimento possono essere usate per poter visualizzare le precedenti linee non più visibili. La finestra del PMREXX può essere ridimensionata o posizionata a piacere e tramite il menu si può scegliere se salvare quanto è nella finestra del programma su file, selezionare, copiare, tagliare, incollare, cancellare parte del testo mostrato, eseguire il programma REXX interattivamente un'istruzione per volta, cambiare il font usato dal programma, ecc..
La funzione RxMessageBox /* ERROR.CMD : controlla il parametro introdotto */ arg count if datatype(count, 'Whole') = 0 then do call RxMessageBox "Il parametro" count "non è un numero intero!" exit endScrivendo da riga di comando: PMREXX ERROR 3.5otterremo una finestra di dialogo con la scritta "Il parametro 3.5 non è un numero intero" che potremo chiudere cliccando sul pulsante OK. Oltre a poter mostrare qualsiasi messaggio, tramite RxMessageBox possiamo utilizzare diversi pulsanti e icone: /* FILECHK.CMD: controlla l'esistenza di un file */ arg file if stream(file, 'Command', "Query Exists") <> '' then do reply = RxMessageBox("Vuoi leggere il file" file"",, "Confermi?", "YesNo", "Question") if reply = 7 then exit /* se l'utente preme NO */ end "@e" file /* apre file con e.exe */ exitScrivendo da riga di comando ad esempio: PMREXX FILECHK C:\CONFIG.SYSse il file C:\CONFIG.SYS è presente sul disco, verrà mostrata una finestra di dialogo con Confermi? come titolo, un icona con un punto interrogativo e due pulsanti Yes e No. Se si clicca sul pulsante Yes la funzione restituirà un valore pari a 6, mentre cliccando sul No si otterrà 7. Maggiori informazioni sull'uso di RxMessageBox sono contenuto nella documentazione relativa al REXX inclusa nel sistema operativo.
L'opzione TRACE del PMREXX E' anche possibile attivare o disattivare il tracing successivamente dal menu Opzioni.
|