Successivo: , Precedente: , Su: Installazione su VMS   [Contenuti][Indice]


B.3.2.4 Eseguire gawk su VMS

L’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: , Precedente: , Su: Installazione su VMS   [Contenuti][Indice]