SYSPACK is a Scol library (MS Windows and GNU/Linux versions). It is under development yet. It provides some new api such as : - Files and directories - Strings and lists - Memory, hash, encoding, ... - Compress and uncompress (lzma, 7z, zip) - Log files - Temporary Files - Install / uninstall / update Scol application - Update Scol - Benchmark - and more Syspack is under GNU LGPL 2.1 license. See COPYING file included in this folder or visit this web page : http://www.gnu.org/licenses/lgpl-2.1.html However, some functions based on external libraries can be under a different license : - PHP 3.01 license - GNU GPL 2.0 license - GNU GPL 3.0 license or a specific license. The official documentation gives informations about this subject. This documentation can be found in the official web site : http://www.scolring.org/ especially, for the SYSPACK library : http://www.scolring.org/files/doc_html/syspack.html *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* * * * Compilation * * * *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Syspack is compiled by gnu gcc with a usual options. A Code :: Blocks project files is provided for the example. Few external libraries are included * libzip -------- C library for reading, creating, and modifying zip archives More informations : http://www.nih.at/libzip/ Compilation under GNU/Linux : usually, a ./compile, make and make install are sufficient ! Compilation under MS Windows and MingW : MSYS is the better / easier way : http://www.mingw.org/wiki/MSYS Download and install it. Run Z:\MingW\msys\x.y\msys.bat A mini unix-like shell appears. Move to your libzip source directory ('cd' command) ./configure make make install (optional for syspack) copy the libzip.a in the lib sub-directory of the syspack source These three commands can take several long minutes ... With 'make install' command, files can be found in this sub-directory : static library : msys/x.y/local/lib header : msys/x.y/local/include Compilation under MS Windows and MS VC++ : Note : link syspack with a static libzip library, the compilation timeis shorted and it is easier to maintain. But user must have libzip-x.dll on his system ... The libzip source can be included instead : the compilation time is longer but the user system keeps 'safe'. * lzma sdk ---------- LZMA provides a high compression ratio and very fast decompression, so it is very suitable for embedded applications. http://www.7-zip.org/sdk.html Only the C source is used. Compile it at your convenience. Next, copy 'liblzma.a' in the lib sub-directory of the syspack source. * libcurl --------- The multiprotocol file transfer library. http://curl.haxx.se/libcurl/ *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* * * * Installation * * * *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* trF "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.