Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 8054|回復: 1
打印 上一主題 下一主題

[問題求助] 版本ubuntu 11.10 軟體nanosim 無法執行錯誤?

[複製鏈接]
跳轉到指定樓層
#
發表於 2012-5-6 13:58:13 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
10Chipcoin
各位大大好:
) o* F# Z' H0 |2 k6 k5 Q                      小弟執行nanosim時,卻無法跑出視窗來,有個錯誤可是我不清楚該如何解決?問題如下7 }6 a0 x* E  ~% R; a
                      [: 113: 64: unexpected operator
! F7 \8 f, x. {8 s, U4 A( a/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim: 1: Syntax error: Unterminated quoted string; E1 Q( k) T- J% B/ N
有大大遇過這方面的問題或是指導我方向去解決, 謝謝.
  Y& h: A* V& {- U0 k& {- A5 A我在猜可能是這個檔案內的文字需要修改 但不知道該如何修改?. {, q  ]- j! X* o. Y
以下為/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim 的檔案內容:
$ o7 ^4 g  f# O( j    #!/bin/sh
4 P# b) r# t; |0 T' ]0 r; r#0 g0 g7 U& `! u4 B1 _* }9 q* h
# Copyright (C) 2001 Synopsys INC
3 c2 A( E# b* h7 k0 }! k. P# EPIC Dynamic Simulation Wrapper (DSW)
. J6 ^1 @% r; i  J9 Z; {" V#
$ ?- H& v. ]8 ^8 K9 \3 W, B/ e2 xeval ${DBG_EPIC_WRAPPER:+"set -x"}
9 B+ K) r2 C- X1 ^1 F+ _" D7 Y* W* `, \  Y
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then6 b. n. m* B, A
    TEMP_ARCH="$SES_ARCH"8 p& V9 @! K7 p" I) E% ?
else% |! O, p! j, z% B1 x. W- M, U
    TEMP_ARCH="$EPIC_ARCH"' l# [! }& C( q" S/ j4 L. N
fi9 y6 {7 d0 I: ?: g% T+ c: V
6 A, V" z. q7 z/ z
scan_for_hva_args()
# `% m. K+ `% n5 z2 K* P( p{
% A4 H% u$ E+ E9 w* w  {1 ~  /bin/rm -f hva.init 1>&2
' `" @% T# w' b& P* Q  while [ $# -gt 0 ]; do
* f1 @- X) \3 J- K+ d  v    case "$1" in2 I+ Q. s( s: `/ N+ R% |
      -vaf)
+ R) v  l2 N8 g5 r- A3 ]           have_vaf_flag=1; l3 _' ~% C3 \; q) W: U
           have_va_flag=05 O/ D( t& F! [
           shift;
; O: ~4 E3 B9 L9 a# x# q           continue;
, n! H" \3 B. E! K, B# a( g        ;;1 u- Q8 w( V" w8 C" V. b
      -va)
5 A) l( R. f' |' U$ r           have_va_flag=1
2 `( q6 f: E  L: @1 ^1 q3 T$ O4 d           have_vaf_flag=0
/ s9 k7 n+ D# x+ k% z" T           shift;
3 I$ y' b% |4 N9 ]           continue;8 i9 m" {! b8 K4 Q8 _
        ;;
) P$ O4 v. ^, ?- f. ]0 x1 I+ p      -*)6 W9 m: R* Q3 T/ r2 n2 c7 O+ o9 N6 Q
           ARGV="$ARGV $1"
0 V9 A* y+ V8 t2 h  ^- z           have_va_flag=0, p0 U  s" j2 E8 w
           have_vaf_flag=0* ^) o7 X' J6 s8 u+ `, K
           shift;
; E1 Z  a& u, m* g3 v' ~           continue;: a/ I1 b$ j. U. O0 ]/ S
        ;;
0 I( }) }8 [. ]! A5 Z      *)8 u: s3 @7 w+ t$ P
           if [ x"$have_va_flag" = x"1" ] ; then
3 a' n! j$ [( _5 N% j) J* f              VA_FILE="$VA_FILE $1"
6 G% a) ?7 v+ U* L" z           elif [ x"$have_vaf_flag" = x"1" ] ; then
! O! t4 Z* g% o: ^              X="`cat $1 | sed -e '/\;/d;`"+ [" U$ g% U8 W) u6 n2 B9 x. Y& x
              for token in ${X}; do
" L5 y0 _# e# M                 VA_FILE="$VA_FILE $token"
0 ^+ j1 p3 G% k" g2 z( B2 {+ J" z4 x              done
% J' t( `3 ^! f. K5 u5 a& k$ q; ~9 h( _- N' T           else0 e5 m- ]5 l$ ?- s& v; |
              ARGV="$ARGV $1"
2 B) o  L6 z) W8 S! ^           fi
9 E0 U; t9 S' ?3 Y$ W/ k           shift;
2 w4 _& @6 W' v$ D/ [# X        ;;  P3 j8 K  t+ Z
    esac( u# u+ q" p/ W, Q0 X
  done: g3 @6 u$ f2 @) p3 ~: u

