Author |
Topic: Paramètres/Variables externes ou globaux (Read 2349 times) |
|
ANdre_B
Board Master
Email
Gender:
Posts: 2880
|
|
Paramètres/Variables externes ou globaux
« on: Aug 24th, 2018, 3:02pm » |
Quote | Modify
|
On peut activer un script en l'appelant en "mode exécution", ou en "mode développement" (ce dernier étant l'appel avec CTRL, suivi d'une activation avec les flèches bleues). Est-ce que le code peut savoir comment le script a été appelé? Par exemple pour activer un "mode rapide" en cas d'appel "exécutant", un "mode paramétré" dans cas d'un appel "développement"? Et deuxième question, liée seulement dans ma tête: Peut-on sauver des variables "externes"? donc plus que globales, et qui restent accessibles "pour toujours" sur le même système/utilisateur? (sauf crash éventuellement). Un peu le principe des cookies... Je peux évidemment sauver des variables dans un ou plusieurs fichiers, en les étiquetant correctement... Merci
|
|
offline |
André Baeck, de retour en Belgique après 12 ans passés dans le Gard. Windows 11, HA 997e (et précédents)
|
|
|
Geo
Board Master
Gender:
Posts: 2497
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #1 on: Aug 25th, 2018, 10:42am » |
Quote | Modify
|
Bonne question La gestion et l'utilisation des "globaux" (et des sous-programmes) mériterait une chapitre dans la documentation, exemples à l'appui. C'est sur le forum que j'ai appris comment afficher leur contenu dans la fenêtre des variables DOS, sans savoir exactement ce qui est mémorisé ou pas. Pour ma part, j'ai essayé de me baser sur des scripts livrés avec HA et j'ai tenté de faire mon propre module "GLOBAUX.Mys" appelé par Include, je vous en dévoile les premières lignes : -------------------- -- Définitions utilisées dans les Programmes appelants -- ne pas mettre dans les Sp cela réinitialise les variables -- -- variables globales (en majuscules) -- SOUS_PROGRAMME = true -- pour les modules appelés CODE_RETOUR = nil GLOBAL_PARTITION = nil GLOBAL_PUPITRE = nil --------...-------------------------- J'y ai mis aussi une fonction pour pouvoir l'utiliser dans le programme appelant. Peut-on modifier durablement les valeurs "définies" dans ce fichier en Myrscript ? Théoriquement sa durée de vie est limitée à l'exécution du programme appelant. Sauf à modifier le fichier lui-même dans le script et le réécrire. Est-ce possible ? Il n'est pas évident que l'accès au fichier soit autorisé et si ça marche, les modifications ne seront prises en compte qu'au prochain chargement sans doute. Après, la difficulté est de ne pas se mélanger les pinceaux entre modification de valeur d'une variable et modification de la source du module. Avec des idées claires au départ, ça doit être possible. Votre idée de mettre des valeurs stables dans un fichier texte me parait une bonne idée, il faut quand même développer les fonctions classiques de recherche, lecture, modification, ajout. On pourrait mettre tout ça dans un module ... global.
|
|
offline |
|
|
|
ANdre_B
Board Master
Email
Gender:
Posts: 2880
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #2 on: Aug 26th, 2018, 11:08am » |
Quote | Modify
|
Je ne suis pas (encore) à avoir des "sous-scripts", seulement à exécuter des scripts en mode rapide, dans certains cas (via un raccourci et sans interaction). Mais j'ai trouvé, presque par hasard, ce que je cherche: lorsqu'un script est appelé en mode "debug", l'include "MsDefine" est appelé préalablement. Ce qui n'est pas le cas en cas d'appel direct. Cela me semble bizarre, car on peut voir un script - où on a oublié cet include - fonctionner parfaitement en mode debug, et pas du tout ensuite... Mais enfin, pour le moment je vais prendre cela pour ce que ça m'apporte... Quant aux variables de type cookie, je vais probablement m'y lancer (en utilisant des fichiers externes) au début septemble, si entre-temps personne n'a de meilleure suggestion. Ce que je cherche maintenant, c'est à sortir "proprement" d'un script de type "fenêtre flottante". Il me semble que coder "exit()" marche parfois, mais pas toujours.
|
|
offline |
André Baeck, de retour en Belgique après 12 ans passés dans le Gard. Windows 11, HA 997e (et précédents)
|
|
|
Geo
Board Master
Gender:
Posts: 2497
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #3 on: Aug 26th, 2018, 6:55pm » |
Quote | Modify
|
Quote: ... lorsqu'un script est appelé en mode "debug", l'include "MsDefine" est appelé préalablement. Ce qui n'est pas le cas en cas d'appel direct. Cela me semble bizarre, car on peut voir un script - où on a oublié cet include - fonctionner parfaitement en mode debug, et pas du tout ensuite... |
| Pour le moins bizarre en effet. Quote: ... Il me semble que coder "exit()" marche parfois, mais pas toujours. |
| Pas eu de surprise de ce côté, je fais toutes mes sorties anticipées de script de cette manière, je n'ai pas de souvenir particulier à ce sujet.
|
|
offline |
|
|
|
PaulL
Board Master
Retired organist and choir director; former progra
Gender:
Posts: 1134
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #4 on: Aug 26th, 2018, 10:19pm » |
Quote | Modify
|
You guys are talking about having a config file for a script, right? It ought to be simple to implement, I should think. Of course, we're talking about HA here . . .
|
|
offline |
Le coeur a ses raisons, que la Raison ne connaît point. Paul Littlefield, retired Church musician
HA+VS+PdfToMusic Linux Mint 21.3 Cinnamon
|
|
|
ANdre_B
Board Master
Email
Gender:
Posts: 2880
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #5 on: Aug 27th, 2018, 8:27am » |
Quote | Modify
|
Yes, Paul, we are talking HA, or more precisely MyrScript... I'm not thinking specifically of a configuration file, in which my usual preferences or default values are stored. I have that in the form of an Include file. What I mean, is to store variables (which can be personal settings) somewhere above the MyrScript variables, so that they remain from one call of the script to the other, over one or more invocations of HA, over one or more Windows startups. Just as many settings in HA itself (herself? it may be seen as a boat in which we are all sailors.... ) are staying till changed the next time. Yes, if that does not exist in a hidden or simply unknown way, that could be implemented through an Include which is dyanamically built. Easier to say...
|
|
offline |
André Baeck, de retour en Belgique après 12 ans passés dans le Gard. Windows 11, HA 997e (et précédents)
|
|
|
PaulL
Board Master
Retired organist and choir director; former progra
Gender:
Posts: 1134
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #6 on: Aug 27th, 2018, 8:21pm » |
Quote | Modify
|
Windows system variables used to persist from startup to startup, as long as there was one controlled shutdown to make them be saved. If that's still true with Windows 10, I have no idea. Or how one would go about setting them. (Oh, how I miss XP!) But once you figure out how to introduce a system variable into the Windows environment, you next have to figure out if a script can access it. Good question! I'll do a little experimenting when I have time. My bet is that Lua has some way of doing that, and further that the Guillons retained that ability in Myrscript, simply because it would be needed from time to time I bet even further that it's not in the documentation, or this thread wouldn't exist, am I right?
|
|
offline |
Le coeur a ses raisons, que la Raison ne connaît point. Paul Littlefield, retired Church musician
HA+VS+PdfToMusic Linux Mint 21.3 Cinnamon
|
|
|
Geo
Board Master
Gender:
Posts: 2497
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #7 on: Aug 28th, 2018, 4:10pm » |
Quote | Modify
|
Paul a donné une piste. Voici un extrait du manuel Myrscript au paragraphe : GetPreferencesPathName(...) "Important note : Because the content of this folder is shared between scripts, [...] Your file name must begin with the first 5 characters of your personal registration code, followed by the name you want. [...] " J'avoue ne pas avoir tout compris. Effectivement j'ai dans ce dossier des fichiers du genre : XHOSZ-GestionDesParoles.cfg qui sont des fichiers texte. Le travail de lecture / écriture reste à faire mais au moins, il y a un dossier réservé pour cela. Pour Windows, de mémoire il est assez facile de faire des variables, pour les utiliser, c'est une autre affaire.
|
|
offline |
|
|
|
ANdre_B
Board Master
Email
Gender:
Posts: 2880
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #8 on: Aug 28th, 2018, 4:41pm » |
Quote | Modify
|
on Aug 27th, 2018, 8:21pm, PaulL wrote:I bet even further that it's not in the documentation, or this thread wouldn't exist, am I right? |
| Paul, I would humbly say that I didn't find anything like that in the documentation. Like in any treaty - up to philosophy and theology - , the manual is full of responses. But it does not always state the questions which are answered... We poor guys can make searches on the keywords of our questions, which may not use the same vocabulary as the responses. An expert is somebody who doesn't know answers, but the language of the answers.
|
|
offline |
André Baeck, de retour en Belgique après 12 ans passés dans le Gard. Windows 11, HA 997e (et précédents)
|
|
|
ANdre_B
Board Master
Email
Gender:
Posts: 2880
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #9 on: Aug 28th, 2018, 4:59pm » |
Quote | Modify
|
Je ne cherche pas nécessairement à remonter au niveau de Windows, je peux très bien rester en HA... J'ai regardé ce path de préférences, j'y trouve des préférences enregistrées par le script "Join Files" ("Raboute Fichiers"). Ce script en fait un usage malgré tout assez limité. Je ne pensais pas vraiment à des préférences (je les ai dans une fonction), mais à l'état MRU ("most recently used") des variables. Quand un test est en cours, je change certaines options pour gagner du temps, et j'oublie toujours de refaire cela à chaque essai. Maintenant, entre une préférence stable, et une préférence temporaire, il n'y a techniquement pas de grande différence, sauf que la dernière demande plus d'automation. Avant de me lancer, je réfléchis sur la méthode (le preferences path pouvant être le réceptacle). Je peux, dans un fichier, enregistrer des suites de valeurs, le script retenant ce que signifie chaque ligne. Je peux aussi enregistrer une suite sans ordre de paires "nom de variable" et "valeur" (il peut y avoir des enregistrements successifs de la même variable, c'est la dernière qui compte). Je penche pour créer un fichier qui peut être lu par un simple "include".
|
|
offline |
André Baeck, de retour en Belgique après 12 ans passés dans le Gard. Windows 11, HA 997e (et précédents)
|
|
|
Geo
Board Master
Gender:
Posts: 2497
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #10 on: Aug 28th, 2018, 6:56pm » |
Quote | Modify
|
Quote: Je peux aussi enregistrer une suite sans ordre de paires "nom de variable" et "valeur" ... |
| Oui, on y met ce qu'on veut. L'avantage c'est que le script est utilisable par d'autres personnes sans préjuger de l'organisation de leurs disques. La forme nom de variable : valeur est la plus classique, la plus lisible et la plus souple qu'on trouve dans le paramétrage de HA. Il y a aussi la solution plus simple qui semble être utilisée dans les quelques fichiers cfg que j'ai vu, la ligne 1 est la valeur de telle variable, la ligne 2 une autre variable etc. En début de script on lit tout le fichier en affectant les valeurs trouvées. C'est bien plus simple à programmer, il faut juste faire suivre la documentation à chaque évolution.
|
|
offline |
|
|
|
ANdre_B
Board Master
Email
Gender:
Posts: 2880
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #11 on: Aug 28th, 2018, 8:15pm » |
Quote | Modify
|
Quote: ... Il me semble que coder "exit()" marche parfois, mais pas toujours. |
| on Aug 26th, 2018, 6:55pm, Geo wrote: Pour le moins bizarre en effet. Pas eu de surprise de ce côté, je fais toutes mes sorties anticipées de script de cette manière, je n'ai pas de souvenir particulier à ce sujet. |
| Apparemment ça marche lorsqu'on est dans une des "méthodes" des boutons et autres textes d'une fenêtre flottante, mais pas dans les fonctions de la fenêtre elle-même.
|
|
offline |
André Baeck, de retour en Belgique après 12 ans passés dans le Gard. Windows 11, HA 997e (et précédents)
|
|
|
Daniel Frouvelle
Board Master
WWW | Email
Gender:
Posts: 1610
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #12 on: Aug 29th, 2018, 9:02am » |
Quote | Modify
|
Bonjour André, Geo, si ça peut vous éclairer voici comment je procède dans la plupart des scripts que j'ai faits: Dans la fonction d'initialisation* je déclare un fichier de préférences que je vais lire dans la fonction "LoadPreference": (exemple ici je vais lire et sauvegarder la position de la fenêtre du script), à la sortie du script je vais écrire dans ce fichier ces deux valeurs dans la fonction "SavePreference"), avec les précautions d'usage (fichier inexistant ou valeur nulle, conversion chaine>nombre). *On prendra soin d'initialiser avant l'appel à "LoadPreference" les valeurs désirées sachant qu'au tout premier démarrage du script le fichier des préférences n'existe pas ----------------------- function Init(dialog) dialog.AreaLeft=292 dialog.AreaTop=32 prefFileName="WHLED-Test1.cfg" dialog.LoadPreference(dialog) end --------------------------- function Exit(dialog) dialog.SavePreference(dialog) end -------------------------- function LoadPreference(dialog) local file local currentPath currentPath=GetCurrentPath() SetCurrentPath(GetPreferencesPathName()) file=OpenFile(prefFileName,"rb") if(file~=nil) then a=tonumber(file.Read("l")) if a~=nil then dialog.AreaLeft=a end a=tonumber(file.Read("l")) if a~=nil then dialog.AreaTop=a end file.Close(); end SetCurrentPath(currentPath) end ------------------------ function SavePreference(dialog) local file local currentPath currentPath=GetCurrentPath() SetCurrentPath(GetPreferencesPathName()) file=OpenFile(prefFileName,"wb") if(file~=nil) then file.WriteString(dialog.AreaLeft) file.WriteChar(13) file.WriteString(dialog.AreaTop) file.WriteChar(13) file.Close(); end SetCurrentPath(currentPath) end --------------------------------- Amistats, Danièl.
|
« Last Edit: Aug 29th, 2018, 9:11am by Daniel Frouvelle » |
offline |
|
|
|
Geo
Board Master
Gender:
Posts: 2497
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #13 on: Aug 29th, 2018, 7:48pm » |
Quote | Modify
|
Bonsoir Danièl Merci pour ce code qui correspond à la deuxième approche dont je parlais ci-dessus : la n-ième ligne correspond à un paramètre précis. L'avantage c'est que tu as pensé à tous les cas de figure. Une question : le préfixe pour le nom du fichier, ce sont les 5 premiers caractères de ta clef HA ? Ou as-tu demandé un "identifiant développeur" à Myriad ?
|
|
offline |
|
|
|
Daniel Frouvelle
Board Master
WWW | Email
Gender:
Posts: 1610
|
|
Re: Paramètres/Variables externes ou globaux
« Reply #14 on: Aug 29th, 2018, 9:25pm » |
Quote | Modify
|
Quote:le préfixe pour le nom du fichier, ce sont les 5 premiers caractères de ta clef HA ? Ou as-tu demandé un "identifiant développeur" à Myriad ? |
| C'est bien les 5 premiers caractères de ma clé. Ce n'est pas une obligation mais une précaution pour éviter les doublons (c'est un conseil des concepteurs).
|
|
offline |
|
|
|
|