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]