source: tags/libIGCM_v1_8-old/libIGCM_sys/libIGCM_sys_mercureTX.ksh

Last change on this file was 305, checked in by brocksce, 14 years ago
  • Added cdo sys to libIGCM_sys_cesium
  • Made some cleaning and added a comment to indicate that .atlas_env_* file sources not only ferret/fast/atlas but also nco, cdo operators.
  • Property licence set to
    The following licence information concerns ONLY the libIGCM tools
    ==================================================================

    Copyright © Centre National de la Recherche Scientifique CNRS
    Commissariat à l'Énergie Atomique CEA

    libIGCM : Library for Portable Models Computation of IGCM Group.

    IGCM Group is the french IPSL Global Climate Model Group.

    This library is a set of shell scripts and functions whose purpose is
    the management of the initialization, the launch, the transfer of
    output files, the post-processing and the monitoring of datas produce
    by any numerical program on any plateforme.

    This software is governed by the CeCILL license under French law and
    abiding by the rules of distribution of free software. You can use,
    modify and/ or redistribute the software under the terms of the CeCILL
    license as circulated by CEA, CNRS and INRIA at the following URL
    "http://www.cecill.info".

    As a counterpart to the access to the source code and rights to copy,
    modify and redistribute granted by the license, users are provided only
    with a limited warranty and the software's author, the holder of the
    economic rights, and the successive licensors have only limited
    liability.

    In this respect, the user's attention is drawn to the risks associated
    with loading, using, modifying and/or developing or reproducing the
    software by the user in light of its specific status of free software,
    that may mean that it is complicated to manipulate, and that also
    therefore means that it is reserved for developers and experienced
    professionals having in-depth computer knowledge. Users are therefore
    encouraged to load and test the software's suitability as regards their
    requirements in conditions enabling the security of their systems and/or
    data to be ensured and, more generally, to use and operate it in the
    same conditions as regards security.

    The fact that you are presently reading this means that you have had
    knowledge of the CeCILL license and that you accept its terms.
  • Property svn:keywords set to Date Author Revision
