Newsgroup: it.comp.software.cad
Titolo: [LISP]scrivere un percorso relativo e non assoluto

ho fatto un lisp dove grazie a
(startapp "notepad" "E:/prova/version.txt")
apro il file version.txt
a parte che non ho capito se l'estensione  .txt va scritta o no, perchè
tanto autocad lo apre lo stesso, ma la domanda è:
siccome il lisp andrà distribuito, e quindi non sempre version.txt sarà in
e:\prova, come fare? La cosa certa è che version.txt sarà sempre nella
stessa cartella dove c'è il lisp, ma come dire al lisp "nella cartella dove
ci sei te?"
oppure come mettere un percorso relativo, come si fa in html è cioè
puntoslash per indicare la stessa cartella?
--
Studio geometra MIRANO Dario
www.studiomirano.it
Progettazione - Direzione lavori - Catasto terreni e fabbricati -
Cartellonistica - Grafica 2D e 3D

 ci sei te?"
se il lisp viene caricato con (load "mioLisp") [senza percorso] allora:
(startapp "notepad" (findfile "version.txt"))
-- 
----------------------------------------------------------
Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
Per AutoCAD:
- Travi 2D: disegno automatico travi e pilastri in C.A.
  a 99€
- Elaborazione dati from/to Excel
- Librerie manufatti in assonometria
- Autolayers: gestione automatica dei layers
- Elaborazioni e stampe multiple e automatiche
- Parametrico 2D, Viterie 2D/3D, Esplosi 2D/3D
- AutoGroups: gestione automatica gruppi di layers
- SetUp del disegno con gestione automatica DimStyles
- Conversione automatica files Inventor a DWG e viceversa
  anche senza avere Inventor installato
- ...
----------------------------------------------------------

avevo provato con findfile, ma la sintassi che riporta l'help mi pare chieda
anche di specificare una cartella dove cercare il file, quindi ero di nuovo
al punto d'accapo.
Adesso provo a fare come hai detto tu.
Grazie mille anche per questa risposta !


no, non va......in effetti il lisp non viene caricato senza percorso, perchè
anche esso può essere posizionato in una cartella qualsiasi. Il lisp è
caricato nel menu d'avvio.
Il fatto è che io dovrei ricavare la cartella nel quale è sito il
lisp......ma come fare?
In pratica dovrei scrivere una cosa del genere:
(startapp "notepad" (strcat (lastessacertelladiquestolisp "/version.txt")))
come trovo "lastessacertelladiquestolisp" ?
Inoltre mi succede che comunque se metto il percorso intero, quando si apre
notepad, apre il file che gli dico, ma poi la sua finestra viene subito
ridotta ad icona. Non che sia un groso guaio, però sarebe bello rimanesse in
primo piano......


ma riesci a leggere il percorso dove si trovano il file?

> Il lisp è caricato nel menu d'avvio.
Puoi riportare il codice che carica questo Lisp.

allora.....
il lisp è questo:
(defun c:miolisp ()
(startapp "notepad" (findfile "C:\\cartellaacaso\\help.txt"))  ;ho messo
findfile, ma se lo levo è la stessa cosa
  )
il lisp si trova all'interno della cartella "cartellaacaso" e viene lanciato
dalla seguente riga di menu:
***MENUGROUP=MIO MENU
***POP16
ID_help     [&Mio help]miolisp;
tale menu viene anch'esso posizionato nella cartella "cartellaacaso".
Ora, l'utente che installa il mio lisp, copierà lisp e menu nella cartella
"cartellaacaso" di sua scelta e poi provvederà al caricamento in autocad del
menu e del lisp (in modo permanente mettendolo nei lisp caricati sempre
all'avvio).
Il mio problema e che sarebbe troppo chiedere all'utente di modificare anche
il percorso della cartella nel lisp che richiama help.txt, quindi volevo
modificare
(startapp "notepad" (findfile "C:\\cartellaacaso\\help.txt"))
mettendo una sorta di percorso relativo o in qualche altro modo che possa
andare bene con qualsiasi cartella
come fare?

aggiungo ancora questo, leggendo la variabile: menuname, ottengo il percorso
del menu, ma non del mio menu, bensì del menu di autocad......come ottenere
il percorso del mio menu?Questo risolverebbe tutto

> come ottenere il percorso del mio menu?Questo risolverebbe tutto
Senza VLisp (penso che così tu chieda) non so come si possa fare.
Io costringerei l'utente ad aggiungere il percorso "cartellaacaso"
a quelli di AutoCAD così risolveresti questo ed altri problemi.
Il tutto si può fare anche automaticamente ma è un discorso lungo.


> Senza VLisp (penso che cosě tu chieda) non so come si possa fare.
in che senso?Con Vlisp si puň fare?E come?
Forse mi son perso un pň la differenza tra vlisp e lisp------

> in che senso?Con Vlisp si può fare?E come?
(defun ALE_MenuFileNameList ( )
  (vl-load-com)
  (princ "\nMenu FileName List:")
  (vlax-for MnuGrp (vla-get-MenuGroups (vlax-get-acad-object))
    (princ "\n\n")
    (princ (vla-get-MenuFileName MnuGrp))
  )
  (princ)
)
-- 
----------------------------------------------------------
Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
Per AutoCAD:
- Travi 2D: disegno automatico travi e pilastri in C.A.
  e relativi ferri e staffe (99€)
- Calcolo automatico aree su planimetrie: report su Excel
  per locale altezza, piano
  con descrizioni locali e piani (49€)


che dire.....grazie duemila!
scusa, adesso però ti devo chiedere una cosa, per VLISP, indendi il lisp che
fa uso delle librerie VL o VLAX? Cioè quelle per cui usi vl-load-com?
Ne avevo già usata qualcuna, per esempio per leggere tutti  i file contenuti
in una cartella (vedi post di qualche settimana fa dove mi consigliavano una
applicazione dos arx gratuita), ma non pensavo che fosse questa la
differenza tra lisp e vlisp. Ma ci sono situazioni in cui è ancora
necessario usare solo il lisp e non il vlisp?


 necessario usare solo il lisp e non il vlisp?
Si, ad esempio se il programma deve "girare" su versioni precedenti
alla 2000 o in IntelliCad.

> una opzione a pagamento) e che a chiamato Visual Lisp.
 una opzione a pagamento) e che ha chiamato Visual Lisp.