/* (gH) -_- FILEUT.rex ; TimeStamp (unix) : 16 Juin 2008 vers 08:22 */ /* */ /******************************************************************************/ /* */ /* */ /* Fichier : FILEUT.rex v-2.7 */ /* */ /* */ /* Gilles.HUNAULT@univ-angers.fr */ /* http://www.info.univ-angers.fr/~gh/ */ /* */ /* */ /* " Sous-programmes rex d'interface avec le systeme " */ /* et de gestion des fichiers " */ /* */ /* */ /******************************************************************************/ /* */ /* Liste des fonctions disponibles : */ /* (attention aux majuscules ! osname est incorrect à cause du n) */ /* */ /* sans paramètres : */ /* */ /* clrscr */ /* cpy */ /* cpyWeb */ /* cpyWeb */ /* uName */ /* versionFu */ /* currentDir */ /* attends */ /* */ /* avec 1 paramètre : */ /* */ /* baseName */ /* delFile */ /* deleteFile */ /* pathName */ /* seeFile */ /* checkFile */ /* existsFile */ /* fileExt */ /* fileName */ /* filePath */ /* closeFile */ /* */ /* avec 2 paramètres : */ /* */ /* copyFile */ /* moveFile */ /* say2 */ /* */ /* avec 3 paramètres : */ /* */ /* appendFile */ /* */ /******************************************************************************/ /* */ /* Exemples d'utilisation : (le caractère ^ sert de séparateur) */ /* */ /* call fileUtils("copyFile^test.a^test.b") */ /* */ /* rfu = fileUtils("copyFile^test.a^test.b") */ /* if rfu \=0 then say " Problème : " rfu */ /* */ /* */ /* */ /* */ /* */ /******************************************************************************/ /* */ /* Pour forcer le type du système d'exploitation, on peut utilisr la */ /* variable d'environnement OSTYPE. Par exemple : */ /* */ /* export OSTYPE=UNX (sous Linux sous bash, à mettre dans .bashrc) */ /* set OSTYPE=DOS (sous Dos/Windows, à mettre dans autoexec.bat) */ /* */ /******************************************************************************/ /* */ /* Pour que ce fichier soit accessible par tout script Rexx/Regina, il */ /* faut positionner la variable d'environnement REGINA_MACROS. */ /* Par exemple : */ /* */ /* export REGINA_MACROS=/usr/local/bin (sous Linux) */ /* set REGINA_MACROS=C:\Scripts (sous Dos/Windows) */ /* */ /******************************************************************************/ /* */ /* L'affichage des fichiers sous Dos se fait avec la commande list. (ext) */ /* L'affichage des fichiers sous Unx se fait avec la commande more. (int) */ /* Les fichiers fileUtils.test1 et fileUtils.test2 permettent de tester */ /* si ce fichier est correctement installé. */ /* */ /******************************************************************************/ parse arg largs dbg = 0 /* 1 for normal debug, 0 for normal operation, */ fic. = "" if dbg=1 then do say say " entering fileUtils ; requested : = " largs say end /* fin de si dbg=1 */ largs = largs"^" if dbg=1 then do say say " transformed largs = " largs end /* fin de si dbg=1 */ /* gestion des paramètres */ nf = -1 idc = index(largs,"^") do while idc > 0 nf = nf + 1 if nf = 0 then prog = substr(largs,1,idc-1) else fic.nf = substr(largs,1,idc-1) largs = substr(largs,idc+1) if dbg=1 then say " remaining args : " largs idc = index(largs,"^") end /* fin tant que idc > 0 */ if dbg=1 then say " prog " prog " fic1 =" fic.1 " fic2 =" fic.2 " fic3 =" fic.3 call checkOs resFu = 0 /* gestion des fonctions qui demandent une variable en retour dans le stack */ select /* fonctions qui affichent à l'écran ou qui attendent au clavier */ when prog = "clrScr" then call clrScr when prog = "seeFile" then call seeFile fic.1 when prog = "attends" then call attends /* fonctions qui envoient une variable en retour dans le stack */ when prog = "cpy" then call cpy when prog = "cpyWeb" then call cpyWeb when prog = "osName" then call osName when prog = "uName" then call uName when prog = "currentDir" then call currentDir when prog = "versionFu" then call versionFu when prog = "baseName" then call baseName fic.1 when prog = "fileExt" then call fileExt fic.1 when prog = "fileName" then call fileName fic.1 when prog = "filePath" then call filePath fic.1 when prog = "pathName" then call filePath fic.1 when prog = "checkFile" then call checkFile fic.1 when prog = "delFile" then call delFile fic.1 when prog = "deleteFile" then call delFile fic.1 when prog = "existsFile" then call existsFile fic.1 when prog = "closeFile" then call closeFile fic.1 when prog = "say2" then call say2 fic.1 fic.2 /* fonctions qui agissent sur les fichiers */ when prog = "copyFile" then call copyFile fic.1 fic.2 when prog = "moveFile" then call moveFile fic.1 fic.2 when prog = "appendFile" then call appendFile fic.1 fic.2 fic.3 otherwise do return " unkown file action'"||prog"' ; bad spelling ?" end /* fin de otherwise */ end /* fin de select sur prog */ return resFu /* fin de programme fileUtils */ /******************************************************************************/ /* procédure principale qui renvoie détecte le nom du systeme */ /* (elle gère aussi le nom des commandes à exécuter) */ checkOs: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg nomOs = "?" parse upper source mxv if index(mxv,"PERSONAL") > 0 then nomOS = "dos" if index(mxv,"SAA") > 0 then nomOs = "os2" if index(mxv,"LINUX") > 0 then nomOs = "unx" if index(mxv,"UNIX") > 0 then nomOs = "unx" if index(mxv,"WINDOWS") > 0 then nomOs = "dos" if nomOs = "?" then do osType = translate(value("OSTYPE",,"SYSTEM")) if index(translate(osType),"LINUX") > 0 then nomOs = "unx" ; if index(translate(osType),"DOS") > 0 then nomOs = "dos" ; end /* fin de si nomOs est "?" */ if osType = "?" then do say say " unknown Os ; exiting... " exit end /* fin de si nomOs est "?" */ if dbg=1 then say " nomOs = " nomOs if (nomOs="dos") | (nomOs="os2") then do viewFile = " list" mvFile = " move" kpy1File = " copy" kpy2File = " > nul" del1File = " if exist " del2File = " del " del3File = " > nul " efface = " cls" end /* fin de si nomOs est "dos" */ else if (nomOs="hpux") | (nomOs="unx") then do viewFile = " more" mvFile = " mv" kpy1File = " cp" kpy2File = " 2>/dev/null" del1File = " if test -r " del2File = " ; then rm " del3File = " 2>/dev/null ; fi ; " efface = " clear " end /* fin de si nomOs est "unx" ou "hpux" */ if dbg=1 then say " osName is : " nomOs return 0 /* fin de fonction checkOs */ /******************************************************************************/ /* procédure qui renvoie le nom du systeme sur 3 lettres */ osName: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu if dbg=1 then say " Os is : " nomOs resFu = nomOs return 0 /* fin de fonction osName */ /* procédure qui dit de quel unix il s'agit */ uName: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu if dbg=1 then say " Os is : " nomOs ftmp = "/tmp/uname.txt" cmd = "uname -a > " ftmp cmd ltmp = linein(ftmp) if dbg=1 then say ltmp "rm -rf" ftmp nomUnix = word(ltmp,2) resFu = nomUnix return 0 /* fin de fonction osName */ /******************************************************************************/ /* procédure qui renvoie la version de fileUtils */ versionFu: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu if dbg=1 then say " Os is : " nomOs txt = word(sourceline(6),4) word(sourceline(6),5) resFu =txt return 0 /* fin de fonction versionFu */ /******************************************************************************/ /* procédure qui détruit un fichier */ delFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg parse arg dfic if dbg=1 then say " deleting file : " dfic cmd = del1File dfic del2File dfic del3File if dbg=1 then say " commande : " cmd cmd return 0 /* fin de fonction delFile */ /******************************************************************************/ /* procédure qui ferme un fichier */ closeFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg parse arg dfic if dbg=1 then say " closing file : " dfic call lineout dfic rf = stream(dfic,'command','close') return 0 /* fin de fonction delFile */ /******************************************************************************/ /* procédure qui visualise le contenu d'un fichier */ seeFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg parse arg sfic ; call checkFile sfic ; viewFile sfic return 0 /* fin de fonction seeFile */ /******************************************************************************/ /* procédure qui dit si un fichier existe */ existsFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu parse arg darg f_arg = word(darg,1) if dbg=1 then say " existence of file '"f_arg"'" if lines(f_arg)>0 then ret = 1 else ret = 0 if dbg=1 then say " returned : " ret resFu = ret return 0 /* fin de fonction existsFile */ /******************************************************************************/ /* procédure qui teste si un fichier existe */ checkFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg parse arg ckfic ; signal on notready ll = linein( ckfic) ; call lineout ckfic rf = stream(ckfic,'command','close') return 0 /* fin de fonction checkFile */ /******************************************************************************/ /* procédure qui copie un fichier */ copyFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg parse arg cfic1 cfic2 . call checkFile cfic1 if cfic2="" then say " . Il manque un nom de fichier (au moins) dans la commande copyFile " else kpy1File cfic1 cfic2 kpy2File return 0 /* fin de fonction copyFile */ /******************************************************************************/ /* procédure qui déplace un fichier */ moveFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg parse arg cfic1 cfic2 . call checkFile cfic1 if cfic2="" then say " . Il manque un nom de fichier (au moins) dans la commande copyFile " else mvFile cfic1 cfic2 return 0 /* fin de fonction moveFile */ /******************************************************************************/ /* procédure qui concaténe deux fichiers */ appendFile: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg parse arg fe1 fe2 fsor ftmp = "ftmp.tmp" call checkFile fe1 call checkFile fe2 do while lines(fe1) > 0 ll = linein(fe1) call lineout ftmp , ll end /* fin tant que sur fe1 */ do while lines(fe2) > 0 ll = linein(fe2) call lineout ftmp , ll end /* fin tant que sur fe2 */ call lineout fe1 rf = stream(fe1,'command','close') call lineout fe2 rf = stream(fe2,'command','close') call lineout ftmp rf = stream(ftmp,'command','close') call copyFile ftmp fsor call delFile ftmp return 0 /* fin de fonction appendFile */ /******************************************************************************/ /* procédure qui efface l'écran */ clrScr: procedure efface return 0 /* fin de fonction clrScr */ /******************************************************************************/ /* procédure qui gère la présence d'un fichier */ notready: file =condition('D') say " -- ! -- 'Fichier' " file " 'non vu dans le cd courant !' " resFu = -1 exit -1 /* fin de fonction notready */ /******************************************************************************/ /* procédure qui renvoie le nom de base (fn et ext) d'un fichier */ baseName: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu parse arg fid if dbg=1 then say " baseName de " fid sbn = "" if nomOs= "dos" then charsep = "\" else charsep = "/" if dbg=1 then say " nomOs = " nomOS " charsep = " charsep dps = lastpos(charsep,fid) if dps=0 then sbn = fid else sbn = substr(fid,dps+1,length(fid)-dps) if dbg=1 then say " returned : " sbn resFu = sbn return 0 /* fin de fonction baseName */ /******************************************************************************/ /* procédure qui renvoie l'extension d'un fichier */ fileExt: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu parse arg fid if dbg=1 then say " fileExt de " fid sbn = "" dps = lastpos(".",fid) if dps=0 then sbn = "" else sbn = substr(fid,dps+1,length(fid)-dps) if dbg=1 then say " returned : " sbn resFu = sbn return 0 /* fin de fonction fileExt */ /* procédure qui renvoie le nomseul d'un fichier */ fileName: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu parse arg fid if dbg=1 then say " fileName de " fid fid = fileut("baseName^"fid) sbn = "" dps = lastpos(".",fid) if dps=0 then sbn = fid else sbn = substr(fid,1,dps-1) if dbg=1 then say " returned : " sbn resFu = sbn return 0 /* fin de fonction fileExt */ /******************************************************************************/ /* procédure qui renvoie le chemin d'accès du fichier */ filePath: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu parse arg fid if dbg=1 then say " pathname de " fid spn = "" if nomOs= "dos" then charsep = "\" else charsep = "/" dps = lastpos(charsep,fid) if dps=0 then spn = " " else spn = substr(fid,1,dps-1) if dbg=1 then say " returned : <"spn">" resFu = spn return 0 /* fin de fonction filePath */ /******************************************************************************/ /* procédure qui renvoie le chemin d'accès courant */ currentDir: procedure expose nomOs del1File del2File del3File viewFile mvFile kpy1File kpy2File efface dbg resFu if nomOs = "unx" then 'pwd | rxqueue' else 'cd | rxqueue' do while Queued() > 0 ; parse pull envLine ; end resFu = envLine return 0 /* fin de fonction currentDir */ /******************************************************************************/ /* procédure qui renvoie le chemin d'accès courant */ say2: procedure expose dbg parse arg nf lal if dbg=1 then say " say2 pour " nf " et " lal say lal call lineout nf , lal return 0 /* fin de fonction currentDir */ /******************************************************************************/ /* procédure de copyright simple */ cpy: procedure say say " Copyright 2000 - Gilles.HUNAULT@univ-angers.fr " say " http://www.info.univ-angers.fr/~gh/" say return 0 /* fin de fonction cpy */ /******************************************************************************/ /* procédure d'attente au clavier */ attends: call charout " ok ? " parse pull repUt if length(repUt)>0 then exit 0 return /******************************************************************************/ /* procédure de copyright pour le web */ cpyweb: procedure say '


' say " Copyright 2000 - Gilles.HUNAULT@univ-angers.fr " say " http://www.info.univ-angers.fr/~gh/" say "

" say "" say "" return 0 /* fin de fonction cpyweb */ /******* fin de fichier fileUtils.rex ****************************************/ /* faut-il implémenter nameNoExt dosUnit dosFileUnit uc lc ucfirst trim ltrim trim explode=split join iota sum psum avg pavg std pstd sqrt ln exp rpos(right) nword(negative) nsorta(numeric,array) asorta(alphabetic,array) nsorts(numeric,sentence) asorts(alphabetic,sentence) avalues(array) svalues(string) dir=ls selectSimpleMySql selectMultipleMySql wait progBar (barre de progression) noDblChar */