File size: 33.1 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sebastien Denvil, Martial Mancip
5# Contact: Martial.Mancip_ipsl.jussieu.fr
6# $Date$
7# $Author$
8# $Revision$
9# IPSL (2006)
10#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
11# History:
12# Modification:
13#
14#**************************************************************
15
16#=========================================================
17# The documentation of this file can be automatically generated
18# if you use the prefix #D- for comments to be extracted.
19# Extract with command: cat lib* | grep "^#D-" | cut -c "4-"
20#=========================================================
21
22#D-#==================================================
23#D-LibIGCM_sys for Mercure TX
24#D-#==================================================
25#D-
26#D- This ksh library if a layer under some usefull
27#D-environment variables and shell commands.
28#D-All those definitions depend on host particularities.
29#D-It manages a stack mechanism and test validity of operations.
30#D-All function described bellow must be prefixed by IGCM_sys.
31
32#====================================================
33# libIGCM_sys PARAMETERS
34#====================================================
35
36#====================================================
37# set DEBUG_sys to true to output calls of function
38typeset -r DEBUG_sys=${DEBUG_sys:=true}
39
40#====================================================
41# Turn in dry run mode ? (sys_Put_Rest, sys_Put_Out, sys_Get)
42typeset -r DRYRUN=${DRYRUN:=0}
43
44# YOU MUST COMPILE YOUR EXE FILES FOR DRYRUN MODE !
45# -------------------------------------------------------------------------------------
46# | DRYRUN=  |  Date computations, | sys_Get    |  Exe    | sys_Put_Out; sys_Put_Rest |
47# |          |  Cp/Exe param files |            |  Chmod  |                           |
48# |          |      Qsub           |            |         |                           |
49# -------------------------------------------------------------------------------------
50# |    0     |       yes           |    yes     |  yes    |      yes                  |
51# -------------------------------------------------------------------------------------
52# |    1     |       yes           |    yes     |  yes    |      no                   |
53# -------------------------------------------------------------------------------------
54# |    2     |       yes           |    yes     |  no     |      no                   |
55# -------------------------------------------------------------------------------------
56# |    3     |       yes           |    no      |  no     |      no                   |
57# -------------------------------------------------------------------------------------
58
59#=====================================================
60# Global Variables :
61#=====================================================
62# Language : "fr" or "en"
63typeset -r MYLANG="fr"
64
65#=====================================================
66# Host and user names
67# $hostname ou hostname
68typeset  HOST=${HOST:=$( hostname )}
69# $username ou whoami
70typeset  LOGIN=${LOGIN:=$( whoami )}
71
72#D-
73#D-#==================================================
74#D-Program used in libIGCM
75#D-#==================================================
76
77# rsync with path
78typeset -r RSYNC=/usr/bin/rsync
79# RSYNC_opt args to rsync
80typeset -r RSYNC_opt="-va"
81# ie storage filesystem
82typeset -r RHOST=mercure
83
84#====================================================
85# Set environment tools (ferret, nco, cdo)
86#====================================================
87. /home/cont003/p86ipsl/.atlas_env_mercure_ksh
88
89#====================================================
90# Specific for ocean additionnal diagnostic
91export FER_GO="$FER_GO /home/cont003/p86denv/IGCM_POST_UTIL/JNL /home/cont003/p86denv/GRAF /home/cont003/p86denv/GRAF/GO"
92export FER_PALETTE="$FER_PALETTE /home/cont003/p86denv/GRAF/PALET"
93
94#====================================================
95# Host specific DIRECTORIES
96#====================================================
97
98#====================================================
99#- R_EXE   (==> BIN_DIR = ${MODIPSL}/bin )
100typeset -r R_EXE="${MODIPSL}/bin"
101
102#====================================================
103# For interactive jobs on mercure
104PBS_O_WORKDIR=${PBS_O_WORKDIR:=$(pwd)}
105
106#====================================================
107#- SUBMIT_DIR : submission dir
108typeset SUBMIT_DIR=${SUBMIT_DIR:=${PBS_O_WORKDIR}}
109
110#====================================================
111#- ARCHIVE
112typeset -r ARCHIVE=${DMFDIR}
113
114#====================================================
115#- IN
116typeset -r R_IN=${R_IN:=/dmnfs/cont003/p86ipsl/IGCM}
117
118#====================================================
119#- OUT
120typeset -r R_OUT=${ARCHIVE}/IGCM_OUT
121
122#====================================================
123#- OUT_SCR (ONLY FOR double copy an scratch)
124typeset -r R_OUT_SCR=${SCRATCHDIR}/IGCM_OUT
125
126#====================================================
127#- OUT_POST
128typeset -r R_OUT_POST=${SCRATCHDIR}/IGCM_OUT
129
130#====================================================
131#- RUN_DIR_PATH : Temporary working directory (=> TMP)
132typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${TMPDIR}}
133
134#====================================================
135#- Max number of arguments passed to nco operator or demigration command
136UNIX_MAX_LIMIT=360
137
138#D-#==================================================
139#D-function IGCM_sys_RshMaster
140#D-* Purpose: Just a fake command to wrapp
141#D-           IGCM_card call in post-treatment
142#D-           Ulam do not see brodie filesystem
143#D-           Cesium do not see all mercure filesystem
144#D-           That's why we need this hack.
145#D-* Examples:
146#D-
147function IGCM_sys_RshMaster {
148    #set -vx
149    IGCM_debug_PushStack "IGCM_sys_RshMaster" $@
150    /bin/ksh <<-EOF
151    export libIGCM=${libIGCM}
152    export DEBUG_debug=${DEBUG_debug}
153    . ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
154    . ${libIGCM}/libIGCM_card/libIGCM_card.ksh
155    ${@}
156EOF
157    if [ $? -gt 0 ] ; then
158        echo "IGCM_sys_RshMaster : erreur."
159        IGCM_debug_Exit "IGCM_sys_RshMaster"
160    fi
161    IGCM_debug_PopStack "IGCM_sys_RshMaster"
162}
163
164#D-#==================================================
165#D-function IGCM_sys_RshArchive
166#D-* Purpose: Archive rsh command
167#D-* Examples:
168#D-
169function IGCM_sys_RshArchive {
170    IGCM_debug_PushStack "IGCM_sys_RshArchive" $@
171    /bin/ksh <<-EOF
172    ${@}
173EOF
174    if [ $? -gt 0 ] ; then
175        echo "IGCM_sys_RshArchive : erreur."
176        IGCM_debug_Exit "IGCM_sys_RshArchive"
177    fi
178    IGCM_debug_PopStack "IGCM_sys_RshArchive"
179}
180
181#D-#==================================================
182#D-function IGCM_sys_RshPost
183#D-* Purpose: Master rsh command
184#D-* Examples:
185#D-
186function IGCM_sys_RshPost {
187    IGCM_debug_PushStack "IGCM_sys_RshPost" $@
188    if ( $DEBUG_sys ) ; then
189        echo "IGCM_sys_RshPost :" $@
190    fi
191    /bin/ksh ${@}
192    if [ $? -gt 0 ] ; then
193        echo "IGCM_sys_RshPost : erreur."
194        IGCM_debug_Exit "IGCM_sys_RshPost"
195    fi
196    IGCM_debug_PopStack "IGCM_sys_RshPost"
197}
198
199#D-#==================================================
200#D-function IGCM_sys_Mkdir
201#D-* Purpose: Master locale mkdir command
202#D-* Examples:
203#D-
204function IGCM_sys_Mkdir {
205    IGCM_debug_PushStack "IGCM_sys_Mkdir" $@
206    if ( $DEBUG_sys ) ; then
207        echo "IGCM_sys_Mkdir :" $@
208    fi
209    if [ ! -d ${1} ]; then
210        \mkdir -p $1
211        if [ $? -gt 0 ] ; then
212            echo "IGCM_sys_Mkdir : erreur."
213            IGCM_debug_Exit "IGCM_sys_Mkdir"
214        fi
215    fi
216    # vérification :
217    if [ ! -d ${1} ] ; then
218        echo "IGCM_sys_Mkdir : erreur."
219        IGCM_debug_Exit "IGCM_sys_Mkdir"
220    fi
221    IGCM_debug_PopStack "IGCM_sys_Mkdir"
222}
223
224#D-#==================================================
225#D-function IGCM_sys_MkdirArchive
226#D-* Purpose: Mkdir on Archive
227#D-* Examples:
228#D-
229function IGCM_sys_MkdirArchive {
230    IGCM_debug_PushStack "IGCM_sys_MkdirArchive" $@
231    if ( $DEBUG_sys ) ; then
232        echo "IGCM_sys_MkdirArchive :" $@
233    fi
234    #- creation de repertoire sur le serveur fichier
235    if [ ! -d ${1} ]; then 
236        \mkdir -p $1
237        if [ $? -gt 0 ] ; then
238            echo "IGCM_sys_MkdirArchive : erreur."
239            IGCM_debug_Exit "IGCM_sys_MkdirArchive"
240        fi
241    fi
242    IGCM_debug_PopStack "IGCM_sys_MkdirArchive"
243}
244
245#D-#==================================================
246#D-function IGCM_sys_MkdirWork
247#D-* Purpose: Mkdir on Work
248#D-* Examples:
249#D-
250function IGCM_sys_MkdirWork {
251    IGCM_debug_PushStack "IGCM_sys_MkdirWork" $@
252    if ( $DEBUG_sys ) ; then
253        echo "IGCM_sys_MkdirWork :" $@
254    fi
255    #- creation de repertoire sur le serveur fichier
256    if [ ! -d ${1} ]; then 
257        \mkdir -p $1
258        if [ $? -gt 0 ] ; then
259            echo "IGCM_sys_MkdirWork : erreur."
260            IGCM_debug_Exit "IGCM_sys_MkdirWork"
261        fi
262    fi
263    IGCM_debug_PopStack "IGCM_sys_MkdirWork"
264}
265
266#D-#==================================================
267#D-function IGCM_sys_Cd
268#D-* Purpose: master cd command
269#D-* Examples:
270#D-
271function IGCM_sys_Cd {
272    IGCM_debug_PushStack "IGCM_sys_Cd" $@
273    if ( $DEBUG_sys ) ; then
274        echo "IGCM_sys_Cd :" $@
275    fi
276    \cd $1
277    if [ $? -gt 0 ] ; then
278        echo "IGCM_sys_Cd : erreur."
279        IGCM_debug_Exit "IGCM_sys_Cd"
280    fi
281    IGCM_debug_PopStack "IGCM_sys_Cd"
282}
283
284#D-#==================================================
285#D-function IGCM_sys_Chmod
286#D-* Purpose: Chmod
287#D-* Examples:
288#D-
289function IGCM_sys_Chmod {
290    IGCM_debug_PushStack "IGCM_sys_Chmod" -- $@
291    if ( $DEBUG_sys ) ; then
292        echo "IGCM_sys_Chmod :" $@
293    fi
294    if [ $DRYRUN -le 1 ]; then
295        \chmod $@
296        if [ $? -gt 0 ] ; then
297            echo "IGCM_sys_Chmod : erreur."
298            IGCM_debug_Exit "IGCM_sys_Chmod"
299        fi
300    else
301        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
302    fi
303    IGCM_debug_PopStack "IGCM_sys_Chmod"
304}
305
306#D-#==================================================
307#D-function IGCM_sys_FileSize
308#D-* Purpose: Filesize
309#D-* Examples:
310#D-
311function IGCM_sys_FileSize {
312    IGCM_debug_PushStack "IGCM_sys_FileSize" $@
313
314    typeset sizeF
315    set +A sizeF -- $( ls -la ${1} )
316    if [ $? -gt 0 ] ; then
317        IGCM_debug_Exit "IGCM_sys_FileSize"
318    fi
319    eval ${2}=${sizeF[4]}
320
321    IGCM_debug_PopStack "IGCM_sys_FileSize"
322}
323
324#D-#==================================================
325#D-function IGCM_sys_TestDir
326#D-* Purpose: Test Directory that must exists
327#D-* Examples:
328#D-
329function IGCM_sys_TestDir {
330    IGCM_debug_PushStack "IGCM_sys_TestDir" $@
331    if ( $DEBUG_sys ) ; then
332        echo "IGCM_sys_TestDir :" $@
333    fi
334    typeset ExistFlag
335    ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
336    IGCM_debug_PopStack "IGCM_sys_TestDir"
337
338    return ${ExistFlag}
339}
340
341#D-#==================================================
342#D-function IGCM_sys_TestDirArchive
343#D-* Purpose: Test Directory that must exists on Archive
344#D-* Examples:
345#D-
346function IGCM_sys_TestDirArchive {
347    IGCM_debug_PushStack "IGCM_sys_TestDirArchive" $@
348    if ( $DEBUG_sys ) ; then
349        echo "IGCM_sys_TestDirArchive :" $@
350    fi
351    typeset ExistFlag
352    ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
353    IGCM_debug_PopStack "IGCM_sys_TestDirArchive"
354
355    return ${ExistFlag}
356}
357
358#D-#==================================================
359#D-function IGCM_sys_TestFileArchive
360#D-* Purpose: Test file that must NOT EXISTS on Archive
361#D-* Examples:
362#D-
363function IGCM_sys_TestFileArchive {
364    IGCM_debug_PushStack "IGCM_sys_TestFileArchive" $@
365    if ( $DEBUG_sys ) ; then
366        echo "IGCM_sys_TestFileArchive :" $@
367    fi
368    typeset ExistFlag
369    ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
370    IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
371
372    return ${ExistFlag}
373}
374
375#D-#==================================================
376#D-function IGCM_sys_CountFileArchive
377#D-* Purpose: Count files on Archive filesystem
378#D-* Examples:
379#D-
380function IGCM_sys_CountFileArchive {
381    IGCM_debug_PushStack "IGCM_sys_CountFileArchive" $@
382    ls ${@} 2>/dev/null | wc -l
383    if [ $? -gt 0 ] ; then
384        echo "IGCM_sys_CountFileArchive : erreur."
385    fi
386    IGCM_debug_PopStack "IGCM_sys_CountFileArchive"
387}
388
389#D-#==================================================
390#D-function IGCM_sys_Tree
391#D-* Purpose: Tree directories with files on ${ARCHIVE}
392#D-* Examples: IGCM_sys_Tree ${R_IN} ${R_OUT}
393#D-
394function IGCM_sys_Tree {
395    IGCM_debug_PushStack "IGCM_sys_Tree" $@
396    if ( $DEBUG_sys ) ; then
397        echo "IGCM_sys_Tree :" $@
398    fi
399
400    \tree -f $@
401
402    IGCM_debug_PopStack "IGCM_sys_Tree"
403}
404
405#D-#==================================================
406#D-function IGCM_sys_Tar
407#D-* Purpose: master un-tar command
408#D-* Examples:
409#D-
410function IGCM_sys_Tar {
411    IGCM_debug_PushStack "IGCM_sys_Tar" $@
412    if ( $DEBUG_sys ) ; then
413        echo "IGCM_sys_Tar :" $@
414    fi
415    \tar cvf $@
416    if [ $? -gt 0 ] ; then
417        echo "IGCM_sys_Tar : erreur."
418        IGCM_debug_Exit "IGCM_sys_Tar"
419    fi
420    \tar tvf $1
421
422    IGCM_debug_PopStack "IGCM_sys_Tar"
423}
424
425#D-#==================================================
426#D-function IGCM_sys_UnTar
427#D-* Purpose: master un-tar command
428#D-* Examples:
429#D-
430function IGCM_sys_UnTar {
431    IGCM_debug_PushStack "IGCM_sys_UnTar" $@
432    if ( $DEBUG_sys ) ; then
433        echo "IGCM_sys_UnTar :" $@
434    fi
435    \tar xvf $1
436    if [ $? -gt 0 ] ; then
437        echo "IGCM_sys_UnTar : erreur."
438        IGCM_debug_Exit "IGCM_sys_UnTar"
439    fi
440    IGCM_debug_PopStack "IGCM_sys_UnTar"
441}
442
443#D-#==================================================
444#D-function IGCM_sys_QsubPost
445#D-* Purpose: Qsub new job on scalaire
446#D-* Examples:
447#D-
448function IGCM_sys_QsubPost {
449    IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
450    if ( $DEBUG_sys ) ; then
451        echo "IGCM_sys_QsubPost :" $@
452    fi
453    /usr/bin/nqsII/qsub -q scalaire -o ${POST_DIR}/$1.${PeriodDateEnd}.${TsTask}.${CompToRead}.${FlagToRead}.out ${libIGCM}/$1.job -v ${listVarEnv}
454    if [ $? -gt 0 ] ; then
455        echo "IGCM_sys_QsubPost : erreur " $@
456        IGCM_debug_Exit "IGCM_sys_QsubPost"
457    fi
458    IGCM_debug_PopStack "IGCM_sys_QsubPost"
459}
460
461#D-*************************
462#D- File transfer functions
463#D-*************************
464#D-
465
466#D-#==================================================
467#D-function IGCM_sys_Rsync_out
468#D-* Purpose: treat return val of rsync
469#D-* Examples: IGCM_sys_Rsync_out out_RET_rsync
470#D-  Error values and explanations can depend on your system version.
471function IGCM_sys_Rsync_out {
472    RET=$1
473    if [ ! $RET ] ; then
474        echo "rsync error !"
475    fi
476
477    if [ $MYLANG = "fr" ]; then
478        case $RET in
479            0)  return ;;
480            1)  echo "Erreur de rsync ; RERR_SYNTAX : "
481                echo "Erreur de syntaxe ou d'utilisation."
482                return;;
483            2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
484                echo "Incompatibilité de protocole."
485                return;;
486            3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
487                echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
488                echo "répertoires"
489                return;;
490            4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
491                echo "Action demandée non supportée : une tentative de manipulation de"
492                echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
493                echo "été faite ; ou une option qui est supportée par le  client  mais"
494                echo "pas par le serveur a été spécifiée."
495                return;;
496            10) echo "Erreur de rsync ; RERR_SOCKETIO"
497                echo "Erreur dans le socket d'entrée sortie"
498                return;;
499            11) echo "Erreur de rsync ; RERR_FILEIO"
500                echo "Erreur d'entrée sortie fichier"
501                return;;
502            12) echo "Erreur de rsync ; RERR_STREAMIO"
503                echo "Erreur dans flux de donnée du protocole rsync"
504                return;;
505            13) echo "Erreur de rsync ; RERR_MESSAGEIO"
506                echo "Erreur avec les diagnostics du programme"
507                return;;
508            14) echo "Erreur de rsync ; RERR_IPC"
509                echo "Erreur dans le code IPC"
510                return;;
511            20) echo "Erreur de rsync ; RERR_SIGNAL"
512                echo "SIGUSR1 ou SIGINT reçu"
513                return;;
514            21) echo "Erreur de rsync ; RERR_WAITCHILD"
515                echo "Une erreur retournée par waitpid()"
516                return;;
517            22) echo "Erreur de rsync ; RERR_MALLOC"
518                echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
519                return;;
520            23) echo ""
521                echo "Erreur fichier inexistant"
522                return;;
523            30) echo "Erreur de rsync ; RERR_TIMEOUT"
524                echo "Temps d'attente écoulé dans l'envoi/réception de données"
525                return;;
526            *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $RET
527                return;;
528        esac
529    elif [ $MYLANG = "en" ] ; then
530        case $RET in
531            0)  return;;               
532            1)  echo "rsync error : Syntax or usage error "
533                return;;
534            2)  echo "rsync error : Protocol incompatibility "
535                return;;
536            3)  echo "rsync error : Errors selecting input/output files, dirs"
537                return;;
538            4)  echo "rsync error : Requested action not supported: an attempt"
539                echo "was made to manipulate 64-bit files on a platform that cannot support"
540                echo "them; or an option was specified that is supported by the client and"
541                echo "not by the server."
542                return;;
543            5)  echo "rsync error : Error starting client-server protocol"
544                return;;
545            10) echo "rsync error : Error in socket I/O "
546                return;;
547            11) echo "rsync error : Error in file I/O "
548                return;;
549            12) echo "rsync error : Error in rsync protocol data stream "
550                return;;
551            13) echo "rsync error : Errors with program diagnostics "
552                return;;
553            14) echo "rsync error : Error in IPC code "
554                return;;
555            20) echo "rsync error : Received SIGUSR1 or SIGINT "
556                return;;
557            21) echo "rsync error : Some error returned by waitpid() "
558                return;;
559            22) echo "rsync error : Error allocating core memory buffers "
560                return;;
561            23) echo "rsync error : Partial transfer due to error"
562                return;;
563            24) echo "rsync error : Partial transfer due to vanished source files"
564                return;;
565            30) echo "rsync error : Timeout in data send/receive "
566                return;;
567            *)  echo "rsync error : return code of rsync unknown :" $RET
568                return;;
569        esac
570    else
571        echo "unknown language $MYLANG."
572        return
573    fi
574}
575   
576#D-#==================================================
577#D-function IGCM_sys_Cp
578#D-* Purpose: generic cp
579#D-* Examples:
580#D-
581function IGCM_sys_Cp {
582    IGCM_debug_PushStack "IGCM_sys_Cp" $@
583    if ( $DEBUG_sys ) ; then
584        echo "IGCM_sys_Cp :" $@
585    fi
586
587    typeset RET
588
589    echo cp $@ > out_rsync 2>&1
590    \cp $@ >> out_rsync 2>&1
591    RET=$?
592
593    if [ ${RET} -gt 0 ] ; then
594        echo "IGCM_sys_Cp : error."
595        cat out_rsync
596        IGCM_debug_Exit "IGCM_sys_Cp"
597    fi
598    IGCM_debug_PopStack "IGCM_sys_Cp"
599}
600
601#D-#==================================================
602#D-function IGCM_sys_Rm
603#D-* Purpose: generic rm
604#D-* Examples:
605#D-
606function IGCM_sys_Rm {
607    IGCM_debug_PushStack "IGCM_sys_Rm" -- $@
608    if ( $DEBUG_sys ) ; then
609        echo "IGCM_sys_Rm :" $@
610    fi
611
612    typeset RET
613
614    echo rm $@ > out_rsync 2>&1
615    \rm $@ >> out_rsync 2>&1
616    RET=$?
617
618    if [ ${RET} -gt 0 ] ; then
619        echo "IGCM_sys_Rm : error."
620        cat out_rsync
621        IGCM_debug_Exit "IGCM_sys_Rm"
622    fi
623    IGCM_debug_PopStack "IGCM_sys_Rm"
624}
625
626#D-#==================================================
627#D-function IGCM_sys_RmRunDir
628#D-* Purpose: rm tmpdir (dummy function most of the time batch
629#D-                      scheduler will do the job)
630#D-* Examples:
631#D-
632function IGCM_sys_RmRunDir {
633    IGCM_debug_PushStack "IGCM_sys_RmRunDir" -- $@
634    if ( $DEBUG_sys ) ; then
635        echo "IGCM_sys_RmRunDir :" $@
636        echo "Dummy call, let the scheduler do that."
637    fi
638    IGCM_debug_PopStack "IGCM_sys_RmRunDir"
639}
640
641#D-#==================================================
642#D-function IGCM_sys_Mv
643#D-* Purpose: generic move
644#D-* Examples:
645#D-
646function IGCM_sys_Mv {
647    IGCM_debug_PushStack "IGCM_sys_Mv" $@
648    if ( $DEBUG_sys ) ; then
649        echo "IGCM_sys_Mv :" $@
650    fi
651
652    if [ $DRYRUN = 0 ]; then
653
654        typeset RET
655           
656        echo mv $@ > out_rsync 2>&1
657        \mv $@ >> out_rsync 2>&1
658        RET=$?
659   
660        if [ ${RET} -gt 0 ] ; then
661            echo "IGCM_sys_Mv : error in mv."
662            cat out_rsync
663            IGCM_debug_Exit "IGCM_sys_Mv"
664        fi
665    else
666        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
667    fi
668
669    IGCM_debug_PopStack "IGCM_sys_Mv"
670}
671
672#D-#==================================================
673#D-function IGCM_sys_Put_Dir
674#D-* Purpose: Copy a complete directory on $(ARCHIVE)
675#D-* Examples:
676#D-
677function IGCM_sys_Put_Dir {
678    IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
679    if ( $DEBUG_sys ) ; then
680        echo "IGCM_sys_Put_Dir :" $@
681    fi
682    if [ $DRYRUN = 0 ]; then
683        if [ ! -d ${1} ] ; then
684            echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
685            IGCM_debug_PopStack "IGCM_sys_Put_Dir"
686            return
687        fi
688
689        typeset RET
690
691        # Only if we use rsync
692        #IGCM_sys_TestDirArchive $( dirname $2 )
693        #
694        #USUAL WAY
695        \cp -r $1 $2 > out_rsync 2>&1
696        RET=$?
697
698        if [ ${RET} -gt 0 ] ; then
699            echo "IGCM_sys_Put_Dir : error."
700            cat out_rsync
701            IGCM_debug_Exit "IGCM_sys_Put_Dir"
702        fi
703    else
704        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
705    fi
706    IGCM_debug_PopStack "IGCM_sys_Put_Dir"
707}
708
709#D-#==================================================
710#D-function IGCM_sys_Get_Dir
711#D-* Purpose: Copy a complete directory from $(ARCHIVE)
712#D-* Examples:
713#D-
714function IGCM_sys_Get_Dir {
715    IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
716    if ( $DEBUG_sys ) ; then
717        echo "IGCM_sys_Get_Dir :" $@
718    fi
719    if [ $DRYRUN = 0 ]; then
720#       if [ ! -d ${1} ] ; then
721#           echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
722#           IGCM_debug_PopStack "IGCM_sys_Get_Dir"
723#           return
724#       fi
725
726        typeset RET
727
728        # Only if we use rsync
729        #IGCM_sys_TestDirArchive $( dirname $2 )
730        #
731        #USUAL WAY
732        \cp -r $1 $2 > out_rsync 2>&1
733        RET=$?
734
735        if [ ${RET} -gt 0 ] ; then
736            echo "IGCM_sys_Get_Dir : error."
737            cat out_rsync
738            IGCM_debug_Exit "IGCM_sys_Get_Dir"
739        fi
740    else
741        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
742    fi
743    IGCM_debug_PopStack "IGCM_sys_Get_Dir"
744}
745
746#D-#==================================================
747#D-function IGCM_sys_Get_Master
748#D-* Purpose: Copy a complete directory from MASTER filesystem
749#D-* Examples:
750#D-
751function IGCM_sys_Get_Master {
752    IGCM_debug_PushStack "IGCM_sys_Get_Master" $@
753    if ( $DEBUG_sys ) ; then
754        echo "IGCM_sys_Get_Master :" $@
755    fi
756    if [ $DRYRUN = 0 ]; then
757        if [ ! -d ${1} ] ; then
758            echo "WARNING : IGCM_sys_Get_Master ${1} DOES NOT EXIST ."
759            IGCM_debug_PopStack "IGCM_sys_Get_Master"
760            return
761        fi
762
763        typeset RET
764        sleep 60
765
766        #USUAL WAY
767        \cp -r $1 $2 > out_rsync 2>&1
768        RET=$?
769
770        if [ ${RET} -gt 0 ] ; then
771            echo "IGCM_sys_Get_Master : error."
772            cat out_rsync
773            IGCM_debug_Exit "IGCM_sys_Get_Master"
774        fi
775    else
776        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
777    fi
778    IGCM_debug_PopStack "IGCM_sys_Get_Master"
779}
780
781#D-#==================================================
782#D-function IGCM_sys_Put_Out
783#D-* Purpose: Copy a file on $(ARCHIVE) after have chmod it in readonly
784#D-* Examples:
785#D-
786function IGCM_sys_Put_Out {
787    IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
788    if ( $DEBUG_sys ) ; then
789        echo "IGCM_sys_Put_Out :" $@
790    fi
791    if [ $DRYRUN = 0 ]; then
792        if [ ! -f ${1} ] ; then
793            echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
794            IGCM_debug_PopStack "IGCM_sys_Put_Out"
795            return 1
796        fi
797        #
798        IGCM_sys_MkdirArchive $( dirname $2 )
799        #
800        typeset RET
801        #
802        if [ X${JobType} = XRUN ] ; then
803            if [ X${3} = X ] ; then
804                IGCM_sys_Chmod 444 ${1}
805            fi
806        fi
807        #
808        # USUAL WAY
809        putfer $1 $2 > out_rsync 2>&1
810        RET=$?
811
812#       #RSYNC WITH NETWORK RSH CALL
813#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${RHOST}:${2} > out_rsync 2>&1
814#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${RHOST}:${2} >> out_rsync 2>&1
815
816#       #RSYNC WITH NFS USE
817#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
818#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
819
820#       RET=$?
821#       IGCM_sys_Rsync_out $RET
822
823#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
824#       (( RET=RET+$? ))
825
826        if [ ${RET} -gt 0 ] ; then
827            echo "IGCM_sys_Put_Out : error."
828            cat out_rsync
829            IGCM_debug_Exit "IGCM_sys_Put_Out"
830        fi
831    else
832        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
833    fi
834    IGCM_debug_PopStack "IGCM_sys_Put_Out"
835    return 0
836}
837
838#D-#==================================================
839#D-function IGCM_sys_Get
840#D-* Purpose: Get a file from ${ARCHIVE}
841#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
842#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
843function IGCM_sys_Get {
844    IGCM_debug_PushStack "IGCM_sys_Get" $@
845
846    typeset DEST RET dm_liste ifile target file_work
847
848    if ( $DEBUG_sys ) ; then
849        echo "IGCM_sys_Get :" $@
850    fi
851    if [ $DRYRUN -le 2 ]; then
852        if [ X${1} = X'/l' ] ; then
853            # test if the first file is present in the old computation :
854            eval set +A dm_liste \${${2}}
855        else
856            eval set +A dm_liste ${1}
857        fi
858        eval DEST=\${${#}}
859
860        #=====================================================
861        #         COMMENT OUT DOUBLE COPY ON SCRATCHDIR
862        #=====================================================
863
864        # Is it an R_OUT file (not R_IN) ?
865        #echo ${dm_liste[0]} | grep "${R_OUT}" > /dev/null 2>&1
866        #if [ $? -eq 0 ] ; then
867        #    # Yes  ? then we try to get it in SCRATCHDIR
868        #    set +A file_work $( echo ${dm_liste[*]} | sed -e "s|${R_OUT}|${R_OUT_SCR}|g" )
869        #    if [ -f ${file_work[0]} ] ; then
870        #       IGCM_sys_Cp ${file_work[*]} ${DEST}
871        #       IGCM_debug_PopStack "IGCM_sys_Get"
872        #       return
873        #    fi
874        #fi
875
876        # test if the (first) file is present in the old computation :
877        IGCM_sys_TestFileArchive ${dm_liste[0]}
878        RET=$?
879        if [ ${RET} -gt 0 ] ; then
880            echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
881            IGCM_debug_Exit "IGCM_sys_Get"
882            #IGCM_debug_PopStack "IGCM_sys_Get"
883            #return
884        fi
885
886        dmget ${dm_liste[*]} > out_rsync 2>&1
887        RET=$?
888        if [ ${RET} -gt 0 ] ; then
889            echo "WARNING IGCM_sys_Get : demigration error."
890            cat out_rsync
891            #IGCM_debug_Exit "IGCM_sys_Get"
892            #IGCM_debug_PopStack "IGCM_sys_Get"
893            #return
894        fi
895
896        #USUAL WAY
897        (( RET=0 ))
898        if [ X${1} = X'/l' ] ; then
899            (( RET=0 ))
900            for target in ${dm_liste[*]} ; do
901                local_file=$( basename ${target} )
902                \cp ${target} ${DEST}/${local_file} >> out_rsync 2>&1
903                (( RET = RET + $? ))
904            done
905        else
906            \cp ${dm_liste} ${DEST} >> out_rsync 2>&1
907            RET=$?
908        fi
909
910#       #RSYNC WITH NETWORK RSH CALL
911#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} > out_rsync 2>&1
912#       ${RSYNC} ${RSYNC_opt} -e ssh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} >> out_rsync 2>&1
913
914#       #RSYNC WITH NFS USE
915#       echo ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} > out_rsync 2>&1
916#       ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} >> out_rsync 2>&1
917
918#       RET=$?
919#       IGCM_sys_Rsync_out $RET
920
921#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
922#       (( RET=RET+$? ))
923
924    else
925        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
926    fi
927    IGCM_debug_PopStack "IGCM_sys_Get"
928}
929
930#D-#==================================================
931#D-function IGCM_sys_Put_Dods
932#D-* Purpose: Put $(ARCHIVE) files on DODS internet protocole.
933#D-* Examples:
934#D-
935function IGCM_sys_Put_Dods {
936    IGCM_debug_PushStack "IGCM_sys_Put_Dods" $@
937    if ( $DEBUG_sys ) ; then
938        echo "IGCM_sys_Put_Dods :" $@
939    fi
940    if [ $DRYRUN = 0 ]; then
941        if [ ! -d ${R_SAVE}/${1} ] ; then
942            echo "WARNING : IGCM_sys_Put_Dods ${R_SAVE}/${1} DOES NOT EXIST ."
943            IGCM_debug_PopStack "IGCM_sys_Put_Dods"
944            return
945        fi
946
947        typeset RET
948        #
949        cd ${R_SAVE}
950        dods_rm public/${LOGIN}/${R_DODS}/${1} > /dev/null 2>&1
951        dods_cp ${1} public/${LOGIN}/${R_DODS} > /dev/null 2>&1
952        RET=0
953       
954        if [ ${RET} -gt 0 ] ; then
955            echo "IGCM_sys_Put_Dods : error."
956            IGCM_debug_Exit "IGCM_sys_Put_Dods"
957        fi
958    else
959        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
960    fi
961    IGCM_debug_PopStack "IGCM_sys_Put_Dods"
962}
963
964############################################################## A FINIR !!
965
966#D-#==================================================
967#D-function IGCM_sys_GetDate_FichWork
968#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
969#D-* Examples:
970#D-
971function IGCM_sys_GetDate_FichWork {
972    IGCM_debug_PushStack "IGCM_sys_FichWork" $@
973    if ( $DEBUG_sys ) ; then
974        echo "IGCM_sys_GetDate_FichWork :" $@
975    fi
976    # donne la date filesys d'un fichier sur la machine work
977    IGCM_debug_PopStack "IGCM_sys_FichWork"
978}
979
980#D-#==================================================
981#D-function IGCM_sys_GetDate_FichArchive
982#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
983#D-* Examples:
984#D-
985function IGCM_sys_GetDate_FichArchive {
986    IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
987    if ( $DEBUG_sys ) ; then
988        echo "IGCM_sys_GetDate_FichArchive :" $@
989    fi
990    IGCM_debug_PopStack "IGCM_sys_FichArchive"
991}
992
993##############################################################
994# REBUILD OPERATOR
995
996function IGCM_sys_rebuild {
997    IGCM_debug_PushStack "IGCM_sys_rebuild" -- $@
998    if ( $DEBUG_sys ) ; then
999        echo "IGCM_sys_rebuild :" $@
1000    fi
1001    /home/cont003/p86ipsl/TX7/bin/rebuild -f -o $@
1002    if [ $? -gt 0 ] ; then
1003       echo "IGCM_sys_rebuild : erreur ${@}."
1004       IGCM_debug_Exit "rebuild"
1005    fi
1006
1007    IGCM_debug_PopStack "IGCM_sys_rebuild"
1008}
1009
1010##############################################################
1011# NCO OPERATOR
1012
1013function IGCM_sys_ncap {
1014    IGCM_debug_PushStack "IGCM_sys_ncap" -- $@
1015    if ( $DEBUG_sys ) ; then
1016        echo "IGCM_sys_ncap :" $@
1017    fi
1018    ncap $@
1019    if [ $? -gt 0 ] ; then
1020       echo "IGCM_sys_ncap : erreur ${@}."
1021#       IGCM_debug_Exit "ncap"
1022    fi
1023
1024    IGCM_debug_PopStack "IGCM_sys_ncap"
1025}
1026
1027ncatted=ncatted
1028# Problem with ksh and string passed in this function to ncatted !
1029# function IGCM_sys_ncatted {
1030#     IGCM_debug_PushStack "IGCM_sys_ncatted" -- $@
1031#     if ( $DEBUG_sys ) ; then
1032#       echo "IGCM_sys_ncatted :" $@
1033#     fi
1034#     ncatted $@
1035#     if [ $? -gt 0 ] ; then
1036#        echo "IGCM_sys_ncatted : erreur ${@}."
1037#        IGCM_debug_Exit "ncatted"
1038#     fi
1039
1040#     IGCM_debug_PopStack "IGCM_sys_ncatted"
1041# }
1042
1043function IGCM_sys_ncbo {
1044    IGCM_debug_PushStack "IGCM_sys_ncbo" -- $@
1045    if ( $DEBUG_sys ) ; then
1046        echo "IGCM_sys_ncbo :" $@
1047    fi
1048    ncbo $@
1049    if [ $? -gt 0 ] ; then
1050       echo "IGCM_sys_ncbo : erreur ${@}."
1051#       IGCM_debug_Exit "ncbo"
1052    fi
1053
1054    IGCM_debug_PopStack "IGCM_sys_ncbo"
1055}
1056
1057function IGCM_sys_ncdiff {
1058    IGCM_debug_PushStack "IGCM_sys_ncdiff" -- $@
1059    if ( $DEBUG_sys ) ; then
1060        echo "IGCM_sys_ncdiff :" $@
1061    fi
1062    ncdiff $@
1063    if [ $? -gt 0 ] ; then
1064       echo "IGCM_sys_ncdiff : erreur ${@}."
1065#       IGCM_debug_Exit "ncdiff"
1066    fi
1067
1068    IGCM_debug_PopStack "IGCM_sys_ncdiff"
1069}
1070
1071function IGCM_sys_ncea {
1072    IGCM_debug_PushStack "IGCM_sys_ncea" -- $@
1073    if ( $DEBUG_sys ) ; then
1074        echo "IGCM_sys_ncea :" $@
1075    fi
1076    ncea $@
1077    if [ $? -gt 0 ] ; then
1078       echo "IGCM_sys_ncea : erreur ${@}."
1079#       IGCM_debug_Exit "ncea"
1080    fi
1081
1082    IGCM_debug_PopStack "IGCM_sys_ncea"
1083}
1084
1085function IGCM_sys_ncecat {
1086    IGCM_debug_PushStack "IGCM_sys_ncecat" -- $@
1087    if ( $DEBUG_sys ) ; then
1088        echo "IGCM_sys_ncecat :" $@
1089    fi
1090    ncecat $@
1091    if [ $? -gt 0 ] ; then
1092       echo "IGCM_sys_ncecat : erreur ${@}."
1093#       IGCM_debug_Exit "ncecat"
1094    fi
1095
1096    IGCM_debug_PopStack "IGCM_sys_ncecat"
1097}
1098
1099function IGCM_sys_ncflint {
1100    IGCM_debug_PushStack "IGCM_sys_ncflint" -- $@
1101    if ( $DEBUG_sys ) ; then
1102        echo "IGCM_sys_ncflint :" $@
1103    fi
1104    ncflint $@
1105    if [ $? -gt 0 ] ; then
1106       echo "IGCM_sys_ncflint : erreur ${@}."
1107#       IGCM_debug_Exit "ncflint"
1108    fi
1109
1110    IGCM_debug_PopStack "IGCM_sys_ncflint"
1111}
1112
1113function IGCM_sys_ncks {
1114    IGCM_debug_PushStack "IGCM_sys_ncks" -- $@
1115    if ( $DEBUG_sys ) ; then
1116        echo "IGCM_sys_ncks :" $@
1117    fi
1118    ncks $@
1119    if [ $? -gt 0 ] ; then
1120       echo "IGCM_sys_ncks : erreur ${@}."
1121#       IGCM_debug_Exit "ncks"
1122    fi
1123
1124    IGCM_debug_PopStack "IGCM_sys_ncks"
1125}
1126
1127function IGCM_sys_ncpdq {
1128    IGCM_debug_PushStack "IGCM_sys_ncpdq" -- $@
1129    if ( $DEBUG_sys ) ; then
1130        echo "IGCM_sys_ncpdq :" $@
1131    fi
1132    ncpdq $@
1133    if [ $? -gt 0 ] ; then
1134       echo "IGCM_sys_ncpdq : erreur ${@}."
1135#       IGCM_debug_Exit "ncpdq"
1136    fi
1137
1138    IGCM_debug_PopStack "IGCM_sys_ncpdq"
1139}
1140
1141function IGCM_sys_ncra {
1142    IGCM_debug_PushStack "IGCM_sys_ncra" -- $@
1143    if ( $DEBUG_sys ) ; then
1144        echo "IGCM_sys_ncra :" $@
1145    fi
1146    ncra $@
1147    if [ $? -gt 0 ] ; then
1148       echo "IGCM_sys_ncra : erreur ${@}."
1149#       IGCM_debug_Exit "ncra"
1150    fi
1151
1152    IGCM_debug_PopStack "IGCM_sys_ncra"
1153}
1154
1155function IGCM_sys_ncrcat {
1156    IGCM_debug_PushStack "IGCM_sys_ncrcat" -- $@
1157    if ( $DEBUG_sys ) ; then
1158        echo "IGCM_sys_ncrcat :" $@
1159    fi
1160    ncrcat $@
1161    if [ $? -gt 0 ] ; then
1162       echo "IGCM_sys_ncrcat : erreur ${@}."
1163#       IGCM_debug_Exit "ncrcat"
1164    fi
1165
1166    IGCM_debug_PopStack "IGCM_sys_ncrcat"
1167}
1168
1169function IGCM_sys_ncrename {
1170    IGCM_debug_PushStack "IGCM_sys_ncrename" -- $@
1171    if ( $DEBUG_sys ) ; then
1172        echo "IGCM_sys_ncrename :" $@
1173    fi
1174    ncrename $@
1175    if [ $? -gt 0 ] ; then
1176       echo "IGCM_sys_ncrename : erreur ${@}."
1177#       IGCM_debug_Exit "ncrename"
1178    fi
1179
1180    IGCM_debug_PopStack "IGCM_sys_ncrename"
1181}
1182
1183function IGCM_sys_ncwa {
1184    IGCM_debug_PushStack "IGCM_sys_ncwa" -- $@
1185    if ( $DEBUG_sys ) ; then
1186        echo "IGCM_sys_ncwa :" $@
1187    fi
1188    ncwa $@
1189    if [ $? -gt 0 ] ; then
1190       echo "IGCM_sys_ncwa : erreur ${@}."
1191#       IGCM_debug_Exit "ncwa"
1192    fi
1193
1194    IGCM_debug_PopStack "IGCM_sys_ncwa"
1195}
1196
1197############################################################
1198# Activate Running Environnment Variables
1199
1200function IGCM_sys_activ_variables {
1201    IGCM_debug_PushStack "IGCM_sys_activ_variables"
1202    if ( $DEBUG_sys ) ; then
1203        echo "IGCM_sys_activ_variables"
1204    fi
1205    IGCM_debug_PopStack "IGCM_sys_activ_variables"
1206}
1207
1208############################################################
1209# Desactivate Running Environnment Variables
1210
1211function IGCM_sys_desactiv_variables {
1212    IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1213    if ( $DEBUG_sys ) ; then
1214        echo "IGCM_sys_desactiv_variables"
1215    fi
1216    IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1217}
1218
1219############################################################
1220# Build run file
1221
1222function IGCM_sys_build_run_file {
1223    IGCM_debug_PushStack "IGCM_sys_build_run_file"
1224    if ( $DEBUG_sys ) ; then
1225        echo "IGCM_sys_build_run_file"
1226    fi
1227    IGCM_debug_PopStack "IGCM_sys_build_run_file"
1228}
Note: See TracBrowser for help on using the repository browser.