9 d* t3 {- V0 _0 T/ l0 N6 S$ L- O  if [ x"$VA_FILE" != x"" ] ; then
& E0 J# ~+ T3 }7 e7 o##     /bin/echo " xxx ARGV $ARGV"
  ?- A. Y$ V$ a" y       /bin/echo "choose nanosim $ARGV ;" > hva.init
) {8 {; Z0 e4 b. i& n- p/ w       echo vcs +ad=hva.init $VA_FILE -o simv
  ^8 U9 n1 d6 x/ n; e$ n: T# \       vcs +ad=hva.init $VA_FILE -o simv  b/ j5 I& }: Q' `
       exe_status=$?3 A+ }% G& V- [: ~: Y3 i
       if [ $exe_status != 100 ]; then
/ P" b" B3 R- n: `          /bin/echo ""
8 J4 y1 _2 c; I' s          /bin/echo "ERROR: Execution of vcs exited with code $exe_status"
* V4 [( K, ~* O/ C9 y          /bin/echo ""
, l6 y& j/ L4 Y9 H6 {) v/ y$ K          exit $exe_status
8 E- b6 j- G8 M* `8 X1 w       fi
6 E+ V7 e5 x, N5 O1 v4 T7 {       hva_files="-n simv.daidir/amsVD.ntl simv.daidir/amsWRAP.spi"
3 D( Z1 `$ o5 Y' N* h       ARGV="$ARGV $hva_files"$ @" |4 S4 g# p5 J, r# ^
  fi
. ]0 o* I& M" o! j( X}7 m% I5 ?* z- V, H* }: u9 p
#-------------------------------------------------------------------------  [" e# ~  g; s. H* ^
5 B; p% P2 k! K
cleanup()1 A7 M- E6 m2 Y7 G
{' L' q$ K1 F' c
    if [ -d "$rundir" ]; then
$ H$ o; j0 C( d6 G1 C. v1 |+ J4 x& ]        # On AIX, a .nfsXXX file is created if libModel.o is removed
. L1 X$ g& W, R& j6 F! w& S        # so .epicrun is not removed because directory is not empty.
: b' ?0 \2 ~  b/ ~- s0 d% C& A        # Solution is to remove it again if the first rm failed% ~) x( c5 G  z3 O) N; K: W6 K9 Z8 }
        # (rm -rf $rundir || rm -rf $rundir) 1> /dev/null 2>&1
; X2 S# Z- E- t2 t, o6 w3 q        if [ "$EXTRA_CAPACITY" = "YES" ]; then/ q  U! V. H  h( v
        chmod u+x $rundir/rpcidfile1 V, h; I. z, h8 N' u
        $rundir/rpcidfile2 \. ~. f: h2 J0 x+ i, t
        rm $rundir/rpcidfile& [# l+ F- Z! x/ c+ I2 g$ @* T
        fi
/ G) v* H2 n+ t/ c9 v        rm -rf $rundir+ p% b- {6 S" b. Q
3 I# K( @, e9 X  y5 b: d+ X' J
        #Due to NFS problem, we have to copy files needed to7 c! \: k- O8 k( x0 V
        #/tmp/<temporary directory>, then symlink's files
/ M& T1 d1 o3 w' ^+ b* v$ F        #to the local temporary 'rundir'. This avoids the problem
( _. h& N+ P9 o7 c        #to remove 'rundir'- |& Y* n$ w7 N) |' f' F3 M5 j
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then" p+ d( P, l7 U/ u3 u. ?
          if [ -d "$tdir" ]; then
2 q( T  G, k$ [7 G* t2 O: W4 Y7 I9 f            rm -rf $tdir: u: q6 f4 q- t, U* T
          fi
( n' W% k& Q+ p& E        fi+ i* G# n* l- O9 |3 x
    fi
8 L! @8 s& k3 z2 U, j2 f    if [ ${exitstatus:-0} -eq $ld_err_code ]; then! |) V- H8 F0 s' w; q# D
        [ "$has_model" = "YES" ] && rm -f $cwd/libModel$suffix
! y2 c' @! @3 {% o" ?        [ "$has_custom" = "YES" ] && rm -f $cwd/libCustom$suffix
1 l$ |# O/ k; \" L0 }) W# |    fi
2 @" Q; ]5 a/ |- p0 G8 b6 ^    [ -f "$EPIC_SCRIPT_MESSAGES_FILE" ] && rm -f $EPIC_SCRIPT_MESSAGES_FILE 1>&2
, m7 I) Z5 O; x8 c; z    exit ${exitstatus:-0}9 e/ O7 }7 P/ z# x  v5 V; Y- Y/ y+ ?
}( \# x; @0 v; Q; N

8 C) ^4 @# {& \" @! ~3 v$ I) |Exit()
2 P8 ^5 V9 k( k9 u8 v. m2 f* V{, \  _. N# T& ]+ Z* o
    exitstatus=$1
) e0 \7 M( S+ e2 u- I7 h4 H2 w    exit $exitstatus+ c6 o7 F5 g' a% m
}
) M8 S" K) v& O. g5 e+ r8 X7 p) O2 w& g3 @
# get_epicrc filename keyword: z4 G( i; s  Q& S# J0 ]' @
get_epicrc(), e6 z: Q; o' c  C  B
{$ L$ _( r. E+ n( `2 s  |0 K/ h) h9 [
    [ -f $1 ] || exit 0" P: D1 ?# M" G+ K+ k6 \4 d" c
    key="/^$cmd2:/{print \$3}"4 Q' T) C+ [9 C4 B% U
    awk -F":" "$key" $17 S; i2 W2 `1 C. g# x# q
}" ?  S7 X4 X5 ~5 I' t! u
4 K7 b. w& z' ?4 @- G, y/ j
#" y8 r+ {: U0 X; u& o+ I
# set datasize limit to hardlimit
9 F2 j. ?7 Y, V" V6 _7 N; d#/ d3 x% r2 k  o0 _  J
set_data_limit()
5 f; l; V2 i( E/ \) `0 ?{
0 [2 C, ?$ V0 X/ M7 D& f- ]    dbglimit=0
' {0 F$ Z! f) A* e    hardlimit=`ulimit -Hd`
* y8 s) y' m! `4 [+ @    softlimit=`ulimit -d`$ \7 Y, r: B+ j: H
    desiredlimit=3500000$ b- D9 w/ Z2 P5 z
    hardisunlimited=0* T* L* F3 f+ H/ z- H4 R! H' }+ S3 n
    softisunlimited=0$ v* G$ t  C: [# x) P% W  f
    is64=02 A* I) p+ M3 X4 }( z
  w! x2 F8 d( z( m; s* b/ |
    case "$EPIC_ARCH" in2 c4 c8 F) Q( ?& q: A- q
    *SUN*64)3 B7 z+ `- x+ {4 X4 e
        is64=1
$ m0 I# [+ f* X: c& U- L        ;;
1 b: S0 b: T: a# A$ I    amd64)% _$ Z0 s( D; q: r/ b$ m
        is64=16 `3 D" v, X# p
        ;;
; u" b8 I9 }  I& ]4 K    x86sol64). v8 _0 e* a4 _
        is64=1, G$ D' p. C* v+ i
        ;;
- A0 s1 e% s" _0 e, D$ F    aix64)
, R5 [) H) [  W. @9 ^; n        is64=1
# [' D1 Z# \5 ~+ Z        ;;
$ P+ G4 R, c& w8 }( y8 p4 J) _    suse64)! M# x/ X2 h" F! ^* `6 o+ w
        is64=14 ~( y- r# _; x
        ;;! @- }4 a0 U7 D4 B8 a
    esac
2 Y! p: A7 d4 N. f; V
; Q- A* n+ m, w, R7 l* W    if [ $dbglimit -eq 1 ]; then5 G- j$ D- \3 j( q! M9 G
        echo hard $hardlimit soft $softlimit; B3 Y, v* n9 D0 ^8 p
    fi8 W. `) x6 O5 O; ^, D, Q

; X& u9 M+ T* @    if [ x$softlimit = "xunlimited" ]; then
# a6 g- U/ K+ H        softisunlimited=1: n: I' K4 z$ S4 o6 F' s: j! p5 f
    fi
0 t) R+ C. j4 B7 h9 m- |
( S# f" ?' b8 M  s# W' ^    if [ x$hardlimit = "xunlimited" ]; then
9 j  S; D7 m4 v0 O. C8 l3 Y        hardisunlimited=1
/ A7 F6 g" h3 {% O/ Z0 G( a  e    fi" N: _1 T" |  r8 l8 q3 e

- O" }1 i; ~9 _8 Z9 x    # 64 bit machine should have bigger than 4G4 j& x. N6 L2 z  z6 V9 `, f
    if [ $is64 -eq 1 ]; then4 [; x1 c! F' \9 [; Q5 Q- z
        desiredlimit=5000000. @" s6 ?1 M9 A+ U6 V6 D; V
    fi( O+ r- _4 ~# w* n! F. p
2 c: y8 G8 v, i) V6 U: K6 R
    if [ $hardisunlimited -eq 0 ]; then) |5 g9 n6 h. h! f
        if [ $hardlimit -lt $desiredlimit ]; then
9 R! @3 _3 ?+ C# x3 M  ?            echo "WARNING: datasize hard limit $hardlimit K is too small."  u' _( k# ?/ W  B  G! Q, V) i" {5 Y
        fi" |( S( |" C7 u  {1 a
    fi  r, t- r* k$ J3 s# t! j+ ~

7 ]* ^: G8 r0 w. Z( L    if [ $hardlimit != $softlimit ]; then
) o9 L- h+ j8 ~$ e        ulimit -Sd $hardlimit
/ `2 m  S6 P# Q4 C" r4 @4 ^* Y#        echo "WARNING: datasize limit is set to `ulimit -Sd`"
$ d2 }* Z! I5 V: H5 ~    fi6 d$ d+ s- q, X# E1 u
7 _+ h: ]- M* o8 _* A" J
    if [ $dbglimit -eq 1 ]; then" z8 I" A9 {: U2 S
        echo datasize hard limit: `ulimit -Hd`8 F3 [9 J0 C  m
        echo datasize soft limit: `ulimit -d`
6 Y: @3 o+ T. j$ T5 q" H1 `    fi
9 D  r1 e# {! |  K: `: b3 Z( w}
" q: k  _2 N" ]. i7 ~; c+ s) h" q
#4 T* T1 x- K$ E( r
# set stacksize limit to desired limit
4 ^, q4 s! x! t* b- O6 F#
  G* g+ i9 F7 W9 Q8 x5 |4 z0 eset_stack_limit()) V  |! X1 _  {7 w
{
; D5 _* k  w2 B4 g& q    dbglimit=0; L! A. Z* L" e
    hardlimit=`ulimit -Hs`5 B1 P$ a( e( O3 K$ F2 M
    softlimit=`ulimit -s`2 C* J0 f8 f& g2 P& V& G4 o
    desiredlimit=60000
$ H) _$ Z' ~3 Q/ S" m9 ^; t- S: S    hardisunlimited=0
+ I5 D/ r0 b$ R8 l    softisunlimited=0* b1 R2 @2 P0 I& g# F
    is64=0; g) \7 {+ G$ V7 h$ r

! ]* j  {' Z8 c. u9 e( q; ]2 ?    case "$EPIC_ARCH" in
+ E( I3 O8 |8 G2 \    *SUN*64)
& U6 U: S( E7 T- ^6 o2 D/ _        is64=1
$ i- N& v; I. i- r' H: _4 Z        ;;
' Y+ n* W; `2 ^    amd64); u8 R' p4 c" O: e- U
        is64=1' q+ q" K3 ?) ^& C# b. B3 Z( B7 D
        ;;
3 z) C* g# a2 y( B    x86sol64)
& D6 s( l$ ~# u( [* G( q  G1 Q7 h        is64=1
$ p& n3 `" K' r% a0 y% |6 ]+ K        ;;
" H. a: |8 B9 P8 A4 y) S! \    aix64)
2 e, \+ d: K- z$ L+ J        is64=1* A" b* T+ g" H
        ;;
$ z2 H9 ~7 a8 v0 J( o2 B    suse64)+ U2 j: \5 ?" V2 o& ?& g
        is64=1. {/ h; T; \$ O2 h: A6 [
        ;;
9 ?& F: P4 g3 g+ j' I, U    esac# [0 J, R: W5 [) F3 ~

) u, z& o. l; I5 O# V/ yif [ "$EPIC_WRAPPER_DVLP" = "" ]; then7 d1 t: s2 {5 I! \
    if [ $is64 -eq 1 ]; then
0 B/ X% J2 q+ ]( t# W' E        desiredlimit=2000007 _  {3 S8 }$ {1 y) ~8 C
    fi3 e/ R: e" y) L1 p
else
- w, _# s9 k1 n. J; \    case "$EPIC_ARCH" in3 n5 F  U' D% G" p% F
    *SUN*64)2 o* l( S( s8 H: t5 A
        desiredlimit=200000
8 l! I# a3 [  [% s# {+ v$ o; V        ;;$ i! f. o) x" e6 ?8 [
    esac
$ k: K# y1 E+ g: A& A* Tfi
$ B/ O0 h' s/ L+ z) w4 k1 Z# T       
7 J$ Z' P- `7 D) ^* {9 B' K    if [ $dbglimit -eq 1 ]; then" t* ^( d$ ^$ U
        echo hard $hardlimit soft $softlimit  _/ A! U1 w* F$ g
    fi3 D4 a* C( ~9 D) [( C4 J% ?
9 ~. m* t% ^: j
    #stacksize can not be unlimited, pick smaller number3 e2 ]5 y- O1 {8 ?
4 K) y  Q3 _! c2 L% C: C
    stacklimit=$desiredlimit6 E) c% h% l7 O9 B- t, G

* X  t2 g/ [+ e& H5 V    if [ x$hardlimit = "xunlimited" ]; then' ^$ Z. ]" \; K. v+ a! \
        hardisunlimited=1
$ v; d' e$ b9 b, D: t  \    fi
4 b9 X+ v/ }6 Q# H, {3 ^8 Y/ z/ S/ P0 C4 G* s7 s/ k
    if [ x$softlimit = "xunlimited" ]; then
" o- W5 k8 D0 [+ o* O  I        softisunlimited=1
' o& S4 k7 X( v! t7 B) ?2 S" D/ Y    fi4 W2 g" ?0 J0 Q* t. N
; x/ ]1 i+ _6 R
    if [ $hardisunlimited -eq 0 ]; then
- X% ]' f$ z" o' h" M        if [ $hardlimit -lt $desiredlimit ]; then# y$ t" J( k1 r* h$ q
            echo "WARNING: stacksize hard limit $hardlimit K is too small."
, G% P9 L2 K9 }* `9 t2 Y            desiredlimit=$hardlimit
% b% [) o7 x* ?) Y7 w. P            stacklimit=$desiredlimit
4 B% I! ]: R( d, x; R& O( s9 s, C        fi7 T7 i* j. ], g1 W
    fi
- ~" f# ~; z2 J- r6 S# k4 i9 Z! d, S& S$ L- G
    # desiredlimit is set to proper value (< hardlimit)
. c# t$ s6 H# q0 k+ V+ S; a# x7 M: l4 h2 k. Z0 d
    if [ $softisunlimited -eq 0 ]; then
7 r, z3 F. ]5 [: W2 ?& q9 d( F5 N1 P- }        if [ $softlimit -gt $desiredlimit ]; then* T" T, z- V3 t4 |$ w
            stacklimit=$softlimit
- A* k8 u/ s- j+ |1 y" S        fi; V+ ^4 A5 G# a- K$ g2 n7 P) o- `
    fi6 t: S/ ~9 ?4 F& N( N6 g0 r' x

: w% _1 ]9 S, N; n    if [ $softlimit != $stacklimit ]; then! r* P5 I( T" x8 Z* `% L' t
        ulimit -Ss $stacklimit
3 q; \/ H2 T, P  |! f- {#        echo "WARNING: stacksize limit is set to `ulimit -Ss`"
7 L5 N3 ?3 p  O: ~( d    fi
1 T& Y4 b5 b7 t. J) H, `# X; l! y4 ~2 s6 ]  J* y6 O
    if [ $dbglimit -eq 1 ]; then' M) w1 e/ ~: ]0 I0 K9 _9 U
        echo stacksize hard limit: `ulimit -Hs`
4 Q/ x6 R7 I0 h0 t$ \        echo stackize soft limit: `ulimit -s`$ L, o- F- B% L! t$ _
    fi% x  `; N6 @/ y" `$ j4 M5 {
}8 {8 @+ D( W9 }. }, y' z2 `
- u7 n6 F1 ?+ B5 U" H
open_epicscriptmessages()
* |3 M0 U& u( z{
; }; {  V* M( R. T# U% p#generate  temp ".epicscriptmessages" file based on pid
; }) l1 A  O' @' M8 [$ }9 @  x! hEPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
/ |3 ?6 y. R; }" Kif [ -f $EPIC_SCRIPT_MESSAGES_FILE ]
2 _! J( J2 l' [: b7 othen - h' v' [! U. ?+ S
  until [ ! -f $EPIC_SCRIPT_MESSAGES_FILE ]4 L! m  A0 U' \
  do
( s! m) T9 i- [/ H    EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
$ \3 Z7 i, V9 P- y  done0 |$ |2 f7 h! t( r" e
fi" _/ g, i( G! L9 F( n2 P
7 O6 u" }& n8 k& G
export EPIC_SCRIPT_MESSAGES_FILE) L7 {0 w) \* w6 @
}
6 W+ N5 T0 h" w2 t# d# V% Y4 R* _& c/ U, W' y6 ^3 j9 \4 @
. Z+ D' [1 |7 v
cmdname=`basename $0`
, g% g: o" A+ o2 ~+ X' e9 Ypostgres="n"
  D" q9 J9 K) |+ lostore="n"
& m" Z. }6 K% Egui="n"
* s5 Z0 {5 r+ J4 `( T2 U9 L6 wdatabaseOn="n"* k, L' `  _1 }: s, H& Y0 @) p
f_next=0' M, C% E! z. D1 h2 x
f_option=""5 j( g$ i3 x1 p9 J0 i- y( `( U
o_next=0
: s; V5 I6 O4 a9 S- m" ^o_option=""
* Q6 r" ]( @  ?9 A8 LworkDir=""
: r: k, N. X; r, h/ c5 RworkDir_next=0
: d  n  [5 k2 ?9 B: XerrFile="powrmill.err"
! A; S. a5 X* v/ [: B4 _& Jwin32flags=""+ U- J3 u: `4 a  {4 v" q+ ]
ln_default="ln -s"
" A* k. L4 t7 V/ \3 G- s$ `2 h+ p/ g: k6 W& x
har_hilo_file=""
9 }! O3 m+ Y. I9 ~- K) |. Ehave_har_flag=0
& i5 s8 N  |. lhave_har_setup_flag=0
' U% R4 T9 ]7 [4 k5 o2 x9 v- Lis_special_har_run=0
# x% @+ Y( E0 P: Mhar_ofile_prefix=""* o; F# ~! k8 T2 L2 A) E4 [5 z% R

; G/ g2 \' @! [6 jhave_va_flag=0
- ~' a, Z+ l, c8 ^% k! r5 Jhave_vaf_flag=0$ M( T; T: c7 N$ d. a
VAF_FILE=""4 R2 [' j$ p# p5 f* b
VA_FILE=""2 e0 j0 i; p  }, x* P1 `: ^4 [
ARGV=""
$ m- Z, M1 U& v! Z% `2 B9 n' n9 I" U. X  t" b  O+ x! m0 ?. R1 z3 Q# ^' T5 s
ORIGINAL_COMMAND_LINE=- k. }) K, J$ Q( g. o. g& k2 e
LOOP_CTRL_FILE=".ns_ba_env"
) w) G$ v9 ^- O& v8 jALTER_HK_FILE=".alter_hkf"- g+ d! U7 }6 {7 y
ALTER_COUNT_FILE=".alter_count"1 V5 G3 Y% {2 s/ E
MONTE_IMG_FILE=".monte_img_f"
; p9 z* [( y# b; R' T5 ZMONTE_COUNT_FILE=".monte_count"
9 I' @* `  C+ f( [MONTE_CFG_FILE=".monte_cfg"
: d9 p8 I9 o( I; F# G1 XEPIC_SCRIPT_MESSAGES_FILE=".epicscriptmessages"
) j0 f" M4 X) H, f: H+ O, D' y, D: ~- ?  t9 U0 q
open_epicscriptmessages $@+ `* o9 e# s3 ]* _( S( N% b

8 w4 O0 x9 ^$ }# M( v1 Yscan_for_hva_args $@
9 Q& g; y* g9 ?% L6 y" n, `& u. s# K$ K1 @) h* z
scan_for_har_args(). l: |; F* @5 E5 E
{
5 k5 `, S8 y, z  while [ $# -gt 0 ]; do
- L5 ^2 T9 [6 r* a( v* Q( l1 r: w    case "$1" in
+ p6 |! U1 g1 O0 |# h8 L2 k      -har)) z$ \7 x0 k3 D& s9 _$ o* e. `* S
           have_har_flag=1
9 }$ Y; L/ j- q5 _  t           [ $# -gt 0 ] && shift
/ ~* I; j# j: p/ W           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then
! d6 y) _- p# p& Y# h5 T             har_hilo_file=$1
# l6 B; x( W$ y; Y             shift
: Q$ _- M  e( P" z           fi
7 Z, q% x. n2 O           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then
, ?& B9 F! j. K# v             echo "Too many arguments to -har flag. Only one hilo file allowed."; @' M8 G1 w8 ?2 J0 [: b
             exit 1' Q0 k8 a& J- h8 ^0 T! P
           fi
2 h4 u: A" H6 J, m. I           break
1 |. e) Q+ L9 N) h1 z1 A        ;;& O  o1 K# k: l! U: ?# J
      -har_setup)# M2 x9 o2 b- }, x# [) j% e
           have_har_setup_flag=11 T. i& ~% t: M9 A: [/ P
           break
+ h1 N, c5 {( v( h6 q; f" D' c0 F) R        ;;& I/ p) p- A0 @
      *)8 R# B# a! e" a5 u% \( O
        shift
% u% c! D# q# s1 @( a1 o& m% e7 K" {        ;;, D& ~+ C6 s- t8 w
    esac
: }% {. D* c2 n! Z3 b3 X2 S# U  done
* Y, F; R0 ]$ |1 s. x}
! e" \* \' E7 t/ {% [  I
$ {- D0 R$ B! k: h1 yscan_for_har_args $@* x* n5 ^3 _7 g2 Z3 u' Q
: ^( Y2 j9 I0 r0 V# [( N
for argv in $@0 R$ L' ~! j$ @
do+ d  w' T. j3 L
   ORIGINAL_COMMAND_LINE="$ORIGINAL_COMMAND_LINE $argv"
3 g, X5 K6 u: j% I- X    if [ $argv = "-gadb" ]; then
1 Z7 \8 @" U1 M$ b# M        databaseOn="y"
1 }8 j4 ~6 {; p2 Z        workDir_next=17 y2 R+ l6 w3 @7 [0 t: Z3 n
    elif [ $workDir_next -eq 1 ]; then
* M0 B# I/ m- O; P8 L! w. S# P6 w        workDir=$argv
2 E" P4 T/ ]" X2 `( Z+ b1 L% y        workDir_next=0
7 F/ P# y! P6 m, O* {    elif [ $argv = "-ga" ]; then
' Z2 U2 @: K  S        gui="y". ^4 A; k# j0 I* u( ]
    elif [ $argv = "-f" ]; then
0 X. P  ~( Z+ G, e3 F' Z        f_next=1' [8 }: @# z+ V$ h5 |$ u" s
    elif [ $f_next -eq 1 ]; then% J; _- X4 ]5 V( R3 L( A# [% R
        f_option=$argv
- ]  L+ x6 V1 S7 z3 X        f_next=0; s/ L2 d; F$ T% e+ v2 N1 k- F
    elif [ $argv = "-o" ]; then
: V" L6 }  M$ v        o_next=1
0 Z, k% V5 F) s/ F1 s, u9 L" E    elif [ $o_next -eq 1 ]; then  m4 a3 X8 L% t! D  m* y4 W
        o_option=$argv
: H% i- y. b( Q; H, g        o_next=0
( C" S, \' o' x, a% U, ^    fi: L' t2 ^$ q: A% ^; Q
done
. E- j5 F( _7 I  h: secho "Command line options: $ORIGINAL_COMMAND_LINE" >  $EPIC_SCRIPT_MESSAGES_FILE 5 Y. m( T% _  E4 w
7 O5 g( w  W% {) U0 `! l/ A9 a2 D
if [ $databaseOn = "y" -o $gui = "y" ]; then
, d$ A. y0 S, g% e  if [ $cmdname = "pathmill" ]; then
' [1 \' ^+ d4 a. o2 b    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5"  -o "$EPIC_ARCH" = "SUN4_SUNOS_5_64" ]; then
& N' p0 R5 A$ [+ Q5 x( F         ostore="y"' Y+ G% H5 {9 Z8 M2 a, f7 W
         postgres="n"
( ?) b  h& ?; A- f2 Q& v  ?     else) \! o8 O& h5 c3 F% @* a# ?
        echo "athmill GUI is supported on Solaris platforms only" 1>&2 * w/ ?) S/ V; L; T7 ^
        exit) J/ F  e0 n, |  m8 c$ t
     fi( A4 Y5 w5 B' q3 q. }7 w0 ?
  else
( x$ V3 f# p' n4 ]; G8 E, L9 p; b    postgres="y"5 f1 `0 e" \/ e$ a& a$ A0 E- @
         ostore="n"
( v8 j, [- p' G1 \: p. O. Q6 }  fi) c' u2 K$ F0 l* ~1 H4 ^! ^0 j
fi" {4 [% p0 c9 \* G6 i
# K/ r8 p5 \$ D+ P) T4 s
if [ $gui = "y" ]; then4 t7 r+ D# k) L4 ~+ K# @$ I$ ^% x
    if [ $cmdname = "powrmill" ]; then1 G' s6 ?# ~5 [' t7 B' ^+ A: i
        pwga $@  O  c. g+ T# H% W
        exit1 s/ V2 ~: V; Z2 [% p+ i! j
    fi7 g/ R- m) l! C4 L' C
6 ]7 T8 k( H7 F2 ^3 I6 t+ B% X
    if [ $cmdname = "pathmill" ]; then
* ^8 `0 `  N! P        if [ $ostore = "y" ]; then
! {% F+ x1 d4 w; u# q           ./pathfinder $@4 [( y# }$ ^; r6 G4 H$ @
           exit+ V: p& J3 Y9 U# m5 g* P6 T
        elif [ $postgres = "y" ]; then
; f! V3 U! u% W/ j           pmga $@: v# K" v, N3 w
           exit! x) F5 x! q$ O) O! @! y
        fi
- x* v2 R( u( }    fi3 M" `3 T7 f* G
fi/ l# `+ ?" q$ J/ w' H# j* r+ d" r
  {7 J  x1 V; }8 \: J) q4 ]
if [ $databaseOn = "y" ]; then; J: L% j. Q8 _8 c- |
   if [ $ostore = "y" ]; then
' s% T: l& R4 c( y* S0 P, G5 H! b      if [ -z "$workDir" ]; then
  M7 ]+ M9 A8 B         echo "Error: Missing argument for -gadb option"
( v  q1 Q; W9 e6 k2 {3 t& }         Exit 1
# ~7 }/ \3 g+ R/ E7 c      fi5 O7 k6 [" d1 U5 M
   fi
9 W8 N5 T" F, r1 ^   if [ $postgres = "y" ]; then) P# t5 U& [1 G- }
      if [ -z "$workDir" ]; then
5 [4 n9 D$ O8 {( N6 F         echo "Error: Missing argument for -gadb option"( a; Q: W! ~' A% B8 `
         Exit 15 b! P- E- M7 n  e( p) p
      fi2 R; y6 Q1 s' n( l: E6 |
   fi+ ]2 v% b% x6 S
fi
' x2 ]3 z2 g" I4 x  W, U0 e5 g9 e3 T1 O' V
if [ $postgres = "y" ]; then
1 E) a3 U9 m$ j. Y2 q
5 ?' n6 U1 }# H! k7 b9 k    if [ -r $EPIC_BIN/scripts/gui-init ]; then: O3 u: J) H3 w7 z! S( R
        . $EPIC_BIN/scripts/gui-init2 H1 e1 v6 O1 |6 _: K& r# R
    elif [ -r $SES_ROOT/bin/scripts/gui-init ]; then, G1 C; N1 P( Z9 {# ~) ^2 n2 P
        . $SES_ROOT/bin/scripts/gui-init3 S2 H+ j9 P' l+ M7 n" O% w+ y. T
    else3 \9 q) S' Z% a( V) J) t9 a% _
        echo " ** Installation in \"$EPIC_HOME\" has been corrupted!" 1>&2- U( \0 C+ ~! ?; g( c- Q
        echo " file bin/scripts/gui-init is missing." 1>&2
: k) R  P8 g: x( g8 K    fi; S2 e& K5 o  s' [& t) d6 D" v1 I

/ i8 T; x# g: c" P/ k    workfile -tool $cmdname $@
6 y5 T! j9 b( d1 i5 E1 E& ~fi0 y5 o! S3 M1 i$ g4 V9 G7 X/ D. Y
, e  \8 G9 o$ x5 j' b' d2 M0 H  K0 ?
if [ ! -z "$o_option" ]; then
) G6 a2 J9 r0 y9 _# g2 T) z5 R    errFile=${o_option}.err4 r5 A1 ~, L+ ]8 G* T$ U- {. R6 q+ S9 B3 L
elif [ ! -z "$f_option" ]; then
2 Y0 Q7 r3 p2 t. [2 t3 |5 A( ]    if [ -d $f_option ]; then" d# Y% l: Q! C, [1 Y% V
        errFile=${f_option}/powrmill.err
8 S9 y  m3 t' j: G1 G# @# u5 j6 H    else errFile=${f_option}.err# e3 r* M( T7 S: `) t  {
    fi" X$ i( h* Z' O8 l+ `
fi1 `  h/ `- V' R# \, T. q% m9 L

1 N! W( l' V0 b* G6 N. i+ |3 c
! L' |7 c, d# h  ?if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then8 x. z0 H& b# @& \$ K/ x& G. b! X: |
  rundir=.epicrun
$ F( ~1 q3 S+ i5 v1 j1 Z. Q  eelse6 R3 ^. i$ w' F: x4 ^! m
  rundir=.epicrun$$5 u( i' N" o% |; Z+ d* w
fi, \8 r* T" L: O& X* @6 O

# T1 n8 r- _! j/ Z) C( ]6 jlibpath="$rundir${EPIC_DLIM}$EPIC_DIR"6 n+ W. |1 ]0 q3 l- n( ]2 a8 m
. {' ]( o2 Q3 w" w; L; k
cwd=`pwd -P`
, A+ L: q0 {9 Mif [ $cmdname = "acehdl_w" ]; then! b" o4 g. G- w! i( x1 d
  cmd=`basename $0 .sun`
0 y( ?$ j' C$ V: x7 w3 C  cmd=`basename $cmd _w`
9 K$ G# t) O+ {else
# q7 a" M( k5 H/ g8 |  cmd=`basename $0 .sun`% N4 d) I; d  f( A* p, l+ g1 I
fi
% @  w9 Q+ k' ]& h7 V" r, ^8 A, X1 N4 n6 ~
command="$EPIC_EXEC/$cmd$EPIC_EXEX"& g8 E, l" v& w: c( [, F
[ ! -x "$command" ] && echo "$cmd: not installed!" 1>&2 && exit 10 q4 h3 x, Z( F" e

8 x* ?/ K, d$ @6 R6 D# buildmod extracts -u/-fm options and calls genepiclib
& K3 P, ]9 z" Z, k0 L( ~* E# It also set the remaining options to variable CMDLINE2 Z( U" Y" W3 t, O
# look up in .epicrc for -fm & -FM parameters
/ ]/ ?% h/ B5 F! p2 m* F
7 Y# W# j, J8 v8 Lfmlist1="`get_epicrc ./.epicrc user_adfm_obj_modules`"  t6 `# v$ F; S3 _* ?& l9 x' m: |
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules`"  O$ U4 A. \6 L
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules`"
1 w5 Y- k: k) k* Z  I! w$ l& x0 p
2 E3 ^' ~6 L# CFMlist1="`get_epicrc ./.epicrc user_adfm_obj_modules_force`"
3 U+ n1 k( z0 w, D/ i$ @$ g[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules_force`"
( E7 ?5 Y) Q" S- Y[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules_force`"
! E+ v% a0 j0 e0 a) h4 U" P, b
7 |3 Q, Z+ l! t. n- ?) L4 ^8 nif [ $# -gt 0 -o "$FMlist1" != "" -o "$fmlist1" != "" ]; then1 q/ ], S9 g1 B8 M+ @5 [8 ^
    # note that the buildmod script will set the CMDLINE variable! Y! h4 Z; ~% J5 `4 g; D0 K! v! C
    . $EPIC_BIN/scripts/buildmod8 V% ]+ Z9 ~6 @" q

3 B, P0 x6 u+ q* i    #echo "This is the value of cmdline=$CMDLINE"
# S$ i( A( _& W; |0 ]) |    #exit 0
; o% s* s1 ^8 W
" \0 E$ h" d6 v" W  W6 j2 L* J    # if a new timemill/powrmill/pathmill built, run the new one) N4 D& Z2 h; ]. v# {; Z
    [ -x "$rundir/$cmd$EPIC_EXEX" ] && command="$rundir/$cmd$EPIC_EXEX"% W6 t; Q" B$ @! C6 ^* t* B6 @7 O5 {/ z/ J
fi
0 C% R1 \" {1 ~2 Y9 a, I) f9 A8 \$ n; Y$ j+ d. e8 O. u
if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" ]; then6 I% P. p0 }- i- a/ N; r; {
  if [ $have_har_flag -eq 1 ]; then  B7 Z. O  h" h1 u/ d/ ?
    is_special_har_run=1) s, I6 v4 a; Y; y* ?
    if [ "$o_option" = "" ]; then
$ i  q, e  \% Y      case $cmd in3 N" e5 h; b0 V: S
        timemill): w" y9 y5 i- v2 T
          har_ofile_prefix=timemill
: H  @, }$ K' j3 {          ;;
$ f0 G3 G: @& F5 Q6 g        powrmill)
  v3 m3 F% T; x% ~8 v  w$ o          har_ofile_prefix=powrmill# J1 b, W9 x! T9 v0 h. S
          ;;
) _3 I* I  }! T  D        nanosim)
2 S; [$ O& Z' s; G9 C+ @          har_ofile_prefix=nanosim# B7 G4 [( ~# ]8 C7 t
          ;;5 A9 {/ s9 X' O2 F, v
      esac2 ~/ D# A& e+ z. Y
    else/ X6 p3 F2 I9 r" y3 Q  P
      har_ofile_prefix=$o_option
* j+ V5 g# I# [2 z' Q    fi
1 ~  h* |; ~% F# l; D# K fi2 F/ P* a; v. R6 ^7 ?, d- Y
fi
+ \% q- O+ p+ j; T; L( o
( u3 S( `8 b9 t3 d6 |1 j# Call Double precision version of the product if -D$ l. u7 e# P5 @8 R- ^9 [" e4 R7 w
# or simulation time > 1,000,000 ns.
5 l6 I9 y4 x7 \# Jif [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" -o "$cmd" = "railmill" -o "$cmd" = "pwarc" ]; then7 j% K9 u; X8 ]

+ J# E0 j1 J. R1 c) U  # Now the binary always has the ACE feature9 ?' a& F0 e( p7 l
  USE_ACE=YES( [  I$ f- `" m- Y4 y* u

" x' K5 u8 A! O; ~& m) W( f8 D: U  HAVE_DP=NO; }8 H$ V( v9 i: m9 W+ ^
  EXTRA_CAPACITY=NO
( J( C: q- L6 g# @  DB_REAL=${FORCE_DB_REAL:-"0"}8 z# U4 v; |( l: v+ o

1 t3 \! i: t, w' |  # Enhance for ACE ease of use1 B0 Z6 I. k5 H
  # If no command line option or only a -T option, do:
/ l  G6 p; K/ G2 w" k: W4 @$ L  #   1. set -A option
, k4 e% z9 c8 U! f: I' C* h# u  #   2. assume input file to be hspice
2 v; i( G- [' s9 |' `$ i2 N) V  #   3. set -o to input file prefix
1 b/ F' T, o  s5 N) v: g7 }1 J  #   4. set -z to input file prefix; \* `* v" x) V0 t. Q
  #   5. set -c to default config file0 X7 i; O. p8 x2 k' |
  netlist=""2 v+ ?# w; m+ W$ \# S1 \
  minusT=NO
0 p  ~6 t0 |8 H  h" I4 O  useStdCmdOpt=0: P/ R2 V  \$ g2 G2 w) D
  prefix=""8 v& g5 @0 X7 \- c/ N
  circuitType=""
! J, D+ L; Q1 @+ x; ~; o  for opt in $CMDLINE
# X/ Q: R5 f" O" l  do
8 I6 @: W# T% J    case "$opt" in
) n1 H2 h- U$ b1 C. u% G5 ~      -T)2 \( _( @6 q; n% ^
        minusT=YES, w/ B( I! ^8 z% U/ A5 ~
        ;;
$ |7 H( v# F& R4 `- l      -*)  d" ]1 B' V' v+ c& n7 B& x+ C
        # using standard powrmill command line, b" q6 i3 C* u& |
        useStdCmdOpt=1! e$ b2 ]( b, {+ N" N& M
        break, u4 @& I, U9 e$ z$ V$ M: Q
        ;;. {6 i$ }; N% o* X
      *)
$ z$ z0 z. c/ h; n5 C, i$ }       if [ "$minusT" = "YES" ]; then+ S- d* _* g4 D, ^
         circuitType=$opt
' G0 j7 v/ i& \! r; f1 A1 X0 m: a         minusT=NO  # reset flag/ {# M3 i: k- `  z3 ]6 [" V
       else . V% S* i& V) A6 }" |
         if [ "$netlist" = "" ]; then) K' h! H0 v, ^* _% n1 y
           prefix=`basename $opt`( a, ?. p  C. w2 ^0 T1 m- q
           prefix=`expr $prefix : '\([^.]*\)\..*' \| $prefix`+ l% S; m" k" `! `, N4 n
         fi- f* }" H  O: H# M; d0 P" j5 K
         netlist="$netlist $opt"
  a2 b$ H+ ^9 R6 h       fi
) s' m; ~/ L/ G7 b2 E" r       ;;
+ [8 D: R9 L  ?    esac/ I; ^) C5 v: V& K* i! B
  done
- L& P- l& l9 D7 t; A5 z$ a  a# A
5 [; U. q: Q  P3 J, [1 o
/ A4 i) H/ V6 j5 r' B5 U* a  if [ $useStdCmdOpt -eq 1 ]; then
  ^- A9 w; K1 l3 a) P6 Q0 L* Q! m/ Z    # use standard powrmill/timemill command option
6 ?7 |1 Q8 @" C4 r- G1 M    for opt in $CMDLINE2 A6 @# E7 z* }* W" C" N
    do
9 ?& p" n6 F, w      case "$opt" in 8 i* m+ x' g- X; M  T
        -A)5 s$ k/ `: R* n, f' i- o
            DB_REAL=19 {  L% e( j# f9 b, @" }' e
            ;;
8 ~& a3 q( ~. h" g0 ~6 F8 F8 C" A      esac
  u8 }, p7 O8 n' i% |6 j    done
6 c9 L0 `: J; X" F4 `& K. A  \    if [ "$netlist" != "" ]; then
; j$ G; W# X/ J" M      CMDLINE="-nspice $CMDLINE"  x5 l5 t0 t$ K
    fi
  h/ n4 y0 N4 `1 l' M. v  else) h& ~' \9 p: ]* O; ~
    if [ "$netlist" != "" ]; then
- Y2 }+ k' A9 @/ a      EPIC_DEFAULT_CFG_DIR=${EPIC_DEFAULT_CFG_DIR:-"$EPIC_AUXX/etc/$cmd"}
; a/ g% S6 c' ]      # construct new command option
6 A) W  Z5 a: A' x. }/ m      if [ -f $cmd.ini  -a  "$circuitType" = "" ]; then
* s/ [1 z7 W$ ~9 r4 o/ u        CMDLINE="-nspice $cmd.ini $netlist": U( j) W& V, T! b; C
      else
) V* \2 Y+ _% X0 R6 O3 z  B        if [ "$circuitType" = "" ]; then% q9 c4 I( f! |" f0 |5 s; l
          circuitType="msana"
. D% w' J5 P) T; X4 _+ |* |        fi1 J+ D) G* v" p) ^1 d
        CMDLINE="-nspice $netlist -c $EPIC_DEFAULT_CFG_DIR/$circuitType.cfg"
. h/ c% L( E7 y) e! Z& X% `* F      fi
$ p: K% x7 ?* K, C6 Q! k( A      CMDLINE="$CMDLINE -A -o $prefix"
9 ~& d5 [3 _9 C& P      DB_REAL=1) J3 s( S/ o  T- G6 [  ]
      echo $cmd $CMDLINE
% ?$ Y3 G- D, M' b# i$ \3 s! q    fi5 Y4 J+ D- s/ P8 Y' g3 {
  fi7 U5 h4 T) x* k1 }3 o: t
fi # cmd is timemill or powrmill or nanosim or railmill or pwarc
8 e( _* ^% J2 b( ?) Z2 i/ p. z2 b$ U
! w5 t# W( j6 T4 U[ "$HAVE_DP" = "YES" ] && [ -x "${command}_a" ] && command=$command"_a"
+ r, w- R& ]. F  I- [[ "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a" ] && command=$command"_a"
+ H9 W( \  \7 Y6 q+ @[ "$USE_ACE" = "YES" -a "$vlog_design" != "" -a -x "${command}_v" ] && command=$command"_v"1 h* d3 _7 m7 d8 U& X- X
. j! `0 U. w& P! J0 r0 Y6 ^
if [ "$__engine_wrapper_called__" != "Indeed" ]; then; u' _" H5 x( r+ G1 R) T. \2 t$ O( }% r
    __engine_wrapper_called__=Indeed) H" a: d  M7 b
    if [ "$cmd" != "amps" ]; then
8 ]- j% w9 o& N5 P* m1 `* b& o3 i        export __engine_wrapper_called__
3 S/ L# t& M/ R7 }; c    fi  s) P% H3 W- s# B1 J( y+ m) V* R5 ?

+ I5 ?" [+ Z3 f5 }    trap "cleanup" 03 u/ _  m+ w% C
    trap "" 2
# i# q$ j1 o7 P' d* A: ~+ @' f
) y" y% B! E% _    [ -d "$rundir" ] && rm -fr $rundir
+ D5 V* i# {8 `6 x8 B$ w    [ -d "$rundir" ] || mkdir $rundir/ e' F( |; A+ U2 G% B" W/ M

+ G1 K0 \, A! u4 ?    case "$EPIC_ARCH" in
$ p# [% ^8 q; [1 \7 D) k    *SUN*64)   ! R+ {4 u* p' {8 e* s
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"( [. g/ @! A9 P1 s5 b' ]! n
        export LD_LIBRARY_PATH
% |' i7 a- k$ W' D        suffix=.so
5 _! X. r% P9 n8 V3 n        ld_err_code=127+ o1 L' o7 r& x) Y* X
        ;;  _1 E6 E1 A; ~" Q) b" a- J
    *SUN*4)   
6 [" }* o0 |, ]3 N" E7 O        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
8 _) a7 E! y7 \8 k  d        export LD_LIBRARY_PATH
. W6 `% B' I' ~* R        suffix=.so.1.0! S3 C6 A* o3 e
        ld_err_code=127) I# t2 L! X) L4 }' _
        ;;) g7 P  v% Y2 p7 P4 ^, u6 y" e
    *SUN*5)   
1 A' B* Y$ |/ F! w        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"# s( p8 T% L& Q0 H- P2 `  w; ~
        export LD_LIBRARY_PATH* I( V% s' N- F. t, q* T7 J
        suffix=.so! |* j/ N" X0 @  Z8 Q! F8 f
        ld_err_code=127
7 j  u3 R  f8 s7 p! x  s        ;;
& ^  W6 [% U) T, o    x86sol*)   
' p$ b; Y( A8 j, i3 A. @; L        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"3 F' B; K" Q9 a: n0 w) x7 u
        export LD_LIBRARY_PATH
" H7 t& z# l9 G" u" V! M        suffix=.so
/ P) k3 ]  I0 y$ ?- W$ w1 O        ld_err_code=127+ I' z$ t8 W+ y
        ;;7 r  v! M  ?5 O% f$ ?1 F
    *AIX* | aix64)   
8 H/ o4 ~+ \8 a. l/ W        # When genepiclib creates shared objects, it creates a import file and
$ z5 k- \0 n! }5 v2 m        # uses timemill as program. So at exec time,program timemill is needed ( R# Y5 G/ o0 ~6 }- d- B6 }/ x+ V' i
        # in LIBPATH
7 ?& [5 q$ Z% q0 {# ?        $ln_default $command $rundir/foomill; `6 [2 }$ ^5 r) n9 l  K
        LIBPATH="$libpathLIBPATH:/lib:/usr/lib"
: q: M" u: q7 f. A% X7 R$ u        export LIBPATH
4 v+ `! Y' D6 R* Q5 a        suffix=.o
0 d9 |9 f) i, O& I. E5 E" A        ld_err_code=8# k  E1 S/ Y6 L6 V6 x0 h- i
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
- _' X, L( l  ]0 Y8 F9 h          tdir=`echo "/tmp/d"$$`- x7 ~" C) [3 n$ L  \
          [ -d "$tdir" ] || mkdir $tdir, v3 @2 [  x7 l( y
          if [ -f $EPIC_DIR/libCustom.o ]; then
- A3 @9 M3 W6 \4 w3 ]             cp $EPIC_DIR/libCustom.o $tdir/5 M# P  V5 y8 @; e0 w3 d
             $ln_default $tdir/libCustom.o $rundir/) c# S6 J' z. S/ v$ y0 t! t
          fi4 c  o& k1 r6 F
          if [ -f $EPIC_DIR/libModel.o ]; then
& \: e% k. T3 v( ^2 B. }2 B  p1 \             cp $EPIC_DIR/libModel.o $tdir/6 v- X6 K; G+ I: l
             $ln_default $tdir/libModel.o $rundir/
7 y1 r% K. F# X/ @  [: g+ B9 l& h          fi
& E0 g& B, K& [          if [ -f $EPIC_DIR/libFuncModel.o ]; then1 o) y  V/ f" b- y; T% m2 R1 b$ K# Z
             cp $EPIC_DIR/libFuncModel.o $tdir/! c. S0 B. s* p
             $ln_default $tdir/libFuncModel.o $rundir/& U, p  k5 z& E3 c! C8 ^
          fi
! a, O+ H" D% w; i# F- _! F          if [ -f $EPIC_DIR/libFuncModel.34.o ]; then, k! j9 O1 C6 s7 d
             cp $EPIC_DIR/libFuncModel.34.o $tdir/' p1 D: ?5 P/ W6 e
             $ln_default $tdir/libFuncModel.34.o $rundir/  }( v3 g7 X  t6 B9 m/ O
          fi% |! P- ]6 z7 s: x7 X. ]8 K' [" f
        fi
  ^. d+ |, u% I4 V, G        #Set the IBM flag to enable more shared segids
. m- z; W# V: J8 ~8 t        EXTSHM="ON": V7 A2 D- W5 j2 @0 h( e. Y
        export EXTSHM, Q3 ^9 `1 `5 v% y8 O4 B
        ;;* U: ^6 t! V) C% ]
    *LINUX*)    , T- p4 u1 f: H8 C+ J
        suffix=.so
# U- W/ p8 a4 t4 M4 w0 |" g6 g        ld_err_code=1
! C- T( z. C4 {( _        ;;* l1 _9 G* ~* |
    *amd64*)
$ Z- F4 `9 U' C  D: m        suffix=.so
  V" U5 v, _+ q& f        ld_err_code=18 w: a( T& l8 |/ v. y
        ;;
& E4 x0 i3 }1 `$ a    *suse64*)
! F! ^! n! g2 r        suffix=.so
! V% ^" Z+ F" Q        ld_err_code=1
, @9 M- H: k* s7 c" \        ;;
' O% w3 B7 n% `/ x+ F    *suse32*)    9 r3 C: z  C' q8 @* {, h: ^. z4 t7 C0 `
        suffix=.so
8 m- ~, |) p& h        ld_err_code=19 p: L  z" n% L. ?0 c1 o; P
        ;;
2 c' P$ l5 X: W- U# i, @; C    esac
8 A5 H4 j8 w) n- I6 |9 c* Y5 l4 t8 @* Z! U6 A
    [ "$has_custom" = "YES" ] && ulib="$ulib $cwd/libCustom$suffix"
: W1 g  C" w+ _9 p% n1 r2 w# a    [ "$cmdname" != "timemill" ] && [ "$cmdname" != "powrmill" ] \
3 L, |* @7 C& c; r        && [ "$cmdname" != "nanosim" ] \
  D) l6 I  _9 g: p3 v        && [ "$has_model" = "YES" ]  && ulib="$ulib $cwd/libModel$suffix"/ ^0 b$ X  Y, w* c& O) }
    [ "$_VA_" = "YES" ] && ulib="$ulib $cwd/libva$suffix"
! \. e, g& L7 H% [
% w0 @* ?7 ]% \. g#Look for command line option for libFuncModel.so* q, O* P7 y5 N
#    user_library_next=0
) ^' [! q& S5 g* p! [    has_fmlib=""; G1 A6 ]8 s/ s' c: K0 v, e. O
    for opt in $CMDLINE* L1 y1 |) Y/ w$ I/ W
    do
; E4 d4 |, b: C& k! ^1 Q# L      case "$opt" in
# w$ {' C. a# M7 Q* R8 D7 P        -fm)
) H. S. ^2 J4 P. c9 i            CMDLINE="$CMDLINE $cwd/libModel$suffix"
& o8 Q; ]& ?1 Q* l            ;;
! w/ Z  J% s% j- ]$ v, w. F& f        -fm_user_lib)' V+ [& ~" A5 q0 r) g
            has_fmlib="YES"
8 x3 P2 f1 v4 H. K% |$ E) y#            user_library_next=1
4 [! t, n# \, L; c7 c3 H+ @$ {            ;;
5 P& x2 A; Q( ^1 j. k, o! W( u        -xc)
4 B0 O1 g3 ~  `$ f  X+ A            if [ "$EXTRA_CAPACITY" = "NO" ]; then
8 Z3 T+ T, I+ S3 L            EXTRA_CAPACITY=YES
8 s4 o/ y6 @/ y# x8 Z, @            fi! z$ o9 l7 G& t8 P
            ;;" V+ o$ ^4 K8 ]3 n
#        *)
* y; m3 A, g8 S3 e#            if [ $user_library_next -eq 1 ]; then
; l$ o0 @7 y" p$ E#                if [ -f "$opt" ]; then' B$ C# e' G) e% Z
#                    libfmodel=$opt
- f3 [$ O; w$ F: ~1 C( }7 Y/ H#                else
9 S9 C( f- Q) D: E8 X: r5 b4 O#                    echo "-fm_user_lib: Specified file not found"
. ~/ q4 h  B' s3 ~; z+ y* w#                    echo "-fm_user_lib: Specified file not found" >> .epicscriptmessages+ S8 J7 n/ r  G  c
#                fi; u4 J* l% F5 ?) E5 W
#                user_library_next=06 E* M" f/ D# t! O" p& i* k
#            fi
* O, f0 B2 z! e' i9 Y3 E. Z#            ;;
* o6 @% t2 z) x- S2 T! F, w& y# K        esac8 ?2 \) {6 X0 A& D$ j
    done
7 T7 q( U* K0 M, I. ~5 Z. k8 |. w8 ?0 s/ c9 U6 t4 ~0 ^
    if [ $cmdname = "timemill" -o $cmdname = "powrmill" -o $cmdname = "nanosim" ]; then* D6 U+ P' u; \6 f
        flib=""6 C4 t2 R! \' ]3 q  a
        if [ "$has_fmlib" = "" ]; then
$ [% F5 s" Z* P! T9 `9 S0 F            flib="$flib `get_epicrc ./.epicrc user_libraries`"
! k& U. M. m' Q6 d0 M4 j4 a: \            flib="$flib `get_epicrc $HOME/.epicrc user_libraries`"" ?( ~+ D3 j3 m* d4 n  n( r+ f
            flib="$flib `get_epicrc $EPIC_DIR/.epicrc user_libraries`"
4 n( B, Q! |5 {* \. n$ m        fi
9 _6 p) J2 @1 X+ X    fi) G! b/ D! m+ f9 s8 S  j
. ]% H9 o$ r% W3 }4 f: @+ I
   for i in $ulib6 b" _- \: W) W& a
   do/ r- T1 A$ {9 ~. b, S) u( U
       [ ! -f "$i" ] && continue4 e& |; i$ O0 s
       dir=`dirname $i`; cd $dir; dir=`pwd`; cd $cwd; @- J5 x. I- a, w! \3 Z- `
       i="$dir/`basename $i`"
# E; Y0 |. I! G3 m9 y5 f0 i       case "$i" in" h+ }$ [& g: O' Q: a
       *libCustom$suffix*)    [ "$libcustom" = "" ] && libcustom=$i;;. e9 w( M  f' J) q* B
       *libFuncModel$suffix*) [ "$libfmodel" = "" ] && libfmodel=$i;;
9 n5 X, B# E" A4 D* C; P: B* w       *libModel$suffix*)     [ "$libmodel"  = "" ] && libmodel=$i;;$ [  }' |7 \3 [' S$ E0 a
       *libva$suffix)         [ "$libva"     = "" ] && libva=$i;;, ~5 o/ j. F* E% V8 J
       esac# v7 a& k  t( t# ?
       [ "$libcustom" != "" -a "$libfmodel" != "" -a "$libmodel" != "" ] \
/ n: l0 A" t/ V* @& M        && break( k% B# D2 `. G' l+ e
   done9 O5 k4 p. `4 I# P" L: h& |  j

9 K1 \" G  V5 g* v: G3 R6 h   # symbolic link shared libraries to .epicrun$$- C- S* P- @" g7 F& H( o
    cd $EPIC_DIR; epicdir=`pwd`; cd $cwd
  i3 c. z$ X8 ~. _1 v9 F    if [ $cmdname != "timemill" -a $cmdname != "powrmill" -a $cmdname != "nanosim" ]; then& z( }* w& Z, e+ b! B
        if [ "$libfmodel" != "" ]; then
/ N( t3 A6 }- ~3 o! _: M             [ "$libfmodel" != "$epicdir/libFuncModel$suffix" ] && \& l- Y- N! |/ z2 b! c9 X
             echo "Using $libfmodel ..."  && \
' d# H+ p  n3 U$ Y  a+ W  G             echo "Using $libfmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE
$ F/ W- @, F2 Q# C& B             if [ -f $rundir/libFuncModel$suffix ]; then
1 ^) j# a) H& O8 T& P               rm $rundir/libFuncModel$suffix' p, y+ d& b3 x" ~$ o2 [; p
             fi0 a' D! A, x# N" _0 G$ Z" {( A" [
             $ln_default $libfmodel $rundir % {* o9 k' x5 u7 R+ O2 \( ~
        fi
' }9 y, P( Z! q        if [ "$libmodel" != "" ]; then2 m* e% Z# J0 u- U8 X' h! G
             [ "$libmodel" != "$epicdir/libModel$suffix" ] && \& B! f4 M' C& G6 j6 k
             echo "Using $libmodel ..." && \
% f: C2 }$ l2 }- k. A& o2 P; K: c             echo "Using $libmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE
2 q: f# t- x4 A7 G* @- ?  L9 U             if [ -f $rundir/libModel$suffix ]; then* W' n- ~3 r* B3 K9 s! u9 a1 R
               rm $rundir/libModel$suffix
  K3 j' b; N0 w& b6 H, w             fi
; o. H3 w' q- g( `# N+ L             $ln_default $libmodel $rundir
- v+ B; \1 O1 N1 N2 |( t        fi) v% G7 F; L% Q% r9 q3 B
   fi% M! J8 Z2 O: V: z* ], _4 ^
   if [ "$libcustom" != "" ]; then
4 f# G3 Y) `' K1 w, J        [ "$libcustom" != "$epicdir/libCustom$suffix" ] && \
& o8 a8 f, d$ _        echo "Using $libcustom ..."
" l6 ^$ \* e4 i) x$ q9 |3 S0 G% G        if [ -f $rundir/libCustom$suffix ]; then: ~! g" `2 K" Z  ^: y
          rm $rundir/libCustom$suffix# V, {3 k  Y" C* G/ a. G
        fi
0 R: o) u( O- ~; Z0 A9 ~' n! a3 L        $ln_default $libcustom $rundir 2 |) J, J" g) h6 v+ P
   fi' d' `3 Y2 j9 q, l: [+ i
! o' k0 C0 l/ f
   if [ "$flib" != "" -a "$flib" != "   " ]; then# g  k) I* A5 N+ Z4 ]
        CMDLINE="$CMDLINE -fm_user_lib $flib"
; B, m7 i5 n* ?( a- \   fi
4 f. \* i$ P" ~. T+ a  P8 p* x- a. B6 j4 f
   if [ "$libva" != "" ]; then- u; |+ ]' i# X" G1 F+ A& ^% Y" {
        if [ -f $rundir/libva$suffix ]; then. E- ?$ p  e% T8 O1 P
          rm $rundir/libva$suffix
, s% S7 O( x% P9 J0 _* }. R4 c6 W        fi+ X8 }! R! i" `  r
        $ln_default $libva $rundir " _/ y* v/ a# S. g$ P3 _
   fi
  ?! N4 @# y3 C' q+ R0 V4 O, |& M: j
. }& H6 A$ |0 t
7 v) E% u: X5 K2 u$ L8 T    # VCORE design library
  J* W5 Q; R$ @7 T    if [ "$vlog_design" != "" ]; then
: m: D) x8 h: `+ E/ `        $ln_default $cwd/$vlog_design $rundir/`basename $vlog_design`0 c. Y& z( w* R/ i4 u; T
    fi
2 r7 A1 `/ s, t  A1 V
8 I- J- a2 l' P4 K& ^    if [ "$EPIC_EXTRA_CAPACITY" = "1" ]; then
6 z. N* j$ {4 j4 f9 Q6 e* Y        EXTRA_CAPACITY=YES# d8 U0 M. _1 ~8 {$ e
    fi
8 T9 o: X1 r' G; x4 F5 {
; F8 G! d; D) b+ y* G; L2 q0 U    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "0" -a -x "${command}_xc" ] && command=$command"_xc"* Z: a3 ]$ G- Y* a0 s
    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a_xc" ] && command=$command"_a_xc"- f5 L: z" x' x7 v  |$ t
    #Create temp file if dual process is on) ^. k. q$ d; W9 h& o6 J8 @! N4 y
    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" ]; then
6 Y8 M. I, y4 O0 T% e        if [ "$EXTRA_CAPACITY" = "YES" ]; then, W' H: s# E0 a1 L3 d$ z7 g7 ^
            touch $rundir/rpcidfile' T( t( o. i  `/ b
        fi
- V/ `9 [( S% s" X% l. X    fi4 O, }3 Q& H+ }* ~2 R6 V4 _2 g
fi! o; e1 @7 W8 @8 q5 X8 J" k

% J( M" k. I$ w, r  Q/ q- W" Drun_cmd()
9 S. G& H1 b7 H' X; r+ o/ f3 k{
. k* ^0 G8 y! `& r; G3 q  command=$1
: ^6 A" F7 x2 `3 B! ?  shift
( A* s( T& v  p% D. O1 }& B/ h9 J1 L4 G! _4 N, j% i1 e% Y. X# p) B3 F0 g
  if [ x"$VA_FILE" != x"" ] ; then- l; E9 Z* b1 B: x- Q& Y
     cmdline=$ARGV/ T# w  x% G1 ?6 }; M, v
  else2 ^# O. u  k4 P5 y4 L1 w2 w
     cmdline=$@
( `: k! e/ @9 y) @- u# {' U  fi
: l6 y/ y; s! t+ a% L; u' R
, `8 [$ C- g: O$ C* _( h3 b1 t  debug=${DEBUGGER:+"$DEBUGGER $command"};
8 k4 i: f1 A) q" h
# b9 G, X! B' J: K& t  # To disable Exec-shield-randomize in RHEL3 U3+ when running nanosim and nanosim_a
1 @; j5 ]0 s4 s& g, b; h9 i) n1 |  # so save-restore may work.
' N- U' V; ~- P$ ~  setarchStr=8 I0 A2 W# ]) c! F
  cmd2run=`basename $command`
4 I( V6 O; }* s) d4 t5 B, l  if [ ${cmd2run} = 'nanosim' -o ${cmd2run} = 'nanosim_a' -o ${cmd2run} = 'powrmill' -o ${cmd2run} = 'timemill' ]; then
$ W# j2 J5 `: `, Y' {' `    if [ "$EPIC_ARCH" = "IBMPC_LINUX_LINUX" ]; then9 `( G! I2 [( M) J* @: r% j
      setarchStr="setarch i386 -R "2 d, V: [" ^0 N. E+ q1 l8 t
    fi
7 h# Y' M1 F' A    if [ "$EPIC_ARCH" = "linux" ]; then
0 w* |9 r9 S; [0 x      setarchStr="setarch i386 -R "  i9 Y  E  t5 L7 I4 [
    fi" Z  Y# G6 v) N. F& X+ R
    if [ "$EPIC_ARCH" = "amd64" ]; then
4 b& z% U& [$ K      setarchStr="setarch i686 -R "
! ?% c- h, W! ~( f    fi
% C% n- M6 k7 m    if [ "$EPIC_ARCH" = "suse32" ]; then
1 A# ?) r. H4 i' y8 {0 P) I      setarchStr="setarch_suse i386 -R "$ J5 o& A+ {% K5 n, W% D: i( |
    fi1 j9 Q* x+ y+ B, {0 |
    if [ "$EPIC_ARCH" = "suse64" ]; then8 C! A9 N8 j/ e% W' ^9 e
      setarchStr="setarch_suse i686 -R "+ X* d% u6 `. {% x9 n' b
    fi
1 ]* k( M. K* S( O$ h  fi
; i; }' t$ B8 A# [0 X& ^3 m1 o* q/ n8 {7 v) g; O
  ret_stat=03 o" R5 F6 {8 x2 m) ^% b
  if [ -x "$command" ]; then
8 D0 V/ o# U0 V- J1 o' I* X) f      if [ "$debug" ]; then
4 q( x, ^5 C; a6 t$ n5 R        _debug_args_=$cmdline, Z6 U8 G1 `3 h3 E1 u6 u( M
        . .epic-debug. \3 B, V5 g: F. [& ]& `5 g
      else& j' Y0 {1 Y' o# i/ M8 b. q
        DEBUGGER=; export DEBUGGER
5 u/ U- d* m8 j1 D/ R+ I, A        $setarchStr $command $cmdline% E0 A( [2 r! w' X
      fi; ~. o" T- ?, L
      ret_stat=$?
! G. x2 V2 m7 A% g3 K" i' i  j& M- B  else
# _; ~6 k2 C5 `: O/ j8 z* k    echo "Corrupt installation, executable \"$1\" not found!"3 w; e5 Y8 k1 g4 \2 X* C0 o
    ret_stat=16 o0 e6 Z6 q" z. @& y
  fi
2 O; Y( Q# P# o; h}
# G3 u* @" u2 C# ^- ]: y
4 ?3 Y$ ~' e+ b! F/ V5 @" ~# keep runing cmd if ctrl file exist( j2 B+ I1 h  f9 O: ]6 z
  n  i5 R5 @$ l! K
run_loop()/ v, t( }  v: u* Q( Z
{
, ?: k7 d$ t3 L/ B5 s  command=$1
+ J5 O- Q) w; a  shift1 t# Z$ o, ]8 v; N4 a+ p  j2 W

2 ]: n7 u# s. t: ~  if [ x"$VA_FILE" != x"" ] ; then6 \6 E& j* Q( U% `4 c$ j( P
     cmdline=$ARGV
. L& {/ m6 f& F* ^! [4 i  else/ \- H7 e& U) x* i0 d
     cmdline=$@
  k$ l$ l; v2 \* j7 [  fi
& X, \& @) u! ?) E
& M; t- B* Z1 }4 p* v! B$ n) u  while [ $ret_stat -eq 0 -a -r $LOOP_CTRL_FILE$$ ]; do, M7 k! x3 v) r) d2 R
    . $LOOP_CTRL_FILE$$
7 {: z  @4 b6 P' r5 H" s    run_cmd $command $cmdline -banner 2: ~3 ?0 E, T2 `( M+ P: Q: X
  done;
! I8 [1 O2 k. q# O# K
' m3 Z3 f: z; k, Q( ?  if [ $ret_stat -ne 0 -a -r $LOOP_CTRL_FILE$$ ]; then
6 ?; @/ V0 s1 ~$ j- _    rm -f $LOOP_CTRL_FILE$$
+ E& j+ w6 }% G" K  fi
2 X- B3 b, k3 b6 R0 t}
0 j6 j* ^/ @6 H! R' v7 B  {5 q/ Y' y, {3 f
har_check_ret_stat()
. z8 K5 K/ R( |# T7 v{
4 N$ I3 b0 H+ L/ Q$ q4 K  if [ $ret_stat -ne 0 ]; then
# p# a* Q# u2 L' v- h8 e    echo "Simulator returned with non-zero exit status. Stopping."7 W% p2 X5 {$ d1 U" ?0 ^
    exit 1
. J* P" o: v& V( m6 b7 K  fi6 K! Y7 A0 Q. P% n) D# U
}5 S8 G: w+ x. X
$ x! @9 ]: v4 P  n/ q
#$ ^* n7 E  l+ ^/ Z! Q
# set stacksize and datasize limit' f0 m. M  e( T, Q6 m2 U8 ]5 T' q! h
#
/ v9 T' ]' f8 L5 f, b0 x7 z
3 [2 {$ E7 l+ j. o3 V  Q# P+ Rset_data_limit
% \3 j7 t- z# ?- s: }) }set_stack_limit' _! X9 f) Q+ w& |# T  U& u

& ]8 F/ ]& d+ I& m0 g) J#rm -f $LOOP_CTRL_FILE+ q7 @/ n/ F: c! G6 v! E  S; L
9 f4 W. v* W. @  r
run_main()2 _8 V* W  m5 h5 v6 Z& ]
{
, E! ?  l$ h) `9 yif [ $is_special_har_run -eq 1 ]; then
, J3 g" Q' \& C: K. x" |  if [ "$har_ofile_prefix" = "" ]; then
. S8 O" e4 D* l# A! d    echo "Wrapper bug. Notify Synopsys technical support."& d4 f2 r  V; G) e$ B9 S
    exit 1
1 c& F8 x/ J3 L$ n% e! ?" n" f  fi6 c5 x6 x& |2 M3 ]
  if [ "$har_hilo_file" = "" ]; then6 g+ |) f8 d/ p4 g( V# r  ^
    # no user specified hi lo file - do both runs# k) q: C0 \) x# t
    run_cmd $command $CMDLINE -har_one -har_setup
3 T( z7 E) w: x/ X/ r    if [ $ret_stat -ne 126 ]; then
& \) b8 t4 N. J  ~; k      har_check_ret_stat/ v' f+ y( {( Y6 \( q
      if [ -r $LOOP_CTRL_FILE$$ ]; then
1 A/ b* m, l) H, q7 s        run_loop $command $CMDLINE -har_one -har_sim ${har_ofile_prefix}.hl
3 B( ]: z! N' N, K. {- t        rm -f ${har_ofile_prefix}.hl
1 V3 l1 D3 I" z; }: i' N      else8 ^* E  B+ F0 g5 e* ?  u0 p; f
        run_cmd $command $CMDLINE -har_one -har_rmhilo -har_sim ${har_ofile_prefix}.hl
9 R) U& P1 {% E      fi: J% K5 L9 |  _4 A3 m7 ~( Q0 @$ E! K3 y
    else
6 \. H+ q% y; J# Z3 X      ret_stat=0
3 T: K  Y0 F: w& b+ u3 C" F    fi7 U) q6 ?# a/ r9 B( t5 C
  else" V* b" S) A+ }
    # user gave a hi lo file name
4 x6 J; ?1 R4 C- E# V. z    if [ -f $har_hilo_file -a -s $har_hilo_file ]; then: a+ q% x  r$ Q% V% N
      # file exists - use it - only do sim run
5 @" n5 j" K1 G: N$ x; W      run_cmd $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}1 s) N- I7 j8 u0 p4 ]
      run_loop $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}9 C' I, z' a+ K# `/ ~0 }( G
    else
5 @, C" m1 B* [  \# N. I8 Y1 A1 I      # no such file - generate it - do both runs
3 F4 D1 L+ `8 X      run_cmd $command $CMDLINE -har_one -har_fnf -har_setup
& w3 ^% w, s5 L/ f      if [ $ret_stat -ne 126 ]; then. P3 t2 D- ?# G* M! M, J  n
        har_check_ret_stat
2 N( |2 v/ D# d6 w( h8 u        if [ ! -f ${har_ofile_prefix}.hl ]; then5 r# q; k% S, A# ~8 M3 S" G
          echo "No hi lo file generated after setup phase. "7 n4 p: _- a! d! N+ x* M- D# |
          echo "Contact Synopsys technical support."
9 J" c9 s! F5 p0 E# ~$ K          exit 1) \/ Y0 o1 w3 K0 R4 ~
        else- W2 T# Q) J6 x* ?3 C* E" a, P$ {
          if [ ${har_ofile_prefix}.hl != $har_hilo_file ]; then* L* y* O* G0 N" I
            mv ${har_ofile_prefix}.hl $har_hilo_file1 _; L. ]& o+ J4 f7 I1 _8 X
          fi* W0 p6 n5 K, r# K
        fi
0 Z3 E1 B& U1 t$ x6 v        if [ -r $LOOP_CTRL_FILE$$ ]; then, l7 E: n8 a- i4 O/ ~9 N
          run_loop $command $CMDLINE -har_one -har_sim $har_hilo_file
% v4 t: {# _  P! l0 Z        else# J( Z9 n9 K8 a4 d5 y4 ^: B
          run_cmd $command $CMDLINE -har_one -har_sim $har_hilo_file. r' z9 C0 w4 |; M" E# v& a
        fi
( d. I! z3 n) H3 p* {      else
' U; F/ K6 q. ^0 S/ }+ N/ e        ret_stat=0
) V8 |8 l' r& k3 R, _0 P) j      fi  p! F" o* a  j# C* |' z" ~
    fi
! W: |3 _3 _% k& K$ |3 A) @  fi/ t: }; f$ a- V! M
else  ' _, s+ n# L0 D* m2 E$ K% |4 y3 v
# don't loop if -har_setup
- }! d( r) J4 J* v  if [ $have_har_setup_flag -eq 1 ]; then
9 [- `9 l: w4 o8 q+ R    run_cmd $command $CMDLINE
/ l, i9 \- ?5 s5 T' Q% ^    if [ -r $LOOP_CTRL_FILE$$ ]; then
3 c! |2 k6 C! @; R      rm -f $LOOP_CTRL_FILE$$
: B% q1 ^, I/ X' ]& N    fi
9 U# m3 a  `- C" i% k  else4 U0 k9 e( d& H7 x
    run_cmd $command $CMDLINE7 E! J* ?/ Z$ q2 [4 a
    run_loop $command $CMDLINE1 q: z8 f7 ~& z9 m& o3 {9 v* a
  fi- \, H, m0 C* v+ ]7 g) _3 K; i
fi
! K0 W+ h( K" A. B, N9 z, Z" L4 s& j8 r& _
if [ $ret_stat -eq 0 -a $cmdname = "powrmill" -a $postgres = "y" -a ! -z "$workDir" ]; then
2 p$ N, E& i6 h4 j- f3 J* j6 e  pwCreateErrDB -w $workDir -e $errFile7 q2 i6 j6 e5 L6 s' E9 ~
  ret_stat=$?
# r2 `, R% z$ f( y0 f  x) Ufi. T7 G6 s& }( M* h
}
5 w3 C8 j( s. V' N8 d5 x+ m! S0 l0 O1 P2 P/ L! H. {) g
cleanup_alter()
: a8 M* [- S, f: c: Z0 s* N{9 t3 l  J) F  V; Q5 {) L) X
   /bin/rm -f $ALTER_COUNT_FILE 1>&2
/ ^9 f$ X# k. ]# J- T0 d   /bin/rm -f $ALTER_HK_FILE 1>&26 }* H) K, e, J( X  }4 }% ~
}
$ k6 h. @+ R( q# Q+ W2 b9 W" R. |
#generate alter temp files based on pid, Z* r9 u! F; y8 h& {* K& j
ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$
6 \/ h* `* v1 [, p5 [if [ -f $ALTER_COUNT_FILE ]" l0 p1 n7 Z+ K! l4 `
then & A* n" g/ {4 _3 U
  until [ ! -f $ALTER_COUNT_FILE ]
7 G9 B! r; X/ f, A* H  do
  p" W5 K6 l" O7 Y    ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$
' W; S9 u5 V) L. V  done
8 S7 P2 y$ V  K, T  ifi, k8 M: O/ k1 T% O
export ALTER_COUNT_FILE
5 N! w" @# W; V+ p9 ]0 N" o& B- Q8 \: o9 I& U, W
ALTER_HK_FILE="$ALTER_HK_FILE"$$
' c& b/ R$ f% x0 Vif [ -f $ALTER_HK_FILE ]
+ R" N9 C9 X  [& t$ E  k4 ?7 Xthen / u4 T5 h+ c" D# }& g  w/ T  J3 |
  until [ ! -f $ALTER_HK_FILE ], `- L/ X7 j% s
  do* S& O( p9 a8 \. S- H% H  R1 |) H
    ALTER_HK_FILE="$ALTER_HK_FILE"$$
4 d6 m) D) h( s& [* w  done
/ F! Y! Z" z4 K' F& t( yfi! Y- L, i3 b/ S* f
export ALTER_HK_FILE7 f0 v7 ]7 K9 X+ L! h* u
2 U- V# w* M, l" E# R( N
#generate monte carlo related temp files based on pid
9 P  s+ ]4 v/ Fcleanup_monte()
; W8 h+ z2 y* \5 _9 ~0 S1 X1 Q{3 F8 f# n: v+ A5 U; l
   /bin/rm -f $MONTE_IMG_FILE 1>&2
1 L7 F9 y% @' r7 }   /bin/rm -f $MONTE_IMG_FILE.gz 1>&26 [2 ]3 P# ~, G1 N
   /bin/rm -f $MONTE_COUNT_FILE 1>&2
$ {% J# j% w( w8 i  V" g$ P   /bin/rm -f $MONTE_CFG_FILE 1>&28 i. f, C4 i% X5 h+ |- s
}- K1 F% @, `* L& L* \

+ T1 w7 T8 }  G* {. |' SMONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$9 G% w( w1 z( C' k2 X
if [ -f $MONTE_COUNT_FILE ]# _+ N6 S- p1 r
then3 K1 s. }, [0 {. s1 B
  until [ ! -f $MONTE_COUNT_FILE ]6 S# ?* z5 ~, Y( A3 z4 C1 k( ^
  do
7 s! a: {  n2 @    MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$3 B4 Y$ Q& z/ h+ j5 o2 w3 f
  done. ]5 i7 ]3 `- a  @$ A
fi
; v1 K: s* e9 i; ]+ aexport MONTE_COUNT_FILE
. }5 `4 e% E8 K' A3 @$ X: B2 l. x) h  e8 j& \. w% {; Z& `
MONTE_IMG_FILE="$MONTE_IMG_FILE"$$; T5 `& I) g# X1 W
if [ -f $MONTE_IMG_FILE ]- A  F: ]( u# C, ~5 r6 D. e: ]
then/ N7 R8 {% `0 @9 q+ U1 p$ ?
  until [ ! -f $MONTE_IMG_FILE ]
# H4 b3 A' y4 E) N, m, W  g5 k  do% w, N8 n2 F6 ^# d! j' F4 R
    MONTE_IMG_FILE="$MONTE_IMG_FILE"$$4 c0 g  a: R& ^# z
  done
' x2 M2 k8 O  B6 w) Dfi
7 o% b: t: ]$ H, d( U& qexport MONTE_IMG_FILE" T2 i4 ]: m2 {' U6 l( t4 c7 x
) Y" @* J# t2 s0 T/ l% L
MONTE_CFG_FILE="$MONTE_CFG_FILE"$$
) F) Q2 P! {# Bif [ -f $MONTE_CFG_FILE ]: A2 w! t& `( n* b
then
7 k8 R$ l4 p; X! j- o1 x$ j  until [ ! -f $MONTE_CFG_FILE ]+ {4 M6 S5 z' p/ V7 D7 Z& ]
  do
) @/ v# y, j" S& S: S. h/ |" X  W6 }    MONTE_CFG_FILE="$MONTE_CFG_FILE"$$
! k# B0 n2 J9 x. T& U# _  done0 P" [: z6 L1 a5 h2 P2 {: X
fi) O% ?* D( p) K# _/ z9 X2 M

& p! ^! S1 g3 Y( F( w# main iteration, j& x1 p  X9 z5 ~# {5 ]
run_main
. V  I/ B; i2 }$ b6 v/ M4 @/ [. j. {
- _9 p) l, Z" e5 ?: ?: Y) ^: Yif [ $ret_stat -ne 0 ] " Q3 F$ ^, c6 M+ U8 M
then 3 Z% L/ j" h: ]
  cleanup_alter2 S; s4 X" r/ z# M* q" e
  cleanup_monte7 o9 q% H8 O2 H0 [' J' o6 I* T
  Exit $ret_stat
) e1 V9 O. N0 G4 L, Wfi% e' E7 s  w9 p/ ~5 P3 J8 m* H

3 E* f- K/ ^* q$ u5 l8 E#Alter related iterations
5 l0 K: g/ P4 x% v
/ F% o: a; ^) S  `1 v2 }: z. witerations=0
2 a7 k1 J% }2 U9 jcount=0
2 Y0 c" H8 j" Y( Oif test -s "$ALTER_COUNT_FILE"& x# Y, ^6 H# @" ~: }4 \
then2 M9 Q4 d5 g7 D: q- X
  if [ -r $ALTER_COUNT_FILE ]; then
/ h( J* [/ i; x0 N3 L4 j   exec 7< $ALTER_COUNT_FILE" g+ h' e, s' C2 m: H* k$ }
   read iterations <&7- ~; n' _, ^! o, p
fi
9 B; K$ M* `) n* Ifi
$ Y1 `7 p% K  P; @- g2 u7 V5 J' f: q' d
7 e: t0 ], G9 B4 F- ^2 ktrap 'echo Program Interrupt; cleanup_alter; exit 1'  2, m, ?, }. i0 ?4 {$ e+ g# {
while [ $count -lt $iterations ]
' s8 j" o9 m+ e* Pdo2 {8 ^9 a4 `& g% o1 E+ v+ Z
count=`expr $count + 1`, K) M# c! j# Z, M" h+ U! s1 t
ALTER_COUNT=$count
9 @. W" _# z4 ]# c9 W3 M export ALTER_COUNT( m+ w9 o7 `# \$ x

