Newsgroup: it.comp.lang.vo-clipper
Titolo: aiuto 2 - da  Summer87 a Xharbour

Salve,
come già detto non sono esperto del clipper, ma mi occorre di
dover provare a migrare da S87 a Xharbour alcuni vecchi programmi.
Ora mi sto scontrando con il problema delle variabili, in particolare
con il fatto che alcune (le public, mi pare) non sono più accessibili dalle
procedure che seguono quella in cui sono definite o valorizzate.
C'è qualcuno che può spendere due parole per spiegarmi i vari tipi di
variabili
che sono utlizzabili e quale potrebbe essere la soluzione al mio problema
(e prevedo purtroppo che non sarà questo l'ultimo) .
grazie
Paolo

 (e prevedo purtroppo che non sarà questo l'ultimo) .
Le PUBLIC e PRIVATE sono pienamente compatibili con quelle del Clipper 5
(e del S87, se ricordo bene). Il Clipper 5 ha poi introdotto le LOCAL e
le STATIC. Le LOCAL sono definibili solo all'inizio di una FUNCTION o
PROCEDURE e sono visibili solamente all'interno della stessa. Le STATIC
sono definibili all'inizio di una FUNCTION o PROCEDURE e in questo caso
sono visibili solamente all'interno di essa. Oppure sono definibili
fuori da ogni FUNCTION o PROCEDURE e in questo caso sono visibili in
tutto il PRG (ma non da altri PRG della stessa applicazione). In ogni
caso le STATIC non vengono mai rilasciate e quindi conservano il loro
valore per tutto il tempo di esecuzione del programma. Invece le LOCAL
vengono rilasciate al termine della FUNCTION o PROCEDURE che le ha
definite.
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
The EMG Music page:         
http://www.emagsoftware.it/emgmusic

 EMG
Cerco di spiegarmi meglio.
Le variabili public esistono e a quanto mi pare godono ottima salute,
ma stanno nelle loro procedure.
Il "mio" programma, in altre procedure, cita (referenzia) i nomi di
queste variabili senza più definirle (ovviamente), ma il
precompilatore mi ha segnalato l'utilizzo di variabili non definite e
mi ha spinto a ridefinirle.
A questo punto ho definito (ahimè!) delle LOCAL che non contengono
ovviamente il valore previsto.
Come fare ??
E' sufficiente duplicare nelle procedure successive a quelle di prima
definizione, la definizione delle variabili public utilizzate?
Grazie. 
sono st

 definizione, la definizione delle variabili public utilizzate?
E' meglio se ti faccio un esempio funzionante:
FUNCTION MAIN()
    PUBLIC cVar
    cVar = "Da MAIN()"
    ? cVar
    MYFUNC()
    ? cVar
    INKEY( 0 )
    RETURN NIL
FUNCTION MYFUNC()
    M -> cVar = "Da MYFUNC()"
    RETURN NIL
Forse il tuo problema è che non avevi utilizzato M -> oppure MEMVAR per
dichiarare la variabile.



scusami, Enrico, ma insisto per capire meglio.
Cosa ne dici di una variante cosě fatta ?
FUNCTION MAIN()
    PUBLIC cVar
    cVar = "Da MAIN()"
    ? cVar
    MYFUNC()
    ? cVar
    INKEY( 0 )
    RETURN NIL
FUNCTION MYFUNC()
//    M -> cVar = "Da MYFUNC()"
      public cVar    // fatta cosě č proprio "sporca" eh?
                           // A me serve portarmi dietro il valore
                           // ed usarlo.
                          // In SUM97, se non sbaglio
                          // lo si usava e basta.
    ? cVar
      cVar := "cambio"
    ? cVar
    RETURN NIL

                           // lo si usava e basta.
Dammi retta, dimentica il S87. Sono passati 18 anni, non ti pare che sia
ora di aggiornarsi?



è proprio quello che sto cercando di fare (con il tuo consistente aiuto, in
verità)
ma ogni volta che tocco qualcosa il "vecchio" mi frega.....

Mi scuso, ma ho bisogno di "qualche" delucidazione in più sulle macro,
la cui logica di utilizzo non mi è per nulla chiara.
Ora, in fase di sistemazione delle variabili ho provato a definirne alcune
come STATIC
eliminando le plurime definizioni che avevo sparso per il programma (
dapprima alcune volte come PUBLIC e poi
in aggiunta altre come LOCAL).
Ho posto la definizione
STATIC  CNFB
all'inizio del programma, al di fuori della prima procedure.
Ora mi prendo svariati messaggi (sempre uguali ) che dicono:
 Error E0042  Macro of declared symbol: 'CNFDB'
a fronte di statement del tipo :
            index on codesam to ESSTI0&CNFDB
            set index to ESSTI0&CNFDB,ESSTI1&CNFDB
.......
             index on codesam to RIPRI0&CNFDB
            set index to RIPRI0&CNFDB,RIPRI1&CNFDB
..........
           save to XXXX&CNFDB..CNF all like CF*
......
          use APPOGG&CNFDB index APPOGG&CNFDB
Mi scuso ma ho qualche difficoltà a predisporre ed allegare un esempio
compilabile.
Spero tuttavia che gli esempi siano suffcienti per ottenere un aiuto.
grazie

           use APPOGG&CNFDB index APPOGG&CNFDB
use ( "APPOGG" + CNFDB ) index ( "APPOGG" + CNFDB )


> > > Ora mi sto scontrando con il problema delle variabili, in
particolare...
Scusatemi ma adesso ho questo piccolo problema sempre con le variabili.
Dalla documentazione ho acquisito che ad esempio:
local pippo := 1234     //  imposta una variabile numerica
local pluto  := "salve"   //  imposta una variabile carattere
local data :=15/12/2004 // vorrebbe essere una variabile data ma non
funziona !!
Domanda:
come si definisce e valorizza una variabile di tipo data ??
grazie

 come si definisce e valorizza una variabile di tipo data ??
local data := CToD( "15/12/2004" )
local oggi := Date()



l'utilizzo di queste istruzioni, da me si conclude con:
Error E0009  Illegal variable 'XXXXX' initializer: '->'
Hai idea di quale possa esser la causa ??
Per caso non č che č vietato usarle con le variabili di tipo static ??

 Per caso non è che è vietato usarle con le variabili di tipo static ??
Sì, esatto. Le STATIC possono essere inizializzate solo con valori
costanti. Puoi però assegnarle come ti pare all'inizio del programma,
dentro la prima funzione.
