Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


[script] loadTcl v2.1.2
#1
Description:
Ce script permet de charger d'autres scripts, via des commandes en public et en PartyLine.

Sous cette façade plutôt simple, le script intègre de nombreuses fonctionnalités :
- Chargement de multiples scripts d'un coup (le nombre maximum est réglable)
- Utilisation de jokers dans les noms de fichier (le nombre d'occurences maximum est réglable)
- Complétion automatique des extensions si besoin
- Affichage du temps de chargement
- Affichage d'éventuelles erreurs survenant pendant le chargement des scripts
- Définition de "noms courts" pour les scripts, permettant d'associer un certain nom à un fichier (par exemple, pubqsys pour public_quotes_system.tcl)
- Rechargement (ou non) du dernier script chargé si pas d'arguments
- Nombres d'occurence pour les jokers, les scripts au total, et le nombre de lignes de debug réglables
- Recherches par Regexp, mais désactive une partie des autres fonctionnalités
- Changement de l'encodage au chargement des fichiers

A noter qu'une grande partie des options est réglable par des switchs dans la commande.


Intérêt:
Pour la plus part des utilisateurs, ce script ne présentera pas beaucoup d'intérêt. Cependant, si vous désirez charger un grand nombre de fichier d'un coup (tout un dossier, tous les fichiers contenant tel truc, tous les fichiers .tcl, etc) il peut être plutôt utile, ou si vous testez, par exemple, des scripts interagissant entre eux.

Il faut aussi noter que recharger un script seul est généralement plus prudent que de rehasher l'eggdrop, puisque le rehash plante l'eggdrop dans le cas, par exemple, d'une erreur de syntaxe. Avec ce script, le chargement est indépendant, ce qui ne plantera pas l'eggdrop en cas d'erreur.

J'avais fait ce script afin de gagner du temps (comme dans l'exemple plus haut, public_quotes_system.tcl c'est long à écrire) - mais au final je pense que j'ai perdu beaucoup plus de temps en faisant ce script (mais vous n'aurez pas à vous soucier de la perte de temps, vous).

Note: Le script est désormais compatible avec compat.tcl

Téléchargement: loadTcl version 2.1.2
  Répondre
#2
Nouvelle Version 2.0.0.3 !

Au programme :
- La partie de filtrage à été complétement refaite. Plutôt que plein de globs, c'est maintenant beaucoup plus lisible, court, logique, et surement rapide : un glob est effectué, et les recherches sont faites par lsearch. (Note de dernière minute: un glob est effectué par sous répertoire demandé pour permettre d'aller chercher dans d'autres repertoires)
- Ajout du switch -dmax: pour définir le nombre de lignes max de debug
- Ajout du switch -gmax: pour définir le nombre d'occurence maximum en joker
- Ajout de -subst et -nosubst pour autoriser ou empecher le remplacement par les noms courts
- Retrait du switch -exact précédent - et ajout de -exact -glob et -regexp, fonctionnant comme dans les commandes TCL
- Correction de petits trucs par ci par la
  Répondre
#3
Artix a écrit :IMPORTANT: Compat.tcl doit être déchargé !
Tout simplement car le script utilise la commande TCL time pour indiquer le temps de chargement - et que compat.tcl la remplace par un equivalent de strftime %H:%M.
Avoir de telles exigences say le mal.
tcl
set timestart [clock clicks -milliseconds]
 
(...) blablabla (...)
 
puthelp "PRIVMSG $chan :[expr ([clock clicks -milliseconds]-$timestart)/1000.00]s"


Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#4
Oué je vais faire un remplacement pour la commande time en cas de besoin (dans le namespace de loadTcl) sur la prochaine version
Principe: au moment du chargement, le script testera (dans un catch) si l'utilisation de time est possible (pas d'erreur, et bon format de la valeur retournée)
Dans le cas ou elle existe, la proc appelera simplement time en lui passant les arguments
Dans l'autre cas, eh bien euh, ca sera un uplevel 1, et le temps sera compté avec clock

Edit: Corrigé dans la version 2.0.0.4 (voir premier post)
  Répondre
#5
Au lieu de faire un catch pour voir si ça passe ou si ça casse, tu pourrais tester si compat.tcl est chargé en testant la présence de la procédure time :
tcl
if { [info procs time] ne "" } { ... }


Je suppose que ça ne doit pas changer grand chose mais je suis allergique aux catch sauf quand ils sont nécessaires pour exploiter une valeur de return.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#6
Oh >< Méga bonne idée.. je change

Edit: C'est fait
En plus de vérifier si la proc time existe, on vérifie aussi l'existance de la commande tcl (au cas ou elle aurait été renomée) pour palier à toutes les éventualités
En plus, le script de vérification s'éxecute dans un bloc after 0. Il s'éxecutera donc en dernier (après la lecture de tout le fichier de config et le chargement de tous les scripts).
  Répondre
#7
Sur remarque de Mareo, le script intègre désormais les encodages avec le switch -encoding
Indiquer -encoding:name changera l'encodage pour name dans chaque fichier chargé
L'encodage est réinitiallisé entre 2 chargements, et il est possible de décider d'un encodage par défaut dans le script. Il est aussi possible de simplement utiliser l'encodage actuel.
Cepedant, j'ai pu observer un problème avec l'encodage unicode:
Les vérifications file exists sont bien passés, mais le fichier n'est finalement pas trouvé dans le source.... Si vous avez plus d'informations, n'hésitez pas à m'en faire part

Edit: A noter que je me suis planté dans les numéros de version
La version 2.0.0.5 devrait etre la 2.0.5.0,
et la version 2.1.0.0 est bien celle ci (malgré que le fichier s'appelle loadTcl-2.0.1.0.tcl)
  Répondre
#8
Version 2.1.1.0
- Correction des numéros de version (*oops*)
- Modification de la méthode de chargement.
Au lieu de charger en utilisant source après sécurisation du nom de fichier,
Le fichier est désormais ouvert dans le script, et son contenu est passé directement dans le uplevel
Le script devrait donc ainsi être plus rapide (à vérifier puisque tout le code du script chargé doit donc passer par time, catch et uplevel), et permet désormais le chargement de scripts utilisant des encodages comme unicode (utilisation de fconfigure pour changer l'encodage).
  Répondre
#9
Version 2.1.2
- Re-correction du numéro de version. Le 4e n'était peut être pas neccessaire ._.
- Ajout d'un problème nottament concernant les scripts TopicWarden et le Motus, empechant d'utiliser la commande de rechargement. Celle-ci utilise en fait info script, dont la valeur est normalement initialisée par source. Le script n'utilisant pas source mais chargeant le script manuellement (pour fonctionner avec unicode), le chemin vers le fichier (info script) est désormais initialisé manuellement, en ajoutant une instruction avant le reste du fichier.
  Répondre
#10
Artix a écrit :- Ajout d'un problème nottament concernant les scripts TopicWarden et le Motus, empechant d'utiliser la commande de rechargement. Celle-ci utilise en fait info script, dont la valeur est normalement initialisée par source. Le script n'utilisant pas source mais chargeant le script manuellement (pour fonctionner avec unicode), le chemin vers le fichier (info script) est désormais initialisé manuellement, en ajoutant une instruction avant le reste du fichier.
Est-il vraiment nécessaire d'ajouter des problèmes ? :°
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)