( ^0 K- w2 c3 u9 {& l0 h5 U run_main3 J, ]9 X+ V# X) \( c: Z4 h

+ b* a# q9 E; Y* P0 rdone
7 Z; B% z# h! g4 P0 ?+ P# k* |5 O
#Monte carlo related iterations
+ c  t2 v, T7 M3 h
& g! o. j- }  W  u& q# A( G$ nmonte_runtime_summary()9 L: N) \- _4 X' e  @' ?. s
{7 X4 \* F$ |9 ~+ z) T0 }4 D
  keyword_1=real
# e: I+ X) g9 `  q2 b& q  keyword_2=user
; S( h9 \3 F8 @; E  E! c- G) Y* B  keyword_3=sys5 Q6 N7 `9 ]0 ~3 ]' E
  ofile_prefix=nanosim1 @$ ]$ N/ j5 G

1 s; z) u/ i9 |' W  if [ ! -z "$o_option" ]; then
' _3 C* T, U, E* {    logfile=${o_option}.log/ t5 }( i, v8 W  R0 `: b
  else
* }& k) N9 |0 z+ l# {! x: o* e    logfile=${ofile_prefix}.log
9 {: k& H* ^, M' L. n* P! e  fi
) W5 c! ~7 {# o/ K$ W- o1 B! \7 K- f" f
: n4 A$ p' e& F, m; g0 |6 }- r5 a  if [ -f $logfile ]; then7 c5 e  o0 Q. A3 g: {2 T
    echo "*** Monte Carlo Total Run Time Summary ***" >> $logfile      
' |3 n! s/ d7 V1 i) |    cat $logfile | grep ${keyword_1} | grep ${keyword_2} | grep ${keyword_3} | awk 'BEGIN{ t_real=0; t_user=0; t_sys=0; } NF==6 { t_real=t_real+$1; t_user=t_user+$3; t_sys=t_sys+$5 } END{ print "\t", t_real, $2, t_user, $4, t_sys, $6 }' >> $logfile5 O! y* v9 e! w2 G$ z0 \+ B, x
  fi5 V$ E: v8 q+ P" d3 Y+ O
}
8 T% C' f) l0 w) g- H) Z
" Z( J; I- P; b" V1 [6 Snext_monte=0
! W! i% p8 H# `# qcur_monte=09 v3 O0 O1 c8 p: W
, K1 b- D" P; _) U0 y
if test -s "$MONTE_COUNT_FILE"# B; X5 {, E% b. g& Y. T" G# c2 q
then
5 X" D8 k2 r' N* T  if [ -r $MONTE_COUNT_FILE ]; then" n" g3 p5 M- z8 R/ T
   exec 8< $MONTE_COUNT_FILE9 H4 P; x" G5 K& [+ M5 B7 q# q
   read next_monte <&8" \9 u' Q$ v7 {' S
  fi7 C' Z& g+ N' x3 v5 y9 u
fi
4 C8 F( U: w4 m" R4 u
/ Q! h/ V8 c/ m4 T1 s+ [3 w- Qtrap 'echo Program Interrupt; cleanup_monte; exit 1'  2, R4 `8 L5 V4 y0 z- }
while [ $next_monte -gt 0 -a $next_monte != $cur_monte ]5 w7 }6 V* B) ^- U1 e! v
do3 i; |- r7 u: T* [  S
  NS_CURRENT_MONTE_COUNT=$next_monte7 @+ p3 @0 v2 Y( @
  export NS_CURRENT_MONTE_COUNT
& f. R3 L  A5 E: y# J& `: I# W/ p9 l- ^) ~  q8 X/ j; Y
  echo "restore_ckt_state save_file=$MONTE_IMG_FILE" > $MONTE_CFG_FILE
9 ~8 B# F  F; G  g  CMDLINE="$CMDLINE -c $MONTE_CFG_FILE"4 v( L* g' d# J* r! |4 y2 s/ `
  run_main+ l7 D* w1 c) [4 Y+ u

' Y9 Y, G0 C' \) m( t7 Y1 P  cur_monte=$next_monte
+ \7 V- S, f6 }) Y5 j  T8 I  exec 8< $MONTE_COUNT_FILE
% i. h0 s8 w* h" s" a  read next_monte <&8
6 b4 S. ~+ h2 Hdone
$ Q/ B( ~$ `) D* m) |5 X& r, [  {5 c
* {% b: U1 h8 n. _! W+ Y3 o8 Xif [ -f $MONTE_COUNT_FILE ]
2 Y7 q! l4 ^! d2 G; J& q- g9 Fthen" w6 o9 N: d' z3 t
  monte_runtime_summary* v+ w3 R- I! W( L& C
fi$ v) g' x/ ^& n8 x
- c: [7 f% g2 l( Z6 U$ |
cleanup_alter5 i& a" X" v6 w8 z! f, t+ Z3 T3 Y) o
cleanup_monte
% u  ^+ b# k" z& b7 ~5 i+ a" w" [/ p  Y# ^3 a
Exit $ret_stat

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
1#
發表於 2012-5-24 09:22:22 | 只看該作者
nanosim有說支援ubuntu 11.10?為何不用RHEL5,這才是EDA的主流linux os
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-6-17 02:52 AM , Processed in 0.153520 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表