Doc en : http://www.scolring.org/files/doc_html/syspack.html @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Diverses API pour Scol à intégrer typiquement, lorsque validées, dans le noyau une des bibliothèques stables de Scol. *** benchmark.c =============== Fonctions de benchmarks. - ObjBenchmark : nouvel objet Scol. Il pourra s'étoffer en interne par la suite, si nécessaire ... :) - _benchmarkStart : lance le test. Détermine le temps que met un code Scol à s'exécuter sur la machine. Prototype : fun [Chn] ObjBenchmark - _benchmarkEnd : stoppe le test et retourne les valeurs obtenues sous forme de paire ("clef" "valeur"). L'objet est détruit. Prototype : fun [ObjBenchmark] [[S S] r1] *** standard_library.c ====================== Nouvelles fonctions de la bibliothèque standard. - strextrS : extraction de sous-chaines d'une chaine selon un pattern particulier. Cette fonction est similaire à 'strextr' mais avec la définition d'un pattern. Prototype : fun [S S] [[S r1] r1] - listextr : extraction de la sous-liste contenue entre deux indices d'une liste. Prototype : fun [[u0 r1] I I] [u0 r1] - strfind2List : liste des occurences d'une sous-chaine dans une chaine. strfind ne retourne que la position de la première occurence, strfind2List retourne les positions de toutes les occurences trouvées. Possibilité de ne commencer la recherche qu'à partir d'une position initiale donnée. Prototype = fun [S S I] [I r1] - strfindAnyChar : retourne la première occurence trouvée dans la chaine 'entrée' en débutant à une position donnée, d'un des caractères présent dans une chaîne 'motif'. Par exemple, < strfindAnyChar "ouagadougou" "gud" 0 > retournera le tuple [1 "u"]. Prototype : fun [S S I] [I S] - strncat : concatène deux chaines, la seconde chaîne étant ajouté au plus la longueur indiquée. Prototype : fun [S S I] S - strtruncate : tronque une chaîne à une longueur voulue. Attention, la chaîne est dynamiquement modifiée et sa mémoire allouée réallouée si bien que son contenu initial est perdu. Les écritures suivantes donnent le même résulat mais je conseille la première : < strtruncate maChaine 10; _fooS maChaine; > < set maChaine = strtruncate maChaine 10; _fooS maChaine; > Prototype : fun [S I] S - _fooF : affiche dans la console et écrit dans le log un flottant (F). Cette fonction est similaire à _fooId (pour les I). Prototype : fun [F] F - _fooFn : indentique à _fooF mais permet de limiter la longueur de la partie décimale. Prototype : fun [F I] F Example : <_fooFn 12.225 2;> affichera 12.23 (mais la variable restera à 12.255) - strreplace : remplace toutes lesoccurences d'une sous-chaine dans une chaine à partir d'une position donnée. Retourne une nouvelle chaine. Prototype : fun [S S S I] S - strF : fonction analogue à la fonction standard C sprintf quant à son objectif. Prototype : fun [S u0] S Remarque : la fonction est polymorphique sur son deuxième argument. Attention cependant, ce 2nd argument est censé être un TUPLE à l'exclusion de tout autre chose. Si tel n'était pas le cas, aucune erreur ne se décelée à la compilation mais l'application crashera lors de l'appelà cette fonction. Donc, le second argument est un tuple ! Example : < typeof chaine = S;; ... set chaine = strF "La prise de la %s a eu lieu le %d %s %d à %s." ["Bastille" 14 "juillet" 1789 "Paris"]; // Chaine contiendra désormais : La prise de la Bastille a eu lieu le 14 juillet 1789 à Paris. > - sprintf : alias de strF. - printf : même chose que sprintf / strF mais ajoute la chaine résultat au log / à la console. Le flag peut valoir une des valeurs suivantes : 1, 2, 4, 8, 16 (mask du log). Même remarque que pour strF. Prototype : fun [S u0 I] S Voir la doc temporaire : docs/standard_library.html - memoryInfos : retourne des informations sur l'usage actuelle de la mémoire Retourne toujours NIL sur un système autre que MS Windows. Prototype : fun [] [I I I I I I I I] * le % total utilisé * mémoire physique totale (ko) * mémoire phyique libre (ko) * mémoire paginée totale (ko) * mémoire paginée libre (ko) * mémoire virtuelle totale (ko) * mémoire virtuelle libre (ko) * non implémenté. Toujours 0. - powerInfos : retourne des informations sur l'alimentation courante Retourne toujours NIL sur un système autre que MS Windows. Prototype : fun [] [I I I I I] * Branché actuellement sur secteur : 0 : non, 1 : oui, 255 : inconnu * Etat actuel de la batterie : 1 : capacité > 60%, 2 : capacité < 33%, capacité < 5%, 8 : en charge, 128 : pas de batterie (typiquement sur secteur), 255 : inconnu (peut prendre une combinaison de ces valeurs, par exemple 9 (8 et 1)) * Capacité actuelle de la batterie (0 -> 100) ou 255 si inconnu * Temps restant estimé en secondes * Non implémenté. Vaut 0. - memoryMinMax : retourne l'occupation mémoire minimale et maximale du processus de la VM courante (seulement le processus, sans les dépendances). Retourne toujours NIL sur un système autre que MS Windows. Prototype : fun (] [I I] * valeur minimale * valeur maximale - osInfos : retourne les informations disponibles sur le système d'exploitation Prototype : fun [] [S S S S] Sous Microsoft Windows : * Système d'exploitation : 2000, XP, Vista et Seven * Service pack (s'il y a lieu) * Build NUMBERFMT * Architecture (32 ou 64 bits) Sous GNU/Linux (renvoie 'uname', peut changer selon les distributions) : * Système d'expoitation * Version du kernel * Version de la distribution * Architecture Autres systèmes : retourne nil Exemple MS Windows : _fooS sprintf "OS : %s\nService pack : %s\nBuild number : %s\nArchitecture : %s\n" osInfos; Exemple GNU/Linux : _fooS sprintf "OS : %s\nKernel :%s\nDistribution : %s\nArchitecture : %s\n" osInfos; Affichage possible sous MS Windows : OS : Microsoft Windows Seven Service pack : Build number : 7600 Architecture : 32-bit Affichage possible sous GNULinux : OS : Linux Kernel : 2.6.32-34-generic Distribution : #76-Ubuntu SMP Tue Aug 30 16:19:34 UTC 2011 Architecture : i686 - getUserName : retourne le nom de l'utisateur courant. Interroge la variable d'environnement (USER sous Linux, USERNAME sous Windows) Prototype : fun [] S - getUserRealName : retourne le nom réel de l'utilisateur courant. Sous Windows, cette fonction est identique à 'getUserName'. Sous GNU/Linux, cette fonction interroge le fichier /etc/passwd et retourne la valeur correspondante s'il y a lieu. En cas d'erreur, retourne de la même façon que 'getUserName'. Prototype : fun [] S - getScolPath : retourne le chemin absolu de l'exécutable scol. Prototype : fun [] S Exemple : _fooS getScolPath; >> C:\Program Files\Scol Voyager (windows) >> /home/iri/Works/Prog/Scol (linux) - sleep : met en pause le nombre indiqué de secondes. Sous MS Windows, retourne toujours 0. Sous GNU/Linux, retourne 0 si la pause a été complète ou le temps restant si elle a été stoppé par un signal ou tout autre évènement. Prototype : fun [I] I - _checkDirectory : retourne une référence en lecture d'un répertoire situé en priorité dans la partition utilisateur, sinon dans la partition administrateur. Prototype : fun [S] DP Retourne nil si erreur. - _getModifyDirectory : retourne une référence en écriture d'un dossier situé dans la partition utilisateur. Prototype : fun [S] DW - searchFile : recherche un fichier dans une arborescence (dossier et sous-dossiers). Prototype : fun [DP S] P * une référence de dossier (DP) * un nom de fichier Retourne une référence en lecture du fichier ou nil si non trouvé ou erreur Exemple : _fooS searchFile _checkDirectory "tests/net" "myfile.txt"; - _createDirectory : crée un répertoire dans la partition utilisateur Prototype : fun [DW S] I Retourne 0 si ok, nil si erreur. - _deleteDirectory : supprime un répertoire vide. Une confirmation est demandée via une popup. Prototype : fun [DW] I Retourne 0 si ok, nil sinon. - getFileMd5 : calcule l'empreinte md5 d'un fichier. Prototype : fun [P] S Retourne nil si erreur - getStringMd5 : calcule l'empreinte md5 d'une chaîne Prototype : fun [S] S Retourne nil si erreur - getSourceMd5 : calcule l'empreinte md5 pour chaque package chargé dans l'environnement du canal considéré. Ce peut être utile afin de définir si une application devrait être mise à jour. Ou encore pour vérifier qu'une application diffusée correspond bien à la version du code source disponible. Prototype : fun [Chn] [[S S] r1] Demande un canal en entrée et retourne une liste de tuples de tous les packages chargés dans l'environnement du canal fourni en argument. Chaque tuple est composé du nom du package (son chemin relatif) et de l'empreinte md5. Exemple : fun readMd5Source (list)= if list == nil then 0 else ( _fooS sprintf "pkg = %s md5 = %s" hd list; readMd5Source tl list );; readMd5Source getSourceMd5 _channel; - getPackages : retourne la liste complète des packages chargés dans l'environnement du canal fourni en argument. Prototype : fun [Chn] [S r1] - getScolMd5 : retourne la liste des empreintes md5 de tous les fichiers configurés dans l'usm.ini. Il est possible d'ajouter une liste de fichiers supplémentaires. Cette fonction devrait être utilisée soit pour mettre à jour Scol soit pour vérifier manuellement la présence d'une mise à jour. Prototype : fun [[S r1]] [[S S] r1] * en argument, une liste de fichiers supplémentaires dont les empreintes md5 sont demandées. Cette liste DOIT contenir des chemins de fichiers relatifs au répertoire de l'exécutable Scol. * Retourne une liste de tuples contenant chacun le chemibn relatif du fichier à l'exécutablme Scol et son empreinte md5. Exemple : fun readMd5Source (list)= if list == nil then 0 else ( _fooS sprintf "pkg = %s md5 = %s" hd list; readMd5Source tl list );; readMd5Source getScolMd5 "ext.ini"::"scolapp.ini"::"ScolNet.class"::"ScolObserver.class"::"ScolTest.class"::nil; *** tempfile.c ============== Nouvelles API pour la gestion de fichiers temporaires. Ceux-ci sont automatiquement uniques et automatiquement effacés lorsque l'objet Scol est détruit ou que la VM est fermée. Ces fichiers sont utiles pour stocker durant l'exécution d'un programme des données de manière ... temporaire. L'API ressemble à celle existante sur les fichiers ANSI. - FileTemp : nouveau type Scol correspondant à un fichier temporaire - _FILEOpenTemp : ouvre (et crée automatiquement) un fichier temporaire. Prototype : fun [Chn] FileTemp - _FILECloseTemp : détruit (et ferme et efface) un fichier temporaire. Prototype : fun [FileTemp] I - _FILEReadTemp : lit le contenu d'un fichier temporaire depuis la position courante du curseur sur un certain nombre d'octet. Prototype : fun [FileTemp I] S - _FILESizeTemp : retourne la taille du fichier temporaire. Prototype : fun [Filetemp] I - _FILETellTemp : retourne la position actuelle du curseur dans le fichier temporaire. Prototype : fun [FileTemp] I - _FILESeekTemp : déplace la position actuelle du curseur d'un fichier tmporaire. Prototype : fun [FileTemp I I] I - _FILEWriteTmp : écrit une chaîne quelconque dans un fichier temporaire. Prototype : fun [FileTemp S] I Voir la doc temporaire : docs/tempfile.html *** lib_string.c ================ Quelques fonctions utiles sur les chaînes de caractères. *** lib_sys.c ============= Quelques fonctions utiles au niveau "système". Par exemple, lib_sys_getPathPartition retourne le chemin absolu de la partition utilisateur. r toute commande FTP comprises par le serveur - sftp:// pour toute commande FTP comprise dans le serveur (ssh activé bien entendu) - smtp:// envoi simple de courriel Prévu ou en cours : - scp:// - smtp:// envoi de courriels avec pièces jointes, authentification TLS, ... - Note : pour l'heure, ces fonctions sont SYNCHRONES Note : les fichiers locaux sont strictement limitées à la partition utilisateur active de Scol, que ce soit en lecture ou en écriture. Note : les callbacks Scol des fonctions de cete API sont, en fait, une seule et unique fonction. Il est donc possible (mais non obligatoire !)de ne coder qu'une seule callback et de différencier chaque entrée par le paramètre utilisateur ou, mieux, l'objet ObjCurl correspondant. - ObjCurl : nouveau type Scol correspondant - _curlNewUrl : ouvre une nouvelle connexion (protocole http:// mais peut être un autre si aucun paramètre spécifique n'est nécessaire). Prototype simple : fun [Chn S [S r1] I S @cb u0] ObjCurl Prototype : fun [Chn S [S r1] I S fun [ObjCurl u0 S I S S] u1 u0] ObjCurl - _curlNewUrlAuth : ouvre une nouvelle connexion sécurisée (protocole https://). Prototype simple : fun [Chn S [S r1] [S I] I S @cb u0] ObjCurl Prototype : fun [Chn S [S r1] [S I] I S fun [ObjCurl u0 S I S S] u1 u0] ObjCurl - _curlNewFtp : ouvre une connexion FTP avec l'envoi de commandes FTP quelconques. Prototype simple : fun [Chn S [[S I] r1] S S @cb u0] ObjCurl Prototype : fun [Chn S [[S I] r1] S S fun [ObjCurl u0 S I S S] u1 u0] ObjCurl - _curlNewFtpGet : download un fichier par FTP. Prototype simple : fun [Chn S S S S @cb u0] ObjCurl Prototype : fun [Chn S S S S fun [ObjCurl u0 S I S S] u1 u0] ObjCurl - _curlNewFtpPut : upload d'un fichier local par FTP. Possiblité d'y adjoindre des commandes FTP avant et/ou après le transfert. Prototype simple : fun [Chn S S [[S I] r1] S S @cb u0] ObjCurl Prototype : fun [Chn S S [[S I] r1] S S fun [ObjCurl u0 S I S S] u1 u0] ObjCurl - _curlNewSFtp : ouvre une connexion SFTP (FTP via un tunnel SSH) et envoi de commandes SFTP quenconques. Prototype simple : fun [Chn S [[S I] r1] S S @cb u0] ObjCurl Prototype : fun [Chn S [[S I] r1] S S fun [ObjCurl u0 S I S S] u1 u0] ObjCurl - _curlNewSmtp : envoi simple d'un courriel via SMTP. Prototype simple : fun [Chn S S [S r1] S @cb u0] ObjCurl Prototype : fun [Chn S S [S r1] S fun [ObjCurl u0 S I S S] u1 u0] ObjCurl - _curlDsUrl : détruit un objet ObjCurl. Prototype : fun [ObjCurl] I Voir la doc temporaire : docs/curl.html *** stringtab.c =============== Conversion de chaînes en tableaux pour pouvoir les traiter comme telle - ObjS : Nouveau type Scol correspondant - STABcreate : conversion d'une chaine en tableau Prototype : fun [Chn S] ObjS - STABfoo : affiche un caractère précis ou tout le contenu du tableau dans la console Prototype : fun [ObjS I] ObjS - STABfooC : affiche dans la console le premier caractère d'une chaine Prototype : fun [S] S - STABget : retourne un caractère précis d'un tableau Prototype : fun [ObjS I] S - STABset : modifie / affecte un caractère particulier d'un tableau Prototype : fun [ObjS S I] ObjS - STABadd : ajoute une chaine composée de un oude plusieurs caractères à une position précise d'un tableau Prototype : fun [ObjS S I] ObjS - STABdel : supprime unou plusieurs caractères à partir d'une position précise d'un tableau Prototype : fun [ObjS I I] ObjS - STABsize : returne le nombre de caractères contenudans le tableau Prototype : fun [ObjS] I - STABtoS : conversion d'un tableau de caractères en une chaine Prototype : fun [ObjS] S Voir la doc temporaire : docs/stringtab.html *** lib_string.c ================ Quelques fonctions utiles sur les chaînes de caractères. *** lib_sys.c ============= Quelques fonctions utiles au niveau "système". Par exemple, lib_sys_getPathPartition retourne le chemin absolu de la partition utilisateur.