Successivo: GNV su VMS, Precedente: Dettagli installazione su VMS, Su: Installazione su VMS [Contenuti][Indice]
gawk su VMSL’elaborazione della riga di comando e le convenzioni per proteggere i
caratteri sono significativamente differenti in VMS, e quindi gli esempi
presenti in questo Documento o provenienti da altre fonti necessitano
piccole modifiche. Le modifiche, tuttavia, sono veramente piccole, e
tutti i programmi awk dovrebbero funzionare correttamente.
Ecco un paio di semplici test:
$ gawk -- "BEGIN {print ""Hello, World!""}"
$ gawk -"W" version
! ma anche -"W version" o "-W version"
Si noti che il testo con caratteri maiuscoli e misti maiuscoli/minuscoli dev’essere incluso tra doppi apici.
La versione VMS di gawk comprende un’interfaccia in stile DCL,
oltre a quella originale, di tipo shell (si veda il file di aiuto per ulteriori
dettagli). Un effetto indesiderato della duplice analisi della riga
di comando è che se c’è solo un unico parametro (come nel programma con le
righe contenenti doppi apici), il comando diviene ambiguo. Per evitare questo
inconveniente, il flag, normalmente non necessario, -- è necessario
per forzare un esame dei parametri in stile Unix, piuttosto che nella modalità
DCL. Se qualsiasi altra opzione preceduta dal segno - (o più
parametri, per esempio, più file-dati in input) è presente, non c’è ambiguità,
e l’opzione -- può essere omessa.
Il valore di exit è un valore in stile Unix e viene trasformato in
un codice di ritorno VMS all’uscita del programma.
I bit di severità di VMS saranno impostati a partire dal valore dell’istruzione
exit. Un errore grave è indicato da 1, e VMS imposta la condizione
ERROR. Un errore fatale è indicato da 2, e VMS imposta la condizione
FATAL. Ogni altro valore imposta la condizione SUCCESS. Il
valore d’uscita è codificato per aderire agli standard di codifica VMS e avrà
un C_FACILITY_NO di 0x350000 con il codice costante 0xA000
aggiunto al numero spostato a sinistra di 3 bit per far posto al codice di
severità.
Per estrarre il codice reale di ritorno dell’istruzione exit
di gawk dalla condizione impostata da VMS, si usi:
unix_status = (vms_status .and. %x7f8) / 8
Un programma C che usa exec() per chiamare gawk
riceverà il valore originale della exit in stile Unix.
Precedenti versioni di gawk per VMS consideravano un
codice di ritorno a Unix di 0 come 1, un errore come 2,
un errore fatale come 4, e tutti
gli altri valori erano restituiti immodificati. Questa era una violazione
rispetto alle specifiche di codifica delle condizioni di uscita di VMS.
L’aritmetica in virgola mobile VAX/VMS usa un arrotondamento statistico. Vedi la sezione Arrotondamento di numeri.
VMS restituisce data e ora in formato GMT, a meno che non siano stati impostati
i nomi logici SYS$TIMEZONE_RULE o TZ. Precedenti versioni di
VMS, come VAX/VMS 7.3, non impostano questi nomi logici.
Il percorso di ricerca di default, nella ricerca dei file di programma per
awk specificati dall’opzione -f, è
"SYS$DISK:[],AWK_LIBRARY:". Il nome logico AWKPATH può essere
usato per sostituire questo di default. Il formato di AWKPATH è una lista
di directory, separate da virgola. Nel definirla, il valore dovrebbe essere
incluso tra doppi apici, in modo che consenta una sola traduzione, e non una
lista di ricerca multitraduzione RMS.
Questa restrizione vale anche se si esegue gawk sotto GNV,
in quanto la ridirezione è sempre verso un comando DCL.
Se si ridirigono dati verso un comando o un programma di utilità VMS,
l’implementazione corrente richiede la creazione di un comando VMS esterno che
esegua un file di comandi, prima di invocare gawk.
(Questa restrizione potrebbe essere rimossa in una futura versione di
gawk per VMS.)
Senza un tale file di comandi, i dati in input saranno presenti anche in output, prima dei dati di output veri e propri.
Ciò consente la simulazione di comandi POSIX non disponibili in VMS o l’uso di programmi di utilità GNV.
L’esempio seguente mostra come ridirigere dati da gawk verso il
comando VMS sort.
$ sort = "@device:[dir]vms_gawk_sort.com"
Il file di comandi deve avere il formato dell’esempio seguente.
La prima riga serve a evitare che i dati in input siano presenti anche nell’output. Dev’essere nel formato mostrato nell’esempio.
La riga seguente crea un comando esterno che prevale sul comando esterno superiore, che serve a prevenire una ricorsione infinita di file di comandi.
Il penultimo comando ridirige sys$input su sys$command,
per poter ottenere i dati che sono ridiretti verso il comando.
L’ultima riga esegue il comando vero e proprio. Dev’essere l’ultimo
comando, perché i dati ridiretti da gawk saranno letti
quando il file di comandi finisce di essere eseguito.
$!'f$verify(0,0)' $ sort := sort $ define/user sys$input sys$command: $ sort sys$input: sys$output:
Successivo: GNV su VMS, Precedente: Dettagli installazione su VMS, Su: Installazione su VMS [Contenuti][Indice]