VISIBILITÀ variabili

13 views
Skip to first unread message

Daniele Calanca

unread,
Dec 30, 2017, 8:57:59 AM12/30/17
to Harbour supporto utenti in italiano
Ultima richiesta per oggi.... dopo quasi 20 anni sono decisamente arrugginito...

Nel vecchio programma a cui sto rimettendo le mani ho un file prg scritto abbastanza in fretta tanti anni fa..

deltro al file .prg  c'è una funziona principale che fa da menù e una serie di funzioni accessrie che si occupano di riempire 2 varibili array che nel programma originale in CLIPPER erano definite come PRIVATE all'interno della funzione principale del file.

PRIVATE aTr[6],aCtr[6]

lo scopo era in orgine quello di avere accesso agli array da ogni singola funzione che era compresa nello stesso file .prg della funzione chiamante.

La cosa al compilatore evidentemente non piace perchè mi da:

C:\Users\wilcox\marinas-ide_05_06_64bit\gui\TRG.PRG(10) Warning W0002 Ambiguous reference, assuming memvar 'ACTR'

C:\Users\wilcox\marinas-ide_05_06_64bit\gui\TRG.PRG(10) Warning W0002 Ambiguous reference, assuming memvar 'ATR'


Per evitare di mettere mano al codice, trovando il modo di passare gli array alle funzioni, come posso fare per convincere Harbour che voglio utilizzare una paio di variabili che siano accessibili a tuttele funzioni di quel fil e.prg?

Massimo Belgrano

unread,
Jan 2, 2018, 4:13:18 AM1/2/18
to harbo...@googlegroups.com
public

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a harbourITA+unsubscribe@googlegroups.com.
Per postare in questo gruppo, invia un'email a harbo...@googlegroups.com.
Visita questo gruppo all'indirizzo https://groups.google.com/group/harbourITA.
Per altre opzioni visita https://groups.google.com/d/optout.



