Tabelle di conversione definite dall'utente

Se si specifica SRVERCP=USR o USRD in una macro DFHCNV TYPE=ENTRY, è necessario fornire tabelle di conversione definite dall'utente. Il programma di conversione standard (DFHCCNV) utilizza queste tabelle, che sono disponibili per il programma di conversione sostituibile dall'utente, DFHUCNV. Inserire le tabelle di conversione definite dall'utente nell'origine della macro DFHCNV, in un punto qualsiasi dopo la macro DFHCNV TYPE=INITIAL.

Suggerimento: Per la leggibilità del sorgente, il posto migliore è probabilmente dopo la macro DFHCNV TYPE=FINAL.

SRVERCP=USR

È necessario fornire due tabelle di conversione dei caratteri, denominate ASTOEB e EBTOAS.

Ogni tabella deve avere una lunghezza di 256 byte. ASTOEB viene utilizzato per la conversione da ASCII a EBCDIC e EBTOAS per la conversione da EBCDIC a ASCII. Il valore esadecimale di un byte di carattere viene utilizzato come offset nella tabella di conversione per ottenere il valore convertito del carattere. La Figura 1 illustra questo processo.

Figura 1. Struttura delle tabelle di conversione SBCS
L'immagine mostra due tabelle di conversione, denominate ASTOEB e EBTOAS. Le tabelle sono numerate da X'0 a X'F lungo entrambi gli assi, per un totale di 256 valori possibili per ogni tabella. Nell'esempio, il carattere ASCII X'47 si converte nel carattere EBCDIC X A3 e il carattere EBCDIC X'BC si converte nel carattere ASCII X'23. (X'4 lungo l'asse verticale e X'7 lungo l'asse orizzontale della tabella ASTOEB dà il valore EBCDIC X A3. X'B lungo l'asse verticale e X'C lungo l'asse orizzontale della tabella EBTOAS dà il valore ASCII X'23)

SRVERCP=USRD

È necessario fornire le tabelle di conversione dei caratteri DBCS, denominate DBASTOEB e DBEBTOAS, nella sorgente DFHCNV. Devono trovarsi dopo la macro DFHCNV TYPE=INITIAL, altrimenti in qualsiasi punto del sorgente. Ogni tabella deve essere un elenco di 256 puntatori a quattro byte e 256 coppie di tabelle di traduzione a 256 byte. Il primo byte di un carattere DBCS viene utilizzato come indice dell'elenco dei puntatori. Utilizzando il primo byte del carattere DBCS come offset esadecimale nell'elenco, il puntatore trovato è l'indirizzo di una coppia di tabelle di traduzione da 256 byte. Il secondo byte del carattere DBCS viene utilizzato come offset in ciascuna delle due tabelle di traduzione a 256 byte per ottenere il primo e il secondo byte del carattere DBCS convertito. La Figura 2 illustra questo processo.

È inoltre necessario fornire una tabella di conversione SBCS come specificato in precedenza nella sezione USR.
Figura 2. Struttura delle tabelle di conversione DEBUTS
L'immagine mostra una parte di una tabella di conversione dei caratteri DBCS, denominata DBASTOEB. Ii consiste in un elenco di 256 puntatori a 4 byte, etichettati da X'00 a X'3FC, e in una coppia di tabelle di traduzione a 256 byte. Nell'esempio, il carattere ASCII a doppio byte X'6AE9 si converte nel carattere EBCDIC X CC22. Il valore all'offset X'6A nell'elenco dei puntatori è l'indirizzo di questa coppia di tabelle di traduzione. All'offset X E9 di queste tabelle, i valori dei byte sono X'CC e X'22.

Considerazioni sui caratteri DBCS non validi e non definiti

In ASCII ed EBCDIC, alcuni intervalli di codici sono codici DBCS validi. Qualsiasi valore a doppio byte al di fuori di questi intervalli è un carattere DBCS non valido. Nelle tabelle di conversione fornite, i caratteri DBCS non validi vengono convertiti in X'FFFF', come definito dall'architettura della pagina di codice.

All'interno dell'intervallo di codici valido, diverse migliaia di valori a doppio byte sono definiti come caratteri DBCS effettivi. Un valore a doppio byte compreso nell'intervallo di codici valido, ma non definito come carattere DBCS, è un carattere DBCS non definito.

Le tabelle definite dall'utente devono seguire queste convenzioni per i caratteri non validi e non definiti.