Newsgroup: it.comp.lang.vo-clipper
Titolo: [VO 2.x] UNION

Ciao,
Qualcuno ha provato ad utilizzare le UNION con VO?
Funzionano?
Nell'help di VO c'è questo esempio:
UNION wb ALIGN 1
    MEMBER w AS WORD
    BYTE bLo AS BYTE
    BYTE bHi AS BYTE
Func x
 local u is wb
 u.w := 0x1234
 ? u.bLo  // 52 (=0x34)
 ? u.bHi  // 18 (=0x12)
La cosa interessante di questo es. è che tramite questo statement è
possibile emulare le REDEFINES del COBOL (forse l'unica cosa che sentivo la
mancanza nel CLIPPER rispetto al COBOL ).
Io ho provato a compilare tale es. ma mi dice che la sintassi è invalida.
Qualcuno ha provato lo stesso esempio? Siete riusciti a compilarlo?
Ho qualche impostazione di compilazione sbagliata?
Io compilo con VO 2.5-b3.
Ciao,
       Fabrizio Malaguti
P.S.
     Ancora buon anno a tutti

 mancanza nel CLIPPER rispetto al COBOL ).
O le omonime union del C e del C++.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 EMG



Prova a dichiararlo in questo modo:
UNION wb ALIGN 1
    MEMBER w AS WORD
    MEMBER bLo AS BYTE
    MEMBER bHi AS BYTE
ciao
Antonello
===============================================
Antonello Negrone - Biella - Italy
anto...@anc-software.it
www.anc-software.it

 Io compilo con VO 2.5-b3.
Penso sia l'ennesio bug dell'help di VO.
Ciao Mario Costantino

    MEMBER DIM b[2] AS BYTE
In che senso "come in C"? La sintassi di cui sopra non ha nulla a che
vedere con quella del C.
EMG
--


     MEMBER bHi AS BYTE
Non funziona. Sia bLo che bHi ritornano lo stesso valore ( nell'es. 52)
Poi ho dovuto togliere l' ALIGN 1 nella dichiarazione in quanto mi dava
degli errori di compilazione.
Grazie comunque del suggerimento.
Per ora funziona solo una cosa del genere:
UNION wb
       MEMBER  w AS WORD
       MEMBER  sW IS STRUWB
STRUCT STRUWB
       MEMBER bLo  AS BYTE
       MEMBER bHi  AS BYTE
FUNCTION FF()
       local u is wb
       u.w := 0x1234
       ? u.sW.bLo  // 52 (=0x34)
       ? u.sW.bHi  // 18 (=0x12)
pero' non è la stessa cosa di
       ? u.bLo  // 52 (=0x34)
       ? u.bHi  // 18 (=0x12)
Ciao,
       Fabrizio Malaguti


 vedere con quella del C.
Chiaramente mi riferivo alla sintassi.
\VO
 UNION wb
    MEMBER w AS WORD
    MEMBER DIM b[2] AS BYTE
\C
 UNION wb
 word w
 char c[2]
Ciao Mario Costantino.

        ? u.bHi  // 18 (=0x12)
Secondo me, semplicemente , non e' ottenibile.
Ciao Mario Costantino.

 Ciao Mario Costantino

 Non funziona. Sia bLo che bHi ritornano lo stesso valore ( nell'es. 52)
E' giusto che sia cosě. In una union tutti i campi condividono la stessa
area di memoria e quindi contengono la stessa combinazione di bit,
interpretata diversamente a seconda del tipo di dato.



Continua a non avere niente a che vedere con il C. Prova a compilare
quanto sopra con un compilatore C e vedrai che risultato (UNION non
esiste, word non esiste, mancano le graffe e i punti e virgola). La
sintassi C corretta si vede nel seguente esempio funzionante:
#include <stdio.h>
int main()
{
    union wb
    {
        int w;
        char b[ 2 ];
    } wbtest;
    wbtest.w = 12345;
    printf( "%d\n", wbtest.w );
    wbtest.b[ 0 ] = 'a';
    wbtest.b[ 1 ] = 'b';
    printf( "%c\n", wbtest.b[ 0 ] );
    printf( "%c\n", wbtest.b[ 1 ] );
    return 0;


 evitando di usare le SUBSTR().
Se sai già il formato del file di testo allora basta che utilizzi una
struct (o, se serve, una struct di union).


 Secondo me, semplicemente , non e' ottenibile.
Sono d'accordo. Per lo meno non nel modo suddetto.



Non mi riferivo, ovviamente, alla sintassi corretta, ma solo dare un idea.
Ciao Mario Costantino.


Secondo me con l'informatica è sempre meglio essere precisi altrimenti
si rischiano grossi fraintendimenti.


 struct (o, se serve, una struct di union).
Si penso che sia la soluzione migliore. Sicuro che sia una Struct di UNION e
non una UNION di STRUCT?
Ciao,
      Fabrizio Malaguti
P.S.
    Buon anno.
P.S.2
    Lavori anche il 1°? Io si   :-<


 Ciao Mario Costantino.

     Lavori anche il 1°? Io si   :-<
Ti ho già detto che io lavoro *sempre*! :-)