--
Massimo Belgrano
Delta Informatica S.r.l. (Cliccami per scoprire 

Maurizio la Cecilia

unread,
Jan 2, 2018, 5:07:10 AM1/2/18
to harbo...@googlegroups.com
Ciao Daniele,
dovrebbe essere sufficiente aggiungere l'opzione -a alla riga di comando harbour per avere automaticamente dichiarate come memvar le variabili non esplicitamente dichiarate.
Va bene nel tuo caso, se sei sicuro che il codice è corretto, ma è un settaggio che sconsiglio caldamente poiché può nascondere errori.
Saluti ed auguri.
--
Maurizio
--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a harbourITA+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a harbo...@googlegroups.com.
Visita questo gruppo all'indirizzo https://groups.google.com/group/harbourITA.
Per altre opzioni visita https://groups.google.com/d/optout.



Mail priva di virus. www.avast.com

Domenico D'Oria

unread,
Jan 3, 2018, 4:34:07 PM1/3/18
to Harbour supporto utenti in italiano
Ciao Daniele

In questi casi se le variabili stanno all'interno dello stesso file .prg io uso le variabili dichiarandole STATIC.

buon anno


Il giorno martedì 2 gennaio 2018 10:13:18 UTC+1, Massimo Belgrano ha scritto:
public

Il giorno 30 dicembre 2017 14:57, Daniele Calanca <d.ca...@gmail.com> ha scritto:
Ultima richiesta per oggi.... dopo quasi 20 anni sono decisamente arrugginito...

Nel vecchio programma a cui sto rimettendo le mani ho un file prg scritto abbastanza in fretta tanti anni fa..

deltro al file .prg  c'è una funziona principale che fa da menù e una serie di funzioni accessrie che si occupano di riempire 2 varibili array che nel programma originale in CLIPPER erano definite come PRIVATE all'interno della funzione principale del file.

PRIVATE aTr[6],aCtr[6]

lo scopo era in orgine quello di avere accesso agli array da ogni singola funzione che era compresa nello stesso file .prg della funzione chiamante.

La cosa al compilatore evidentemente non piace perchè mi da:

C:\Users\wilcox\marinas-ide_05_06_64bit\gui\TRG.PRG(10) Warning W0002 Ambiguous reference, assuming memvar 'ACTR'

C:\Users\wilcox\marinas-ide_05_06_64bit\gui\TRG.PRG(10) Warning W0002 Ambiguous reference, assuming memvar 'ATR'


Per evitare di mettere mano al codice, trovando il modo di passare gli array alle funzioni, come posso fare per convincere Harbour che voglio utilizzare una paio di variabili che siano accessibili a tuttele funzioni di quel fil e.prg?

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a harbourITA+...@googlegroups.com.

Per postare in questo gruppo, invia un'email a harbo...@googlegroups.com.
Visita questo gruppo all'indirizzo https://groups.google.com/group/harbourITA.
Per altre opzioni visita https://groups.google.com/d/optout.

Daniele Calanca

unread,
Jan 5, 2018, 6:21:45 PM1/5/18
to harbo...@googlegroups.com
>dovrebbe essere sufficiente aggiungere l'opzione -a alla riga di comando harbour per avere automaticamente dichiarate come memvar le variabili non esplicitamente dichiarate.
>Va bene nel tuo caso, se sei sicuro che il codice è corretto, ma è un settaggio che sconsiglio caldamente poiché può nascondere errori.

Grazie, ho trovato nell'ide la possibilità di aggiugere i parametri per la compilazione e il -a funziona.

Siccome sto riprendendo in mano cose che hanno una veneranda età, e siccome sono arrugginito e anche molto mi controllo tutti i warning, alcuni sono banali tipo definisco una variabile poi non la uso (ai tempi magari pensavo di usarla poi non l'ho fatto), in questo modo ricontrollo tutto il codice e pian piano mi tornano in mente le cose.

Alcune parti di codice proprio non so come le ho tirate fuori...

ho questo GET con un VALID che chiama la funzione Eval() che ormai faccio fatica a capire cosa dovrebbe fare

@15,20 GET cStaz   PICTURE "@K!" VALID IF(Empty(cStaz),FALSE,Eval(bChkSt))

con

LOCAL bChkSt  := {|| SeekExact(AllTrim(cStaz)),;
                     If(Eof(),FALSE,Eval({||;
                                           nNs := NORD,;
                                           nEs := EST,;
                                           DevPos(15,36),;
                                           DevOut(Transform(NORD,;
                                                            '9999999999.999')),;
                                           DevPos(15,55),;
                                           DevOut(Transform(EST ,;
                                                            '9999999999.999')),;
                                           TRUE})) }


a occhio mi sembra di capire che faccio un ricerca sull'input, se la ricerca ha successo assegno due campi a due variabili, scrivo a schermo i valori trovati e ritorno TRUE..

è un pezzo di codice che devo aver riciclato più volte che mi dava un WARNING sulle due variabili  nNs e nEs, poi mi sono accorto  che il warning era perchè dentro all'eval assegnavo i valori alle variabili, poi però non li usavo in quella funzione....

Penso che mi terrò quel Warnig per il momento senza andare a modificare il codice, almeno per il momento...

Grazie ancora e Buon Inizio di Anno a Tutti

Daniele Calanca

unread,
Jan 6, 2018, 2:31:51 PM1/6/18
to Harbour supporto utenti in italiano
Alla fine sono riuscito a compilare tutti e 54 i file e a creare l'exe

Non ci sono aggiunte strane, è il vecchio programma che funzionava sotto dos con clipper

Effettivamente il programma parte mi chiede la password poi mi da subito questo errore, sospetto che sia qualche problema di directory o di file che non trova...anche se ho ricreato la configurazione originale che era su C:\ su un disco mappato con un'altra lettera  e che viene letta da un file .ini



devo indagare per capire di che errore si tratta
Auto Generated Inline Image 1

Francesco Perillo

unread,
Jan 6, 2018, 2:35:41 PM1/6/18
to harbo...@googlegroups.com
Prova a mettere
memvar nns, nes

Così dici al compilatore che le variabili sono già definite 

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a harbourITA+unsubscribe@googlegroups.com.

Maurizio la Cecilia

unread,
Jan 7, 2018, 3:33:39 AM1/7/18
to harbo...@googlegroups.com
Quel messaggio di errore indica che in una operazione di somma o concatenazione di stringhe uno dei due argomenti è errato.
Potrebbe essere una variabile non inizializzare il cui contenuto è NIL quindi incompatibile in entrambi i casi.
Ti avevo avvisato sugli effetti di quel parametro di compilazione...

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a harbourITA+unsubscribe@googlegroups.com.

Daniele Calanca

unread,
Jan 7, 2018, 9:33:50 AM1/7/18
to harbo...@googlegroups.com
>Quel messaggio di errore indica che in una operazione di somma o concatenazione di stringhe uno dei due argomenti è errato.
>Potrebbe essere una variabile non inizializzare il cui contenuto è NIL quindi incompatibile in entrambi i casi.
>Ti avevo avvisato sugli effetti di quel parametro di compilazione...

Risolto, avevo pasticciato un po' cercando di eliminare tutti i warning, anche se tecnicamente avrebbe dovut funzionare anche lasciandoli.

Riprovando a compilare il prg originale mi crea un exe funzionante ma ho degli errori di runtime come questo:

Inline image 1

nella versione originale che gira compilata con clipper dentro a una macchina virtuale il programma funziona

il codice interessato è questo:

LOCAL bChkPt1 := {|| SeekExact(AllTrim(cPunto1)),;
                    If(Eof(),Eval({|| lFound := FALSE,FALSE}),;
                             Eval({|| nY1 := FIELD->NORD,;
                                      nX1 := FIELD->EST,;
                                      lFound := TRUE,;
                                      DevPos(11,35),;
                                      DevOut(Transform(FIELD->NORD,;
                                                       '9999999999.999')),;
                                      DevPos(12,35),;
                                      DevOut(Transform(FIELD->EST ,;
                                                       '9999999999.999')),;
                    
                  TRUE})) }
LOCAL cPunto1
LOCAL cPunto2
LOCAL lFound := TRUE



la variabile bChkPt1 viene usata per validare un input che è questo:

   cPunto1 := Space(14)
   cPunto2 := Space(14)  
   @12,10 GET cPunto1 PICT "@K!" VALID IF(Empty(cPunto1),FALSE,Eval(bChkPt1)) COLOR C_INV

   @11,35 GET nX1 PICTURE '9999999999.999' WHEN !lFound
   @12,35 GET nY1 PICTURE '9999999999.999' WHEN !lFound
   @16,10 GET cPunto2 PICT "@K!" VALID IF(Empty(cPunto2),FALSE,Eval(bChkPt2)) COLOR C_INV
   @15,35 GET nX2 PICTURE '9999999999.999' WHEN !lFound
   @16,35 GET nY2 PICTURE '9999999999.999' WHEN !lFound

   IF !READ()
      VOID
   ELSE
      Msg_Start(10,48,17,72)
      Msg(" DISTANZA "+Transform(Dist(nX1,nY1,nX2,nY2),"#####.###"))
      InKey(0)
      Msg_End()
   ENDIF



appare la maschera di inserimento

Inline image 2

ma se inserisco il nome del punto che deve cercare (su un dbf che è aperto) appena premo invio mi dice che CPUNTO1 non esiste.

Mi sembra di capire che nel momento in cui cerca di validare l'input non riconosca CPUNTO1  che è dentro dentro a bChkPt1.

Con clipper funzionava, faceva la ricerca nel DBF aperto se trovava il nome del punto riportava le coordinate trovate  come in figura.

Inline image 3

(funzionava anche la pressione del tasto F1 che nella versione Harbour non fa effetto alcuno

Reply all
Reply to author
Forward
0 new messages