Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-5-6 13:58:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10Chipcoin
各位大大好:
, n. u2 V5 N1 `$ `                      小弟執行nanosim時,卻無法跑出視窗來,有個錯誤可是我不清楚該如何解決?問題如下/ M. W$ H% g5 S' c# k3 v
                      [: 113: 64: unexpected operator
6 ]' g7 k& K9 s$ a9 z( g+ z; s/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim: 1: Syntax error: Unterminated quoted string' c& P# A: T- K, }/ U( O! g
有大大遇過這方面的問題或是指導我方向去解決, 謝謝. + [2 u0 F+ `; U/ @2 Z. @8 H
我在猜可能是這個檔案內的文字需要修改 但不知道該如何修改?
* J& g" _% W7 r  b% w( z3 ?以下為/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim 的檔案內容:$ r) u. i( x5 b  W" |3 Q
    #!/bin/sh0 x4 Z% }* y. e$ w: ]" }% `$ D
#
8 M2 S5 p/ J1 s* e2 q# Copyright (C) 2001 Synopsys INC4 Y, _9 h+ }" w# g5 H- D* R
# EPIC Dynamic Simulation Wrapper (DSW)
, |! y# H: ]% I  s) E; R#
. ^* ]: ?0 `7 P  {+ Feval ${DBG_EPIC_WRAPPER:+"set -x"}8 f' @7 y( ~9 L$ ~6 t

& n/ I0 Q' x- Aif [ "$EPIC_WRAPPER_DVLP" = "" ]; then
1 F  H3 P" u0 H4 e/ x( F    TEMP_ARCH="$SES_ARCH"9 V" v, M8 i4 f% u1 R, ~
else
! g. s1 u* K7 h/ J9 }    TEMP_ARCH="$EPIC_ARCH"2 Y8 U# F; F6 M6 r8 N
fi
' x8 n' W2 C3 @; j7 n2 F0 D9 a& I1 |$ _+ o. S4 z
scan_for_hva_args()
5 K) C4 `/ S  P& G, J: v% c{: ~+ Y+ z' F* v' K
  /bin/rm -f hva.init 1>&29 p) b* I5 @1 d0 L: Q
  while [ $# -gt 0 ]; do: l% l) ]7 i7 i6 X( Y" [/ Y( A' g
    case "$1" in
8 m) j3 T# j- I      -vaf)- O. r8 m: B  T* i- c
           have_vaf_flag=1
' z. S4 ^- v8 I9 L5 _. U9 F! @           have_va_flag=0
$ {8 }; w1 ]6 P" e- U' @* ]! j1 m3 q2 f           shift;! t- }  S* D7 f% l  r
           continue;
: r4 i0 Y, x. j8 ~( L# a$ f        ;;
) l" D# h( s. F0 t% u0 g      -va)4 ~3 Y" D: A4 P: C8 H/ D% f
           have_va_flag=1
3 c9 V" z! a* V7 j, M6 Q& U           have_vaf_flag=0
4 v% `" s. Y/ X- f5 i( ?5 Z' j7 P0 [           shift;) d& x. g% B: S- L2 y6 r7 L
           continue;
7 @( L1 g( g& d/ x" G% X) Q        ;;
, D: A4 E2 n+ O* f, v) x7 _4 n      -*)0 Z' _; m' U! Q% Z
           ARGV="$ARGV $1"
) q4 X4 X5 a& u$ \. q* K! I           have_va_flag=0+ C5 g$ _" i+ K5 O5 D
           have_vaf_flag=06 _1 `6 V6 ?$ [" @
           shift;
6 m9 m) m" \  u2 G/ ]; j           continue;
7 t% v3 m" y, Y9 l        ;;
3 X, _. l+ n8 Q* }      *)  V! Q4 R0 C8 {9 z0 A' {8 d
           if [ x"$have_va_flag" = x"1" ] ; then 0 d/ V6 y' ^5 h
              VA_FILE="$VA_FILE $1"  D. g( P& _4 H. q+ u3 X$ X
           elif [ x"$have_vaf_flag" = x"1" ] ; then & ~( I- t, j, d) w, b% q5 y- {
              X="`cat $1 | sed -e '/\;/d;`"
- F5 T9 k5 [! i1 `2 `$ I: ^! D# W              for token in ${X}; do3 H( Y1 K; W, {* `! l" j
                 VA_FILE="$VA_FILE $token"
# s1 A" b* d7 `' W$ u/ i! x/ R              done ' H% _: N) D7 S, i" u
           else, V7 v  J  ~& C- Y9 [
              ARGV="$ARGV $1"
! J1 V8 G. c9 X* ^           fi
0 W2 Q: B! I' [8 c* g0 H) O4 I5 d/ G           shift;
: ]/ F% j; ]& P, r" L# H5 o7 p        ;;- F$ C0 }  ]  Z2 @& U% u8 ~
    esac6 k) M, P4 u) G. o' T3 F
  done% B% }) H1 r. p& l0 x8 m
; ~  S( q6 H3 l5 d7 G
  if [ x"$VA_FILE" != x"" ] ; then # w, Q! _0 F/ k; Q+ M# R* S$ ~
##     /bin/echo " xxx ARGV $ARGV"
' x8 v1 c; e+ {: `  V/ @; j       /bin/echo "choose nanosim $ARGV ;" > hva.init
8 T0 x3 Q; B, N       echo vcs +ad=hva.init $VA_FILE -o simv4 S/ @, E$ G+ S1 w4 _, U1 f
       vcs +ad=hva.init $VA_FILE -o simv
; M& w6 T( i4 C5 A$ E       exe_status=$?3 q) s" K) J3 o3 U8 c# t# ]) m
       if [ $exe_status != 100 ]; then2 a9 L1 k7 i2 ~; W
          /bin/echo ""8 N& T- @5 P/ f$ e$ `# R3 K/ A; H5 _
          /bin/echo "ERROR: Execution of vcs exited with code $exe_status"& ?# F5 j! B+ S; \; q6 c% m: H
          /bin/echo ""$ H# T5 r7 B) }' G) d6 E
          exit $exe_status& p; {, |% X1 Y9 i+ C. L
       fi& b$ W9 I9 r/ ]( `
       hva_files="-n simv.daidir/amsVD.ntl simv.daidir/amsWRAP.spi"4 T& a# f& w0 E, @/ ?4 a
       ARGV="$ARGV $hva_files"/ x% D; g2 C4 F
  fi
4 f3 Q: Y+ s: ~' L}
9 H; r5 [+ `: |* k4 _#-------------------------------------------------------------------------
# V. ~: Z; R" b4 m5 A) T. P# b9 ?5 l
cleanup()2 k- p- M$ v) d4 D7 J( d  B# n
{
$ t6 W7 @$ X9 ^# n; r' S) N: m" l  N    if [ -d "$rundir" ]; then
* ~2 t' j+ x( N! I7 q3 k6 i        # On AIX, a .nfsXXX file is created if libModel.o is removed
. D9 }$ e0 D1 \6 {- ]# D, X1 l: M        # so .epicrun is not removed because directory is not empty.  `8 B# r1 f  U7 w4 s
        # Solution is to remove it again if the first rm failed/ x4 y3 f7 W/ F6 a8 k: k6 o
        # (rm -rf $rundir || rm -rf $rundir) 1> /dev/null 2>&12 |* B3 y' k( |# K; K$ e
        if [ "$EXTRA_CAPACITY" = "YES" ]; then
( K$ j+ m: C7 }. j' K$ o6 a  j3 \        chmod u+x $rundir/rpcidfile3 L: K) o6 N( f% s) `
        $rundir/rpcidfile
. u1 S7 [' e( w$ P  L0 u        rm $rundir/rpcidfile
/ R3 |' ^. h, q# T* V$ v        fi) q& W% ^' ]6 J  f4 n
        rm -rf $rundir* s. |( Q; d4 l" ~
& _  \( P0 ]; C- R
        #Due to NFS problem, we have to copy files needed to
; J/ o2 Y3 v. c, u# @4 h( _' |        #/tmp/<temporary directory>, then symlink's files
$ o% u6 P' x) v- g& a; N/ _        #to the local temporary 'rundir'. This avoids the problem
# d% F: N0 T/ F        #to remove 'rundir'6 ?0 ]( x- d* C  x2 y$ q8 O: ?! T
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
# ^& h- ^, t9 Y: x5 T          if [ -d "$tdir" ]; then- O! a' N1 e! N
            rm -rf $tdir
# d( z+ r5 [& b1 f; G( U2 e          fi
3 V) L8 `) d! C  X: }0 E  K        fi
# R# U9 v9 q# ?" M0 Z. |    fi
0 Q- ^) f( k9 \7 ~3 N2 L$ I( x    if [ ${exitstatus:-0} -eq $ld_err_code ]; then3 @- V. `2 M: ], z
        [ "$has_model" = "YES" ] && rm -f $cwd/libModel$suffix) C( @0 `9 G3 b
        [ "$has_custom" = "YES" ] && rm -f $cwd/libCustom$suffix
. J2 ]- L- U+ T. v( q. e% O( q    fi$ J& X. @2 |5 V7 R& j" p
    [ -f "$EPIC_SCRIPT_MESSAGES_FILE" ] && rm -f $EPIC_SCRIPT_MESSAGES_FILE 1>&2: Q0 e9 k* @: Z7 O1 f: W) [( q
    exit ${exitstatus:-0}* i! F8 B* k; }
}
- b% E3 q2 n: b0 u/ D7 I- b$ ]$ W6 F; Q+ \& E1 Q0 P
Exit()
  I# A% h: v+ p{
% t2 \: n1 K1 ~# T6 Y% [    exitstatus=$12 I! G" c  }; {: }* f
    exit $exitstatus
( _- C! A$ I0 N% e/ h- @& U" O}' h  c- e% j* N4 O9 K# ~, ^
5 S  p+ p3 C- o& e8 |: s6 Q
# get_epicrc filename keyword3 x# p6 `* b/ N) k7 c- b
get_epicrc()' t/ u0 u' ~" f+ Z! b* m7 e
{& S& Y6 i" o$ G! \. x
    [ -f $1 ] || exit 0
2 ^! F6 I' @( p0 y9 q    key="/^$cmd2:/{print \$3}"3 |* L, F' V$ n
    awk -F":" "$key" $12 g  k. o( y$ v  e
}
' g* E+ O0 `  W7 B  E3 B7 y# M  R7 |" ]4 x  P3 i! U( h
#
5 M, R! g# R. ^/ c& O0 X# set datasize limit to hardlimit
, d* k0 E. e8 w* p6 q& [& h#
: y- Q9 A5 |4 M% A5 H; pset_data_limit()9 j$ _1 v; m1 R6 w1 M; u- P
{; B# M. p) `; k
    dbglimit=0
3 Z8 `' H1 U8 e7 k1 j7 B    hardlimit=`ulimit -Hd`+ V+ T# I4 a& K% n; c
    softlimit=`ulimit -d`8 Z- u4 ?# c3 I+ A
    desiredlimit=3500000. v" h  G& w  t, Q9 A
    hardisunlimited=06 T* M8 n) x3 R) v9 S6 U2 ^
    softisunlimited=0' |) k9 L% ~- u% r. I5 K
    is64=0+ M( X: ^% ~0 m7 W
* t. ^  Q1 s" X# U& {, Y5 B3 T
    case "$EPIC_ARCH" in
# D) M; V, d- p0 l3 D' t    *SUN*64)6 U, _% w7 }. i
        is64=1; M5 C# ?7 t( ?3 P
        ;;
: C& R$ C, I2 O8 o* g7 H; _    amd64)
& S, Z% D* O7 E$ i2 y7 [; y  O4 Q2 D        is64=1
1 E0 V. D1 l9 Y4 j7 Q        ;;
, r' J! E" Y$ Y1 C; {9 `( D6 G    x86sol64)! F' a! y$ H7 h) j) U2 R& \. V7 Y
        is64=1% D- G# a8 Z" {' Z$ w0 f9 L' E* R& c
        ;;
: g$ v# n1 c* [% r0 h    aix64)' s# l0 N. \% u9 m8 M# m& o; R
        is64=1
9 a: K3 x/ t0 W9 |4 ^3 T( [        ;;/ R7 S/ D% ?2 \2 C9 g& q  h
    suse64)
: k4 A3 W+ M0 t; K7 l        is64=1
* a/ E  q  P/ I* L. E# c2 s        ;;
0 ]8 X5 E* c& @. P    esac. T  A: a- X3 I1 X7 |" y" i2 O
# H$ T; F* N# J/ d5 E
    if [ $dbglimit -eq 1 ]; then9 t! k" a3 |9 A; l1 s
        echo hard $hardlimit soft $softlimit
* d. g( Q2 ?# b! i. E. P    fi
/ O/ _( g/ @2 O/ ^4 V! r
* s/ P; y$ D1 F    if [ x$softlimit = "xunlimited" ]; then7 G$ U6 l$ e( R9 \9 f. W1 Z- o$ `
        softisunlimited=1
6 J/ K- F6 X* n* @2 K    fi& U5 U( N: {; E$ O8 b) g9 I

* B% x+ [' a; r3 ~4 n; v3 I    if [ x$hardlimit = "xunlimited" ]; then
" H" |* [- K4 y# w3 ~" e$ n        hardisunlimited=1! g# {& Y, A7 a; t1 _/ ?/ Q% ?( }
    fi
- X/ v- P" W! y
; v/ n1 @4 b* U/ L+ T8 S    # 64 bit machine should have bigger than 4G, g8 p, l2 H. A$ t
    if [ $is64 -eq 1 ]; then
9 T: _4 {( k' h" v, [0 `        desiredlimit=5000000  e0 x/ [# c: x3 Q1 W6 m& `
    fi
9 Q6 D* B, W! _7 f( l' W3 s) n& E7 X3 E; l' B* b
    if [ $hardisunlimited -eq 0 ]; then* ?- ]. K# k7 \9 v+ X3 v
        if [ $hardlimit -lt $desiredlimit ]; then
* ^# ^! A9 }9 q8 g            echo "WARNING: datasize hard limit $hardlimit K is too small.", Q# v2 w( z3 w7 m' S8 r
        fi
3 c* a8 g8 a( ~0 \, @3 _# B, E    fi4 Z/ Q% I, p, V

. L3 M6 p& v4 s1 n    if [ $hardlimit != $softlimit ]; then
, ?' @, Q1 D, N        ulimit -Sd $hardlimit
4 e+ c9 D. v" `#        echo "WARNING: datasize limit is set to `ulimit -Sd`"
/ t( X6 i% L# b5 o+ q2 I    fi' Z+ K4 A7 [( U0 a
9 R, ~$ n' H& V, u4 d: H
    if [ $dbglimit -eq 1 ]; then
7 @0 g8 {. W, ?0 L4 D        echo datasize hard limit: `ulimit -Hd`
3 J8 j0 o* G: {; ^' r        echo datasize soft limit: `ulimit -d`
! G3 u+ K( B0 C: l2 q/ k$ y7 t    fi! K! E  i. U( q. j# T* N9 ]
}
! P" P) s# b) f" a; {
& c- l1 i) u' l/ k1 i! R. j#* U# j; t4 U7 c: a
# set stacksize limit to desired limit
6 L# q! C4 n9 L2 L#
/ J& q$ V  T' Eset_stack_limit()
0 I, V  R: b2 n9 n: m. w- s{9 u  `+ J4 `7 y% f1 H5 x- s9 c, O
    dbglimit=0$ c4 w" |% ~7 M" p$ x0 b
    hardlimit=`ulimit -Hs`2 Z7 s& D: H5 w" T+ c
    softlimit=`ulimit -s`. o7 C) T9 C+ o' u6 L" B
    desiredlimit=600002 ^% T7 j" K( \3 f/ Z4 k7 }8 X8 v
    hardisunlimited=0
. P0 z6 r9 y. c$ R% ]8 j8 y    softisunlimited=0
' s( Z% B$ x& q! v# T    is64=0
4 f# W6 z4 `/ ^8 i( x0 r! [# K
/ E1 W4 S2 i! V3 p    case "$EPIC_ARCH" in
! f, j0 r% v. [0 l5 i* Q    *SUN*64)* Z. x/ `) t. M' [8 {' U! v2 j9 k  s
        is64=1
8 i) \/ P9 ]! ^* R+ R: e0 g: ]        ;;
+ s" C% J6 Q+ t3 ?6 h3 G2 F    amd64)
9 p4 N8 P  G$ }9 o% U        is64=1, \2 d8 F/ e. L9 R' d: ]
        ;;
/ J/ q1 X$ D! A    x86sol64): F0 E0 ?1 l2 o
        is64=1) @3 f3 L1 m) y0 ^( p9 \, M0 H
        ;;. b+ t" m# \- p" N1 O- i" F, D- i
    aix64)1 b7 h/ `+ U% z! s$ ?* o
        is64=1
$ b  v! Q# m0 P! u$ ?: h3 T% ~4 b        ;;- ?- v; D5 ^+ h
    suse64)) c* {$ p6 Q  ~: G8 F
        is64=10 g. ^: Y$ g; @. ~& R2 |/ |
        ;;
; n' T5 k9 X2 \    esac: i! x+ x& y5 i& s' Y2 ]
& i5 W; t8 I, `( d9 o  s
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then5 E) R4 e' _/ Y
    if [ $is64 -eq 1 ]; then
% ]! C5 `. o2 i( n        desiredlimit=2000004 x5 H0 v6 d5 X+ Z+ v5 W; E
    fi- m/ K7 k  ?1 Q. v0 o, a/ j! C
else
) f; {/ p% v4 j2 H& i    case "$EPIC_ARCH" in
+ D5 T% z4 L! m    *SUN*64)5 i7 n+ I( J9 A" ^
        desiredlimit=200000) G' T  O  |0 l0 r
        ;;
2 n2 T) M9 X' p! j0 q+ o) Y    esac/ |" c% y+ f( [/ O% c! A" C
fi
; j. {* l0 P9 ]8 y6 ^" W       
7 S8 o5 x3 ]; `: p* v& O7 K    if [ $dbglimit -eq 1 ]; then5 n4 t' O) T8 z7 I
        echo hard $hardlimit soft $softlimit
( z! P2 `, X8 j( i' G9 l/ S7 K    fi
3 q7 C6 O7 B6 g; S/ s% a0 y2 I3 v
8 `3 {4 I7 m# y, \- `( V    #stacksize can not be unlimited, pick smaller number- J# L/ y& X  I; z2 |

' p! ~2 j, k' e% ^- R4 `' y    stacklimit=$desiredlimit5 h* ]- z( c7 A- {

' z  p. [* Z& v2 M    if [ x$hardlimit = "xunlimited" ]; then
1 `$ _$ X- \& ]8 x' U8 l6 Y        hardisunlimited=1+ _- Y: c* _0 a0 i
    fi
8 t$ T/ h8 f! {) `  _3 {9 O
) o" U7 T* Z% g. ^" ]  \0 Q    if [ x$softlimit = "xunlimited" ]; then
, N/ p# }* U6 V7 U        softisunlimited=1
! W4 p- C- M$ r* G8 e# P    fi- H5 }$ ^" z  u; Y* F6 I9 h2 M) d
5 p* e* w% [" s# U
    if [ $hardisunlimited -eq 0 ]; then
6 z/ A( p0 ], J  e        if [ $hardlimit -lt $desiredlimit ]; then8 F% ~& w7 |9 w0 J- H
            echo "WARNING: stacksize hard limit $hardlimit K is too small."
3 e5 E( R2 {6 f9 T+ \4 a) b            desiredlimit=$hardlimit+ |2 `0 X5 u# f: V7 e* }- i3 g
            stacklimit=$desiredlimit
  u+ M) w/ H6 B" k# S        fi
% t# i, n8 H% i1 J1 @7 G. [9 H' {# Y    fi$ d+ I8 {5 t! q( j7 P
2 c1 r6 c: c9 }, D2 S/ P
    # desiredlimit is set to proper value (< hardlimit): S6 r# M5 ~. v2 ^" ~

5 e: z$ i; A4 n; w2 y* R    if [ $softisunlimited -eq 0 ]; then) f. l) `6 J, g7 d% \  F4 |
        if [ $softlimit -gt $desiredlimit ]; then
- Z8 A2 D) S5 ~1 S# ~) P( w            stacklimit=$softlimit
1 C2 j4 ~! ~: G- L6 F. e7 T' e/ H        fi
' i" @" W' P. K0 Z    fi
  E, |& h$ D* A5 K" ]9 F; D+ V# v( F  N0 M( T, J4 z" }5 S
    if [ $softlimit != $stacklimit ]; then
8 T$ ^- }% t' z7 n" B        ulimit -Ss $stacklimit3 b4 t+ K: B* j
#        echo "WARNING: stacksize limit is set to `ulimit -Ss`"5 M% @; ?5 ^9 X; a
    fi: k! B8 N3 F7 `1 R2 M- D5 H
$ p; \+ [6 X/ L5 R+ V5 u6 d- R
    if [ $dbglimit -eq 1 ]; then- P, E+ E3 H* `
        echo stacksize hard limit: `ulimit -Hs`
0 \+ }$ ^# E6 ^2 `; u, \  W        echo stackize soft limit: `ulimit -s`
7 f) t1 D7 |" U- n2 X6 E2 }    fi
+ P8 W; O6 j' w! O}& M9 Z! n7 v7 C$ W8 C; h
. P% f, t6 R5 L' ~  @
open_epicscriptmessages()) s0 s" x5 b7 W+ |3 m5 O: s
{
8 A; g7 N* Z5 U: T#generate  temp ".epicscriptmessages" file based on pid# [: i+ H3 o0 V
EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$. U; |& t3 z) O
if [ -f $EPIC_SCRIPT_MESSAGES_FILE ]
2 z+ C8 r# o/ [; B- [$ ~then
$ Y7 H* ]" h( a! l  until [ ! -f $EPIC_SCRIPT_MESSAGES_FILE ]" Y4 e% Z8 ]# z7 o. y! ~
  do8 q/ W) ?5 i' s& n3 u/ u5 X
    EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$) s3 J9 k2 {7 `  {/ Y/ @" v
  done  ?' i( B, o, M7 [% I
fi
) ^7 G$ m3 x3 W) c; {6 c; G$ P$ P0 T) `+ g9 N: l0 {! o' ?5 m
export EPIC_SCRIPT_MESSAGES_FILE5 n5 k& n2 h: v( J2 t: t
}
! r& J) R8 P: n* S" y( @9 r+ |( t
; P' O! l) N1 {0 y* H5 x' U8 K3 d% [
cmdname=`basename $0`- t$ _3 {; Q+ ~  N  K8 K$ ]! _
postgres="n"
! i' D! B# a2 [/ b1 M- yostore="n"$ k9 \4 f6 B$ t; J' E
gui="n"6 q! m: J' g" N- F5 k
databaseOn="n"
. V& P) g2 t, F% J* B0 }: a) K' Of_next=03 q, I* t  W5 |5 C1 m( H* n' H
f_option=""1 [) f5 i% ?5 q7 p
o_next=05 j* w. I9 O% x( y5 R
o_option=""
" D+ l" c5 u! s1 o5 h! [. cworkDir=""
$ b6 [! A% M& g) V4 N6 qworkDir_next=0
- F/ ~9 N) {( w3 m; I- i% H# HerrFile="powrmill.err"
1 k2 O- ]$ X5 A! \. W" A5 Ywin32flags=""$ t. W6 p; L, u# L# r  ~
ln_default="ln -s"# t! c. X% w9 d; e1 d+ n$ h5 q

- T( |6 P( _! ^. W1 ^+ h- t" |har_hilo_file=""+ a, i2 T  t1 U6 F2 k2 u1 d
have_har_flag=0
) K( W* v  T6 zhave_har_setup_flag=0
- q% M1 O6 z$ m5 fis_special_har_run=0. ]6 z; N5 V7 J2 R$ Q; v) s
har_ofile_prefix=""
# T: j# S4 p& V
* R; B9 p7 F2 p& T3 C0 fhave_va_flag=0& S/ K3 P- H+ ]" L
have_vaf_flag=0: F& t4 }; _6 y3 w) x1 ~
VAF_FILE=""  w+ }+ b9 r- j7 _
VA_FILE=""
$ P6 Q5 L' ~2 a) {  d/ ZARGV=""
; D3 o5 Y9 c4 t, X: B- X; `! R
8 ]9 F& \" [4 JORIGINAL_COMMAND_LINE=- R# ~+ @& t( U3 T7 y! H
LOOP_CTRL_FILE=".ns_ba_env". k, ~5 h6 x3 T" u8 _. u
ALTER_HK_FILE=".alter_hkf"4 z1 p( q2 R/ E3 I# o" R5 i
ALTER_COUNT_FILE=".alter_count"6 d; e8 i9 N* I  b" I; k
MONTE_IMG_FILE=".monte_img_f"
  e$ u( M' a# m: pMONTE_COUNT_FILE=".monte_count"7 n. o. J" M' X; j
MONTE_CFG_FILE=".monte_cfg"
$ Q. I3 ~: F2 ]" h# m% K% CEPIC_SCRIPT_MESSAGES_FILE=".epicscriptmessages": _: Q: s' ^8 ^' _# Z0 b' J/ y
% M9 x) h- G( b" |* Z
open_epicscriptmessages $@
% d  U, j( }  O# ]- P* F* O, M5 Y" G' `
scan_for_hva_args $@
& `) p( d4 N; u1 c* h4 Q7 c6 M; Y$ o+ ?
scan_for_har_args(): ]& }3 [1 d! q; n
{2 L4 Y- ?+ D# b
  while [ $# -gt 0 ]; do
* E% G9 [3 z1 g/ ~9 {" B    case "$1" in
) {/ k" t% n# M% f      -har)7 ]' j) L6 c  ]* @* ^8 m) ~$ C4 Y, x2 N
           have_har_flag=1
8 m) e$ E. \) E# ?1 I9 ^; W* _           [ $# -gt 0 ] && shift
. ^- M5 C$ S4 X* W           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then' `; W6 G, @1 K: `/ N
             har_hilo_file=$1
4 j/ H2 m% ?, O             shift* l/ s# D/ m2 H  c9 o
           fi
% T* p& D5 R6 c           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then
7 x4 _- X$ C* k( d" j             echo "Too many arguments to -har flag. Only one hilo file allowed."6 B0 i4 ^) I5 p( _( @: v+ }7 Y
             exit 1( p+ U- t1 C5 O7 G( }/ i: [
           fi
' g5 W" F0 F0 k" z) T0 I4 a           break
: o( p6 K9 w& h3 \7 n7 g        ;;
3 t. G. @% v) k9 b, N3 W      -har_setup)
; X% f! G& ^' P3 @6 g' t& C           have_har_setup_flag=1
$ x/ w0 v$ M& N& P& d0 i2 y* b           break3 S. Y9 s! \$ C6 E- P$ m  L
        ;;
0 ?0 w" b9 E0 c      *)
- A; ~, o' s0 v        shift
1 h8 \. ]/ ~* w8 }6 C7 O        ;;
4 G' P3 z6 k+ y/ j/ y; N) q3 d* ~    esac) _% m/ d/ d6 S5 l
  done! h4 f  x# i3 i. s% D+ ~8 S3 R
}) F/ k/ G+ |: j7 ~& D
$ y  r8 `3 R% V" p
scan_for_har_args $@* f8 n: d+ b1 Q

; Q/ B9 p' j( v5 @3 m9 V3 q# Ffor argv in $@
' I6 _/ u9 f3 s1 W+ @( Udo
1 J" h- q7 D% v$ ?- }+ r   ORIGINAL_COMMAND_LINE="$ORIGINAL_COMMAND_LINE $argv"! y3 c' R$ [% {, k  h' |; F
    if [ $argv = "-gadb" ]; then
- ]8 q2 e. ]$ x9 l* g8 k9 Y$ S5 X        databaseOn="y"8 e) c2 T6 R5 s# M1 B
        workDir_next=1- a' ^, B6 O. L! S9 w7 v; Q' H
    elif [ $workDir_next -eq 1 ]; then" c: X$ {+ R' ?9 o5 y
        workDir=$argv
1 G" W4 v# S6 H9 x6 f3 T        workDir_next=0. b7 m* ^3 J) i. b
    elif [ $argv = "-ga" ]; then2 F% N$ ?$ b$ H% F8 V. g
        gui="y"
" e7 `8 n3 o- T    elif [ $argv = "-f" ]; then
8 p$ v' G5 p" q+ v, k        f_next=12 k2 |. {0 \2 Y: ]) h7 r2 @  u
    elif [ $f_next -eq 1 ]; then+ `+ \, o" h! P
        f_option=$argv
4 f6 K- ~( r* W- D% Q; ^        f_next=0! m! H+ R! R0 m7 p  N
    elif [ $argv = "-o" ]; then# n& h1 D0 i9 ]4 r) A( p2 ~
        o_next=1- F' B- f( A) q! Q& ~- ^
    elif [ $o_next -eq 1 ]; then
" x: i, P; h7 `& i7 A: h        o_option=$argv+ K6 w0 U, T# h, X7 H; k7 k1 B& Q
        o_next=0
- w) G6 [1 ]4 d: q# V& {    fi: T0 E. S9 G- G! s# S: o3 n4 p
done& U8 e# [# d3 P- Y# K1 ?8 [
echo "Command line options: $ORIGINAL_COMMAND_LINE" >  $EPIC_SCRIPT_MESSAGES_FILE : T, A% M( ?- K

$ e* U; A4 ]$ i# f3 m7 u7 xif [ $databaseOn = "y" -o $gui = "y" ]; then
& _4 Z2 I' j2 \, {& h2 _  if [ $cmdname = "pathmill" ]; then9 o; {% C5 O$ G- B
    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5"  -o "$EPIC_ARCH" = "SUN4_SUNOS_5_64" ]; then" Q  a# y/ h- D" B/ I6 F3 m: o
         ostore="y"
8 Q1 {5 @3 T$ c# l         postgres="n"
$ I& i1 F* T8 q* w% ^     else
- l: E7 C  Z) A        echo "athmill GUI is supported on Solaris platforms only" 1>&2
, |4 J6 F6 f. `& V6 _0 Q        exit
- W1 {$ Z, H+ b" Y3 W% v     fi' {& ]1 ?3 ]( C% C
  else
, }$ G! @. S- b& f) A7 g2 W" ?% V) B7 v    postgres="y"
' }4 ~: H7 g0 f) d! S/ L         ostore="n"6 b8 _: U/ `+ \9 w; R* h
  fi
* O, R; ~2 Z6 Y/ t' }& hfi
; H& y# v5 s  _) |( M8 N, {% \9 p/ O! n
if [ $gui = "y" ]; then
8 T6 A4 }, w) J0 z    if [ $cmdname = "powrmill" ]; then6 \# ~9 W, C2 q- J0 u
        pwga $@
3 D: V. m7 B# N4 M        exit! Z. B" p, I! u6 j/ t. {
    fi4 C! O# n/ i# m, l5 P/ y
+ T$ w1 n9 p  E* a: X* [* {& r
    if [ $cmdname = "pathmill" ]; then
$ N% r( ]; m  f* o$ Y" c9 J        if [ $ostore = "y" ]; then
% k. U8 O$ P& K1 ~# e- @) m           ./pathfinder $@
4 I4 I; x* k# t1 L- G( h           exit6 t, ~% d$ F$ U8 u6 f
        elif [ $postgres = "y" ]; then
5 L3 r+ n" R0 x$ f3 n- D& b0 l           pmga $@7 b/ t! r+ W: S  L
           exit  z% @: M( o! l2 R% s
        fi
8 o4 o* b0 m% T1 g7 _1 J1 a7 L+ \    fi
" I, ?$ r' B& |' u, Ffi' H  R+ {- P9 s) ~& q( D. i

: {% u$ k$ P0 I- R( t& bif [ $databaseOn = "y" ]; then$ k7 I5 R) I% U* h1 V, x3 O
   if [ $ostore = "y" ]; then
/ W% K  w4 P6 K1 U      if [ -z "$workDir" ]; then. o! E; \% p5 Y
         echo "Error: Missing argument for -gadb option"1 S* C7 w' K9 {
         Exit 1) k% X7 ]9 e8 d- y) V
      fi
4 r: l5 F: e* T2 A1 m) q0 T   fi# r, S0 ]7 m7 [* F4 l! F/ g! ^+ ?
   if [ $postgres = "y" ]; then
3 J5 _/ U8 Y; i! Y. T; s: H0 `      if [ -z "$workDir" ]; then
' H; K  q6 e& s+ h( ~4 Q# C         echo "Error: Missing argument for -gadb option". j" q! ]1 J% Z! `$ M
         Exit 1
/ u  o0 V: V# b8 r+ [      fi* L% m( Y& B7 ]* l
   fi
. m# j9 P8 b7 }: J+ ~6 Y1 J1 ~fi: x4 J2 q9 v( A8 h/ K4 P# u

8 t/ \! u* v4 u# j0 l1 T4 e% j: s- h1 }if [ $postgres = "y" ]; then
1 E& Q; k  ~# c+ M# o# s- \2 j* d1 _
    if [ -r $EPIC_BIN/scripts/gui-init ]; then
2 ^7 A4 u+ D" B        . $EPIC_BIN/scripts/gui-init
! C& Y- B7 v8 f* B1 d" V    elif [ -r $SES_ROOT/bin/scripts/gui-init ]; then$ j8 r6 q! v6 \1 Y2 j& u
        . $SES_ROOT/bin/scripts/gui-init! b$ m5 y- b  t4 |& K. K% ^
    else( f1 c$ O' [0 n% ?/ D- ?
        echo " ** Installation in \"$EPIC_HOME\" has been corrupted!" 1>&2. z2 p# z6 y8 w  A# R) k" W0 w! N# X
        echo " file bin/scripts/gui-init is missing." 1>&2
& Q6 H. ~/ w) m9 J1 Z    fi% N& B6 z9 F; |* z

( Y  C" v# x2 L    workfile -tool $cmdname $@( u7 C# ~$ ^/ y$ @. m% a- R5 ]- q$ k
fi3 G- l! A4 i, n' E# M( L

$ P6 f  m, P7 N# q: Bif [ ! -z "$o_option" ]; then
! ]6 a: b1 i) w5 R/ D4 n    errFile=${o_option}.err
! B( y+ C& Q8 ^8 ]8 i: y! Q+ relif [ ! -z "$f_option" ]; then
9 N) L* @% S! {0 U5 B; _! L" T1 c: C    if [ -d $f_option ]; then" ?/ J3 g1 a' l6 O, I3 f# k
        errFile=${f_option}/powrmill.err
) T/ x5 M0 e2 w$ T+ Y' }! p  B1 l5 S    else errFile=${f_option}.err
- k  d9 N5 x( {0 G7 M( ~" F, h    fi
: C/ Q4 r7 O0 C& ^( Afi
1 B* |' }' U6 Y6 c5 Q  Z1 W
2 W5 f1 r8 Z( x2 u  H9 r
8 u: Q: J6 r5 R: Iif [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
) V% a- ^- F+ B  `: x  rundir=.epicrun
" {& B& J; [$ T8 {4 E3 Celse- W1 a% }1 S3 r; e. L" m
  rundir=.epicrun$$5 d# x! a' l6 ~/ l
fi
! B6 a1 ?/ [3 d  K3 c0 c8 S( H* F
libpath="$rundir${EPIC_DLIM}$EPIC_DIR"/ V5 B& a! V) V, W6 j
3 X- M3 ?1 ]; g% {: g  E
cwd=`pwd -P`( m  l! O& h; Q2 @
if [ $cmdname = "acehdl_w" ]; then
2 ~8 m% J% C) @: K& U  cmd=`basename $0 .sun`- e# i5 u) p& F
  cmd=`basename $cmd _w`
$ H9 s. p' p1 y0 w+ s6 h2 jelse
  P/ ~+ P6 e& b3 M; y0 _  cmd=`basename $0 .sun`
$ v, p* c8 s  ~/ Q9 \fi* ~2 I7 w: F6 {# L% D

5 w2 ~6 X* g* @6 i) U) L! Pcommand="$EPIC_EXEC/$cmd$EPIC_EXEX"2 E7 z. ?& b+ |& r' E
[ ! -x "$command" ] && echo "$cmd: not installed!" 1>&2 && exit 1
/ f8 d3 U* d  e2 i3 V) _9 i/ L% |5 m# W8 Q/ K1 n. t
# buildmod extracts -u/-fm options and calls genepiclib
' q; S' ]. K( {* O6 T( d# It also set the remaining options to variable CMDLINE) v: ?3 o" \5 J
# look up in .epicrc for -fm & -FM parameters
' `) J- B6 I! m5 `! _- B4 b0 R
" Z6 y9 \1 u6 K- K1 zfmlist1="`get_epicrc ./.epicrc user_adfm_obj_modules`"
! r. t0 x2 \) r1 T1 \0 U[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules`"1 i. \( j/ g7 K" H! s! s5 Q' u9 A
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules`") K, C7 U. R& m
6 I! i' F! d: A+ {& ~# z
FMlist1="`get_epicrc ./.epicrc user_adfm_obj_modules_force`", [. L/ Y: u* ~6 J7 e7 _
[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules_force`"6 @/ B. D4 J( f; ~( A
[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules_force`"$ F* Y' W) H* l1 g& U

( _+ E' @, h0 C( r# ^if [ $# -gt 0 -o "$FMlist1" != "" -o "$fmlist1" != "" ]; then
; }8 q9 e+ p* V    # note that the buildmod script will set the CMDLINE variable' s+ r" k2 Z8 W  Z; A/ J) ]
    . $EPIC_BIN/scripts/buildmod. j- Z" ^* p0 R* G- g
1 L* D* @* M. d) L+ N+ G# k
    #echo "This is the value of cmdline=$CMDLINE"
% S9 N( \% }. v" F1 m3 R    #exit 0
, F$ S, n7 E; o1 H9 w3 u0 ?2 M  L+ U0 ~; U2 G0 G3 }) b1 m# s
    # if a new timemill/powrmill/pathmill built, run the new one" a7 h% A* q6 m! Q  Z2 d; L2 N- @. w
    [ -x "$rundir/$cmd$EPIC_EXEX" ] && command="$rundir/$cmd$EPIC_EXEX"
0 _# I* S. O! H  i6 O" k9 H1 g! ^fi' v5 H2 Y; ?+ x8 [5 l9 Q9 m
4 ?" }/ S' e2 n! K" I" F+ J
if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" ]; then
1 l# {0 j; b" g" |! d! x0 E/ }9 a5 r  if [ $have_har_flag -eq 1 ]; then( \3 V! e% m3 @
    is_special_har_run=1
& g2 V5 w4 n/ t1 r7 @# ^' c2 ^6 n! _    if [ "$o_option" = "" ]; then
+ a5 O& {( j7 o, v+ f. o      case $cmd in
5 k8 u! S3 M$ }3 [% a+ l3 R# G$ z        timemill)
% q& W, U$ W- Y( ^) z: g0 N5 V3 R          har_ofile_prefix=timemill
" y1 r7 l. N2 R2 J          ;;  N  x5 X; R% P& W
        powrmill)- a: x+ v7 v) C& q$ @
          har_ofile_prefix=powrmill
, d: R: V, z4 T. ]' A          ;;- ^3 B0 v2 k- r3 X4 A: C7 Y9 a2 y
        nanosim); M. a) L, ?: T, x& u8 Z" o
          har_ofile_prefix=nanosim+ W' X' ^- M* i2 r
          ;;
6 q( r5 d  F7 ]) ~' U- a/ Z/ l      esac
8 ^$ S- P" U1 a5 S- H: `- w5 J( y    else& X7 J! y* M! H& {7 F
      har_ofile_prefix=$o_option$ Z  x& y* ~6 \- L. l; C
    fi& e9 w1 R$ |' O: r* y
fi
3 C( j3 R8 D1 \( Lfi" [: X1 U% q4 ~. X/ C

& k  B  r& n8 f1 D7 n# Call Double precision version of the product if -D
- o- M4 `1 H. v$ g- n) ]$ T. d# or simulation time > 1,000,000 ns.
9 M/ _2 |& N7 Hif [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" -o "$cmd" = "railmill" -o "$cmd" = "pwarc" ]; then9 X  ~. X: C5 Y' W; V3 j# n

  ~& L# [4 y" H5 P  E  # Now the binary always has the ACE feature
0 T+ O$ T! R& \5 g  USE_ACE=YES% U2 X: H' t; R. @0 \9 p6 V
3 j/ [6 [+ a3 h4 W! c
  HAVE_DP=NO
9 v! ^0 E2 q; I  EXTRA_CAPACITY=NO
$ u3 X+ q4 s3 k, e9 H7 n9 Y  DB_REAL=${FORCE_DB_REAL:-"0"}
% M' V4 n! h& }# _, ?; S5 @" |6 O
4 Y8 q" I2 e) m# I2 i$ L  # Enhance for ACE ease of use( d1 p- o+ Z' ?7 e' r
  # If no command line option or only a -T option, do:  H) q1 C! l7 v* @
  #   1. set -A option5 X) i( \  E  l4 b# c& v1 }9 B
  #   2. assume input file to be hspice4 R: k* e7 I- E  W7 h6 W& C* ]0 Q
  #   3. set -o to input file prefix0 ^# C4 }8 u. d0 l- h
  #   4. set -z to input file prefix" d9 E; b5 V9 G) s$ B0 G
  #   5. set -c to default config file
/ G3 \- y. h/ c) U! M6 V. o  netlist=""7 D$ g: R% y4 j" z' i
  minusT=NO
# P- a$ x# p9 c! |  ]  useStdCmdOpt=0
4 v0 ]8 }/ t* D/ T& p! I. J  prefix=""
4 h2 w7 q: y6 v( r  circuitType="") `& m1 l. \/ M6 h' E4 A5 H
  for opt in $CMDLINE
" U# C3 S7 c' y2 y  do
% p0 o8 Q6 e. M    case "$opt" in $ x' L/ ^) N3 m. Y  B
      -T)
6 U7 r( U  d- `* F( r        minusT=YES
  @, g8 D# o" k5 ~% b, e        ;;
* G! K* T5 S- c+ v  l. Z      -*), z  U+ _  T, ^& C3 S" z- X+ m
        # using standard powrmill command line
( H4 u1 K& F. w1 z# g8 |) \        useStdCmdOpt=1( @1 n% M+ g) k
        break
) Q, s- ~( F2 P) i4 V7 p! ~        ;;2 P4 f5 m1 D% A
      *)
  Z5 f, b" ]! A7 z) K$ h       if [ "$minusT" = "YES" ]; then" @' Q- O: _! j, X9 g# N* I
         circuitType=$opt
, n2 \" J' A* c& T/ L         minusT=NO  # reset flag" F; a% @$ i* u, I& E  s# m* i
       else , Z2 B) ?% t+ x: p
         if [ "$netlist" = "" ]; then
4 b( D3 g0 D. W8 q           prefix=`basename $opt`3 c. R3 g  X2 ?- a
           prefix=`expr $prefix : '\([^.]*\)\..*' \| $prefix`2 c0 _6 B, u  i* ~% n0 L1 G# S
         fi5 N7 F; F# i3 \7 {% X5 T- Y& ?
         netlist="$netlist $opt"
7 ?" D; r; \: {( Q- n/ q       fi
$ t9 O' J9 a; E; P! ?+ r       ;;
* q2 f& ]8 l# p; d% g1 j0 e; \    esac1 l, |/ z. I9 P0 Q2 u2 s
  done- F0 s) i( ]6 o8 b3 B7 C1 j3 L

* E% M2 A0 s7 K8 O. B
0 p" u* I- k/ Q8 x/ R* ^% @  if [ $useStdCmdOpt -eq 1 ]; then2 v. z7 q! c4 ^# h1 @8 ^
    # use standard powrmill/timemill command option
' h' f- U+ E4 q' f7 u2 ~9 y    for opt in $CMDLINE) |( l/ ]2 @5 ]$ c
    do
+ T6 A9 Q: n! @  J/ K      case "$opt" in 6 H  n: {* A. P) m8 Q5 [
        -A)
% U( L( U' ?4 s% n            DB_REAL=14 J2 F5 q4 y. P$ O3 M9 F& y0 Y: L
            ;;1 I2 \9 Y: c0 c- \) _& _% S
      esac) ]1 M5 @3 C# P% a2 }+ ]' v
    done1 t3 M8 A& X6 U4 r
    if [ "$netlist" != "" ]; then
. @5 C: h0 t: J+ n. e/ n6 }+ a      CMDLINE="-nspice $CMDLINE"
6 O/ H% ]7 b9 s    fi
$ \) y5 u- x2 P" I0 d: ~  else
7 G$ b6 u: f/ f+ U6 z    if [ "$netlist" != "" ]; then6 o4 c3 J) Q% {: d) |( x/ H% G
      EPIC_DEFAULT_CFG_DIR=${EPIC_DEFAULT_CFG_DIR:-"$EPIC_AUXX/etc/$cmd"}* f9 n/ _: i( j* B7 f+ L4 c
      # construct new command option
& x8 J) T; }5 B' c! a      if [ -f $cmd.ini  -a  "$circuitType" = "" ]; then
$ C. H, f2 s- M# c        CMDLINE="-nspice $cmd.ini $netlist", V1 B, p& p! T2 q% u$ I( T) t
      else# n2 ]& A: S: O1 i: `6 _
        if [ "$circuitType" = "" ]; then
% {8 w3 x" z1 W1 u1 Y$ o5 G          circuitType="msana"
9 w+ w, ?/ E+ e: O        fi
. g3 b7 j' I( {: ?. D6 m- t        CMDLINE="-nspice $netlist -c $EPIC_DEFAULT_CFG_DIR/$circuitType.cfg"; k9 y" b" |: \7 W
      fi& |% t/ |9 U' {1 m$ V$ _+ {
      CMDLINE="$CMDLINE -A -o $prefix"
; {3 v, B+ n! J3 t# x      DB_REAL=1
$ }' `+ o) l+ o" e/ K7 r      echo $cmd $CMDLINE6 p+ p' ~( z* z$ e3 a+ b, x
    fi6 Q  X7 r: I. l# n
  fi) d! S) ?) H8 F3 f/ {
fi # cmd is timemill or powrmill or nanosim or railmill or pwarc" _! s6 z+ T& F' N0 o, s9 n/ g7 T6 q: p

4 b" a1 R. j) O+ i9 z# B[ "$HAVE_DP" = "YES" ] && [ -x "${command}_a" ] && command=$command"_a"
6 C4 v8 ~- {: x" b/ r8 v8 N[ "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a" ] && command=$command"_a"
' y1 ^! h7 m4 z8 w( ^[ "$USE_ACE" = "YES" -a "$vlog_design" != "" -a -x "${command}_v" ] && command=$command"_v"9 l2 y4 J0 [( @2 u6 x' b7 p; j
+ V" u# E$ }  O2 R; O1 T) r
if [ "$__engine_wrapper_called__" != "Indeed" ]; then( [; C* p* d, J* d
    __engine_wrapper_called__=Indeed
1 W9 ?9 w5 ?; x2 w0 f1 B    if [ "$cmd" != "amps" ]; then
/ X. a2 h& l4 |# `2 u        export __engine_wrapper_called__" B" @6 L9 r' R5 J$ b2 v4 N% E" y
    fi- ~0 b- o" E8 p1 J& [8 \
5 z1 V9 v+ t3 a; s
    trap "cleanup" 0
) E3 C4 }) D$ r8 r    trap "" 2
+ G, F9 ~- @7 w7 s) I; P0 K" W. G5 z6 O
    [ -d "$rundir" ] && rm -fr $rundir, M' J: }: g1 w
    [ -d "$rundir" ] || mkdir $rundir+ O$ V: f* s; V% @

+ }' k" Q" l& @3 [* H    case "$EPIC_ARCH" in! N) q8 g+ a1 ^' f4 a; ^5 D
    *SUN*64)   0 N3 V( |& P6 A/ Z: w5 K
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"- V8 j+ r! o5 ~) |; {
        export LD_LIBRARY_PATH0 I) ~7 p" H- @9 ]3 r, x& _
        suffix=.so
4 {( _1 Z+ Q! ?3 E        ld_err_code=127
! n* W& k3 a1 V; v        ;;# t4 W' _( D3 W, W
    *SUN*4)     n! g" F! H6 i& L& W2 t
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
) r# F, A" t- G5 t        export LD_LIBRARY_PATH. R) V$ Y, y3 X4 }
        suffix=.so.1.0. ?; q# q' K& C9 @* _- {
        ld_err_code=127' S3 r8 p8 G( J+ R2 y/ |
        ;;
" W4 e2 |' b  M    *SUN*5)   
7 D* B. R" D2 V3 g        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"7 {- x3 U7 r* |) i& r
        export LD_LIBRARY_PATH$ ~" g) V5 B( k8 n" k
        suffix=.so
8 P; [- G# p* h. H- T3 `        ld_err_code=127
6 R8 {' N8 a7 z- W        ;;
: h; k9 ~* V% y( N, ]    x86sol*)   
2 O1 [5 ?7 R0 Z$ d  h8 z; u3 j        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"8 a% }% e$ d. K" P2 L- x
        export LD_LIBRARY_PATH
! m% E# N) c# ~- i& v        suffix=.so
( S# `# M2 d: `        ld_err_code=1273 a* |/ [1 g) c
        ;;# r3 o2 ^# B! V+ ?+ \
    *AIX* | aix64)   ( K& D6 m7 P" w9 Q
        # When genepiclib creates shared objects, it creates a import file and ; g. m( s/ H  M' @, F
        # uses timemill as program. So at exec time,program timemill is needed
8 G3 Q+ Y# U" F        # in LIBPATH
- `. `! _  U/ r0 i1 A/ e  f0 Q- Q        $ln_default $command $rundir/foomill
* K, n# c* I% j# N. D8 l( H        LIBPATH="$libpathLIBPATH:/lib:/usr/lib") v7 Q$ Z% ?0 v/ E: J' f
        export LIBPATH3 [: [6 G( `+ W) f9 `$ f
        suffix=.o
( z% y# Q( o0 l        ld_err_code=82 t/ z( n3 G2 O5 `: U2 q! h) ]
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then8 ~; g- e' j& `8 B
          tdir=`echo "/tmp/d"$$`8 d0 G+ d! E- O% z( O
          [ -d "$tdir" ] || mkdir $tdir0 Z5 m- {3 d) ]& L5 Z0 w2 }& }
          if [ -f $EPIC_DIR/libCustom.o ]; then! q: J0 w! t7 E1 R5 z0 n/ X
             cp $EPIC_DIR/libCustom.o $tdir/4 z7 X" v  h  {7 i
             $ln_default $tdir/libCustom.o $rundir/7 _$ v6 l0 r+ \: g& W* K
          fi
. ]7 [7 }" L, `          if [ -f $EPIC_DIR/libModel.o ]; then/ Z4 g4 a) X* T
             cp $EPIC_DIR/libModel.o $tdir/
' Y1 h6 z5 J+ i6 t. O             $ln_default $tdir/libModel.o $rundir/5 \: a$ n( Z+ g6 @& M+ G4 y
          fi
" [1 L2 t7 v# f9 Y, B3 C- F/ C          if [ -f $EPIC_DIR/libFuncModel.o ]; then9 i+ {% Z) ^& e: t7 M
             cp $EPIC_DIR/libFuncModel.o $tdir/9 [! c! [  N+ F! m, a
             $ln_default $tdir/libFuncModel.o $rundir/5 a9 l5 A9 E$ o* }+ Q& \( }: \5 X
          fi
" s: _& Y7 X  F& ?          if [ -f $EPIC_DIR/libFuncModel.34.o ]; then
6 J! m5 [# A' l% O  L0 M/ c0 ?+ M             cp $EPIC_DIR/libFuncModel.34.o $tdir/. v  a" M- t) i9 f- G- _
             $ln_default $tdir/libFuncModel.34.o $rundir/, t7 \& i1 c  N5 h0 c
          fi2 C9 y- a) B6 w  {
        fi2 [* o2 w( M+ \& p) e
        #Set the IBM flag to enable more shared segids( g1 \! B. f/ r" i
        EXTSHM="ON"0 O" B2 S: m! z. ~7 A+ N8 ]( j1 F
        export EXTSHM
& _6 ~8 |* c4 M: X6 R% t        ;;/ e: j7 e7 N: W6 z8 ?  i2 y
    *LINUX*)   
2 U6 i) {  R5 {/ q        suffix=.so
: {4 x! h4 N) y% B( _. {' k0 l        ld_err_code=1
# O$ J) @1 G+ B7 [        ;;% q3 W! t6 c) n4 g; H6 Z- h
    *amd64*)3 `9 S, s6 z3 n. D9 y- J
        suffix=.so
7 b& g; `9 I% S; f3 I" ?# {( s  ]" |        ld_err_code=1
5 K+ d) I; t, r8 A$ I        ;;
0 X0 p* d( k9 Y  V5 x4 I+ }    *suse64*)
+ Q4 k# A0 ~# U        suffix=.so
% r( G8 o; j: s" ]- S+ ^8 f        ld_err_code=1, L4 B: i$ ^0 ~+ n0 s: v
        ;;, ], Y  H1 Q" s- Z
    *suse32*)    & B  D+ b9 ?3 l& u  [
        suffix=.so
, q5 e% K7 Z8 w. f+ m; r+ W        ld_err_code=1. K: c# P. G& J  Y- p3 \& X
        ;;% g  [% g7 q0 t9 Y8 X: x
    esac% w7 {& x8 z# k0 g
- A8 O% x$ H7 N# Y9 |
    [ "$has_custom" = "YES" ] && ulib="$ulib $cwd/libCustom$suffix"6 Z3 S  {% u, F3 K( L0 d9 G1 x% s! J
    [ "$cmdname" != "timemill" ] && [ "$cmdname" != "powrmill" ] \, {* D3 I2 l/ ?
        && [ "$cmdname" != "nanosim" ] \
+ k6 W0 j5 Q! T$ Z4 x        && [ "$has_model" = "YES" ]  && ulib="$ulib $cwd/libModel$suffix"
6 d/ }- x. H- Z' {. r% H    [ "$_VA_" = "YES" ] && ulib="$ulib $cwd/libva$suffix"
! G* ~" _1 J* X. Z1 B  x$ G# D2 F- L/ @  L5 A
#Look for command line option for libFuncModel.so) L% C- b+ @7 R5 e$ R  o
#    user_library_next=0
# u( X$ ?9 f( `    has_fmlib="") s6 k% N% ~! F  ^) R: M0 _3 h
    for opt in $CMDLINE
1 `" ^$ {* i) p; K. o* S    do2 y2 x1 R- M; R
      case "$opt" in
, J5 @7 |6 B9 j- q! ]        -fm)3 X& m& J0 _" {6 ~
            CMDLINE="$CMDLINE $cwd/libModel$suffix"
$ L+ H8 v6 ]8 ?0 `, {5 j5 C$ P            ;;/ @4 N$ P! @: I( y
        -fm_user_lib)4 t& k3 I% ~9 Q6 {, _+ g; A/ ?6 g6 ^
            has_fmlib="YES"( F8 B( f/ P8 H5 N; \9 L/ O% b
#            user_library_next=1* L& d8 J( m2 [7 Z7 N5 T# R
            ;;
5 K  y% O" g/ E# K: \7 X) ?        -xc)
8 D$ ^/ v8 y$ c' S: B  ?8 ~2 B            if [ "$EXTRA_CAPACITY" = "NO" ]; then
1 k* e* @! I0 H' g            EXTRA_CAPACITY=YES
% Z: {0 v0 s5 @7 |* E            fi% D% k3 ?6 H7 ]9 z, g
            ;;& z6 T) c; A% K; \# P& f
#        *)6 ]/ [# q% R5 g3 H( G8 p  y
#            if [ $user_library_next -eq 1 ]; then) A$ N/ \4 j$ Y$ [5 z
#                if [ -f "$opt" ]; then+ V+ V$ P' ^+ B% z( z  A6 Q
#                    libfmodel=$opt
8 B! ]4 T3 z& E1 V) u#                else- s* j$ C' F; b8 ~4 l
#                    echo "-fm_user_lib: Specified file not found"
: d$ b0 B! D! G! k+ f1 S! w. m, B#                    echo "-fm_user_lib: Specified file not found" >> .epicscriptmessages
1 Y6 h: H/ A7 g; H: s& h1 E#                fi
* g7 V* k7 ^* h& s. _+ ]  h6 ]#                user_library_next=0% }  {4 e, N5 K0 u# p% \
#            fi
" D* A# a: j& p" O8 [#            ;;4 M0 T$ T9 R: y6 s' W' o, T
        esac! B; n" i' \" c! ~4 L
    done
/ h; L/ N6 A( a* @! V1 v7 Q0 a" h
    if [ $cmdname = "timemill" -o $cmdname = "powrmill" -o $cmdname = "nanosim" ]; then
  {: [! I8 X! M. p3 Q* d        flib=""
* Z" |" Q: S0 u/ ]5 n; E        if [ "$has_fmlib" = "" ]; then3 @8 `- t" G+ V9 j7 [2 t  B+ F
            flib="$flib `get_epicrc ./.epicrc user_libraries`"9 ~, H) R! c7 N- R7 Y: q
            flib="$flib `get_epicrc $HOME/.epicrc user_libraries`"6 D/ q5 ^6 |2 o- ^& J% `3 w
            flib="$flib `get_epicrc $EPIC_DIR/.epicrc user_libraries`"
6 y; n' d9 S$ \$ n7 V! r4 r        fi
% N6 k$ T- g7 ?$ Q. g    fi
" Q) H( n% E# D! U. p7 L9 q* f8 _8 V1 D7 m
   for i in $ulib( t2 B2 G. Z: x" ^, N* a
   do
* U+ J5 l4 Z* Z9 m       [ ! -f "$i" ] && continue
; B2 Z/ Q5 p" {6 w$ D+ x( n2 j       dir=`dirname $i`; cd $dir; dir=`pwd`; cd $cwd- P& J# S  O! n
       i="$dir/`basename $i`"
. Q: I7 ?8 U5 c       case "$i" in
2 f& e) x; S3 |6 H! [3 R       *libCustom$suffix*)    [ "$libcustom" = "" ] && libcustom=$i;;( x$ f# N5 H! c7 s; u& ~6 B
       *libFuncModel$suffix*) [ "$libfmodel" = "" ] && libfmodel=$i;;$ n8 e  j+ m/ E7 _8 y# l" O* }  p
       *libModel$suffix*)     [ "$libmodel"  = "" ] && libmodel=$i;;1 V9 |) C, j' c+ b, F# M) L, _
       *libva$suffix)         [ "$libva"     = "" ] && libva=$i;;
# }7 m4 s! ]/ J* `! H' Z$ T       esac
( o+ r( f2 m. Y, S       [ "$libcustom" != "" -a "$libfmodel" != "" -a "$libmodel" != "" ] \+ ^. O; Q/ J( t+ z
        && break
0 {- k7 w# z0 O6 a& o9 X$ R8 W   done9 _% V  a5 s, z, }& t

" u+ h/ T1 U% x   # symbolic link shared libraries to .epicrun$$
( |- K3 y7 s- c    cd $EPIC_DIR; epicdir=`pwd`; cd $cwd* s+ y. ~! v7 P  {6 |5 Z& j
    if [ $cmdname != "timemill" -a $cmdname != "powrmill" -a $cmdname != "nanosim" ]; then
/ z# O7 f% f3 s) Z$ G        if [ "$libfmodel" != "" ]; then
8 w+ T/ d( r! a  g/ X             [ "$libfmodel" != "$epicdir/libFuncModel$suffix" ] && \
$ U2 ?' j' o/ m# l3 v# j             echo "Using $libfmodel ..."  && \
/ c( \- X0 f) z2 N" K1 w+ T             echo "Using $libfmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE
. Y$ b. P, s1 Q+ E             if [ -f $rundir/libFuncModel$suffix ]; then
- \) K; s& P* l! f               rm $rundir/libFuncModel$suffix8 ]# E. G0 M0 E) v: S& ?
             fi& x6 Q/ {; k) U; J
             $ln_default $libfmodel $rundir ! G0 d9 }' _( Z2 p9 D
        fi& N$ Q: m0 n( Y0 h! v/ A% p
        if [ "$libmodel" != "" ]; then
8 n3 @2 ?, u; J7 v) y             [ "$libmodel" != "$epicdir/libModel$suffix" ] && \
: W$ C" {) a  z, D5 d0 g1 L  k0 K             echo "Using $libmodel ..." && \
% j2 e1 [9 C2 D) F             echo "Using $libmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE7 }+ d/ u; e+ _1 y5 `+ U1 }
             if [ -f $rundir/libModel$suffix ]; then+ [: V. M2 O8 o& u
               rm $rundir/libModel$suffix
) a, ?5 N% {3 f; `& l+ @+ Y             fi
7 V# A6 F+ n2 \9 M" _1 W             $ln_default $libmodel $rundir 2 h3 P/ y( ^2 [+ k7 t
        fi
2 ]' a, T, R  G+ @4 a! u   fi
& a1 G% j+ g7 u- a   if [ "$libcustom" != "" ]; then
3 d! l1 S- O! s) j        [ "$libcustom" != "$epicdir/libCustom$suffix" ] && \  v2 h- R! U) [4 T6 m
        echo "Using $libcustom ..."5 }& o$ `# x3 d% g6 g7 ^* o
        if [ -f $rundir/libCustom$suffix ]; then
- }* p' x# a: [6 M$ N          rm $rundir/libCustom$suffix) O& ~/ f% z# y( @3 g
        fi
0 `  v, ]# X9 D: h) i        $ln_default $libcustom $rundir
2 t4 R' n  N# I& L, k3 E5 h0 R/ U   fi& s) x( k' Z8 V8 o: v
3 D  Q/ R: o2 ]
   if [ "$flib" != "" -a "$flib" != "   " ]; then
  z% ~3 p% ^4 g6 p0 f4 l; J' D5 Y; l        CMDLINE="$CMDLINE -fm_user_lib $flib"6 O% q. D8 ?, l% M
   fi
4 n  {( k+ p2 Z. `
: e( d; f6 }$ r$ e' a+ J) ]& {   if [ "$libva" != "" ]; then: R: e. b2 {" ?# \2 ~. M0 ?; `0 Q" A
        if [ -f $rundir/libva$suffix ]; then
7 E% l- O* O& A- F; b# C: Z' |3 {          rm $rundir/libva$suffix1 ?  Z1 o' q3 n# ]
        fi
' }" W( c( ?- L        $ln_default $libva $rundir
9 L: E) d8 a: f2 k+ m6 T   fi
; U4 n# u+ p6 y3 a" S! }8 N& Z* f/ s) o
2 M! j* I5 y- H4 `3 w  l+ z5 F! [
    # VCORE design library
6 |7 o0 [/ X3 y  y( ~8 A7 S( y" d    if [ "$vlog_design" != "" ]; then8 p1 d# e0 W4 S) k: \
        $ln_default $cwd/$vlog_design $rundir/`basename $vlog_design`0 B9 p( w% S8 A! D% Y
    fi% Z1 _5 j8 M& b2 g
" `8 |7 R2 S8 v9 _, E) B
    if [ "$EPIC_EXTRA_CAPACITY" = "1" ]; then
& n' f$ ]3 f* M7 a, X        EXTRA_CAPACITY=YES* R: ]0 X# J! z: [/ N
    fi
/ l6 R$ d/ x" N$ ~7 y( m/ A9 I& u" R
0 `$ P" E5 T2 n/ t4 f    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "0" -a -x "${command}_xc" ] && command=$command"_xc"" ]: }% U5 i6 I2 C# ?
    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a_xc" ] && command=$command"_a_xc"; [9 U& i( N6 ?) l
    #Create temp file if dual process is on
" w" t. J; K/ R, ^+ k& }4 M    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" ]; then2 P! s( K( D; M, D' H0 U
        if [ "$EXTRA_CAPACITY" = "YES" ]; then8 W- e9 v* _# R9 v/ c/ D- \6 q
            touch $rundir/rpcidfile
6 y0 }2 n( u) N8 s        fi$ \: `6 R' W  ]# u
    fi# d8 n3 E. n. n3 B3 y! @* ?1 l5 e
fi
* ^2 e! e- m. R
. l, j+ J4 C9 A9 T: B. t% p  frun_cmd()( j' b; B6 Q9 k! i
{
% w  N5 n+ v$ D; e  h* R! J  command=$1
  D; h# e. P, \6 k  shift5 z1 ]  ?# c* M, N' F  R
4 {1 V" |) F) _3 |! ^- b
  if [ x"$VA_FILE" != x"" ] ; then8 _) t) m1 o/ D6 t+ a1 z' I* l
     cmdline=$ARGV# @& J# ]1 f7 x6 F/ s
  else
  ^2 l& G8 z' X; C3 X     cmdline=$@9 `# o! M# G8 {5 p
  fi( w* X; w3 {) c/ x$ z

) J$ D' p! ]! X  debug=${DEBUGGER:+"$DEBUGGER $command"};
) y6 B; o& a' j6 b/ ?/ `1 c' _& L8 W/ V! h
  # To disable Exec-shield-randomize in RHEL3 U3+ when running nanosim and nanosim_a
* z" i0 a' B: W; M, R  # so save-restore may work.& E! Y* v! q& b8 Q$ `
  setarchStr=3 `0 M' c4 W5 N7 t5 _
  cmd2run=`basename $command`" v7 w; x# _: Q% q( v3 }# R
  if [ ${cmd2run} = 'nanosim' -o ${cmd2run} = 'nanosim_a' -o ${cmd2run} = 'powrmill' -o ${cmd2run} = 'timemill' ]; then
; l. k' S' V/ u8 `    if [ "$EPIC_ARCH" = "IBMPC_LINUX_LINUX" ]; then
' X; R  k$ F7 D5 |- K5 `      setarchStr="setarch i386 -R "
& |2 ^5 C# f4 n* J4 o    fi( ], a) b5 m0 M- `- S& d8 N- s
    if [ "$EPIC_ARCH" = "linux" ]; then
3 B$ u( m' h! u- R8 @      setarchStr="setarch i386 -R "( H  G1 m  h$ f' O+ n
    fi/ k; P" d6 T6 n: B) }
    if [ "$EPIC_ARCH" = "amd64" ]; then
* ^3 {9 g7 Q& _' d9 m' `* Z      setarchStr="setarch i686 -R "
6 \, I  l+ E- G/ m- F* Z' z, m. ~    fi
, _& X6 v: f7 c0 T  C  k    if [ "$EPIC_ARCH" = "suse32" ]; then+ |4 r9 |" P4 k) Y. L
      setarchStr="setarch_suse i386 -R "
, a$ t, U, r( B# F* F0 ?    fi
* U; B' y% k2 w' p    if [ "$EPIC_ARCH" = "suse64" ]; then
. r" R- l9 q  X  B      setarchStr="setarch_suse i686 -R "
  G/ S6 H7 ^3 l& g- |% }$ I    fi8 v2 f: o/ q& r$ N
  fi' r, t4 C5 c& b+ ^0 c; Y

, p1 v, E0 F' W7 u3 K  ret_stat=01 B1 p; X( ~2 N; d( @
  if [ -x "$command" ]; then
: s' ~# x, W) t. u( N/ r      if [ "$debug" ]; then
6 q* Z# E9 {( M# c* B        _debug_args_=$cmdline  U  r; H- J# E: X
        . .epic-debug/ z% i/ C) ]( x
      else7 E% v* B7 E% P- b) y
        DEBUGGER=; export DEBUGGER- t  m9 J- I! R9 r6 M" p* b! S* p
        $setarchStr $command $cmdline
4 y2 z9 ~+ l) J, G, a/ L      fi
6 O  s3 E% u/ I9 S      ret_stat=$?
: t. v+ F: k) s' P" ^9 m  else* \" ^+ N& X7 X  B2 e
    echo "Corrupt installation, executable \"$1\" not found!"+ M8 v: W3 o. Y- N: J6 D
    ret_stat=1
2 {* A4 _  G/ U! \  fi( @0 P" i) ]6 G
}# F5 {0 G+ n. l; [+ k2 ]$ ?
; u1 N9 ^  H: q
# keep runing cmd if ctrl file exist# N5 B  e# X& R9 Y2 X* Y5 J

9 j( `  L: D* s& q+ i' O- ]9 Yrun_loop()
8 G5 f2 Q8 w( |, [- B- S{+ z6 w8 Q* d- C
  command=$1
6 i( f- _( m* \) F; t& A- n* k  shift$ G6 j2 k4 I4 d: Q! R1 o  f4 J
7 r4 x4 S& i- r3 P, G
  if [ x"$VA_FILE" != x"" ] ; then3 `- U) P' Z6 e; m5 W
     cmdline=$ARGV1 w+ Q1 d" [8 P9 ~; `4 ]% Z
  else4 S- m; }) X& n% U5 S% M
     cmdline=$@
, s- j* w. A+ l$ r, ~: I  fi! K( }8 i# o9 o- a; p8 r

  ^5 w$ r4 ?6 g% U# L9 l8 z, C% ]  while [ $ret_stat -eq 0 -a -r $LOOP_CTRL_FILE$$ ]; do4 ^' n, H0 G7 t' j) t# \1 ^/ X+ o
    . $LOOP_CTRL_FILE$$
, C; D( C9 U+ t- l% ^$ E    run_cmd $command $cmdline -banner 29 a' f) O& W- h0 c
  done;: v0 R" K0 V& p* n; Y3 _& p  J9 k

9 a. D& ?- k0 h) [" [% B- T  if [ $ret_stat -ne 0 -a -r $LOOP_CTRL_FILE$$ ]; then
, I$ Z* Y( d$ q    rm -f $LOOP_CTRL_FILE$$
0 y+ O, [9 E# Y+ S  fi1 j, b! r( N: [% K2 X8 ?
}
" p5 z9 y, Z& H+ d/ [7 w3 r/ K/ t1 `( R7 X4 l% F
har_check_ret_stat(): z: A2 A0 a. C2 X
{0 C) N' e# R9 M" M: Q- B: k, j
  if [ $ret_stat -ne 0 ]; then
8 p6 A" ^; P4 O" ~: c; g    echo "Simulator returned with non-zero exit status. Stopping."3 {. B- J$ _8 T* F7 N6 L2 l( o9 |! I
    exit 19 T$ }& A- w0 e7 @1 d5 ?
  fi
( V! t3 e5 e/ f# [& j}9 w9 x2 u- k+ @8 P1 a2 Z9 z
: _' c- y3 ~; v8 c
#6 `0 A9 `7 C! K- {) I
# set stacksize and datasize limit
2 ?1 x& q, L% V, c3 ^#* @$ M. H9 ?8 a- O4 I0 S  e+ @# _

; E& {* q: [. ]3 J4 d5 |( Mset_data_limit' q3 _& u0 j4 _% {+ T  F3 ?5 l
set_stack_limit  {- ^3 D$ x* m) {3 }
! `+ \, n5 k4 k" {( o$ S
#rm -f $LOOP_CTRL_FILE
4 I4 `/ n2 M1 V/ ~; N+ B/ j: u: r% t5 _# ^4 y" A- q$ e# z5 V
run_main()" w* Z' w4 q0 C, V  S! c  z
{
; t7 W1 c1 J, c! J, W3 z& W4 s2 k- @if [ $is_special_har_run -eq 1 ]; then& |6 O) a1 z9 l9 W# d/ W! C! h: j
  if [ "$har_ofile_prefix" = "" ]; then
4 f& R+ P1 h$ {9 x" e2 P$ P    echo "Wrapper bug. Notify Synopsys technical support."
7 @) H/ m' K/ r    exit 1
0 Y$ Y" i7 ^  Y! m2 B9 q  fi
4 I3 t& H3 V* f. j# B+ p  if [ "$har_hilo_file" = "" ]; then
6 B+ ^3 V4 V: ]5 B& m( Y4 y    # no user specified hi lo file - do both runs
* ^9 n4 o# b( V7 X, [    run_cmd $command $CMDLINE -har_one -har_setup
) [5 p4 D7 q5 e" O3 X    if [ $ret_stat -ne 126 ]; then) k7 b+ v- M6 ?8 _9 Q7 F
      har_check_ret_stat( h: `, k; ]3 p5 R7 V% Z
      if [ -r $LOOP_CTRL_FILE$$ ]; then
5 L5 l* o0 x$ W# ]1 L& _7 Z! d        run_loop $command $CMDLINE -har_one -har_sim ${har_ofile_prefix}.hl
' q4 b3 v3 }1 y2 G6 W        rm -f ${har_ofile_prefix}.hl
; P- {. M: {; ]      else: d1 r" z" W( G' Y" P
        run_cmd $command $CMDLINE -har_one -har_rmhilo -har_sim ${har_ofile_prefix}.hl0 R6 ^, h' X! l
      fi) H7 u, U1 @" s
    else& \; b6 S5 F+ {
      ret_stat=0% S) n1 S& @7 `! J/ ]! W0 V
    fi5 s* P, }0 {" H0 u. d
  else
& b4 |! M, [6 h; }! r7 A" A: i    # user gave a hi lo file name
& o/ t% A" h$ [8 D    if [ -f $har_hilo_file -a -s $har_hilo_file ]; then6 `9 Y7 u# G9 D) R) K8 C
      # file exists - use it - only do sim run
$ N4 D1 @! G; R% p      run_cmd $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}
* P: t/ k. D7 f      run_loop $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}
" n2 q8 n- P- _" s8 k) k    else
8 x7 _3 o+ T' F. p      # no such file - generate it - do both runs  q, {9 r8 b! D# ?
      run_cmd $command $CMDLINE -har_one -har_fnf -har_setup
7 D; }( E& G7 B1 b      if [ $ret_stat -ne 126 ]; then
5 a; i; O. O2 x+ X1 A" m        har_check_ret_stat
* N. `: B: D9 Z: h- u+ D        if [ ! -f ${har_ofile_prefix}.hl ]; then
& m( _& I; _( N5 p4 l          echo "No hi lo file generated after setup phase. "* v/ C1 d# U0 d: d
          echo "Contact Synopsys technical support."
3 H5 B0 X2 Z9 L2 Z# F          exit 1
0 W, l6 r1 I" \# N" h        else% s) N2 {6 w5 W
          if [ ${har_ofile_prefix}.hl != $har_hilo_file ]; then0 ?& Z% y9 o$ h$ z- x( h% N' l
            mv ${har_ofile_prefix}.hl $har_hilo_file' X( Q0 t( G8 \  M# n4 V
          fi
' ?7 T3 G3 V# y4 w7 N; v        fi: j! v0 X) E5 f8 @9 I; i
        if [ -r $LOOP_CTRL_FILE$$ ]; then; [. O9 p; d: U/ {# r' B/ e% w
          run_loop $command $CMDLINE -har_one -har_sim $har_hilo_file
/ s- i2 o9 L* r4 c1 y& X3 V3 J3 }        else
+ H2 G4 i/ j: _" p7 v" ~- D          run_cmd $command $CMDLINE -har_one -har_sim $har_hilo_file$ s% b3 U3 _" {  {( D5 p9 q
        fi0 _6 G  N8 {+ G/ r$ R
      else 8 A( w% X% @- j8 U
        ret_stat=0
5 _4 q" U! `9 Q) {" B3 n      fi0 C# W. x+ Q8 p4 g- a
    fi
: |( }- W, N/ }+ v5 Q( w% O$ J  fi. j1 M7 e) {0 y0 c
else  
; K* Z0 g. z/ Y9 i8 d9 V7 V& {# don't loop if -har_setup
) B1 I) Q: X1 n* J# x2 m# p  if [ $have_har_setup_flag -eq 1 ]; then$ x' i# w. g9 Y0 J* }  g2 v
    run_cmd $command $CMDLINE  O! ]: z; H: ?! D
    if [ -r $LOOP_CTRL_FILE$$ ]; then+ T0 l" s% l* I! w
      rm -f $LOOP_CTRL_FILE$$0 T& d1 l/ W; A! y, l; H8 W
    fi6 _4 Z$ q2 q5 F" h7 X1 P
  else; F) g; ~- j& c! {! a) X5 x8 H
    run_cmd $command $CMDLINE
/ f) _% `1 z) z7 x( L7 \' n    run_loop $command $CMDLINE& z1 j5 S0 r9 l) q
  fi
/ s- K9 x1 n: Z# d$ \fi
6 y- L7 q$ U' y  U/ f1 m- A7 U! r9 I4 t1 F
if [ $ret_stat -eq 0 -a $cmdname = "powrmill" -a $postgres = "y" -a ! -z "$workDir" ]; then
* v) N- H" Z8 J, ^  r5 R  pwCreateErrDB -w $workDir -e $errFile
- M; M" Q( H2 S- ], m7 h$ f6 H  ret_stat=$?
- {4 \3 C" r2 w7 k9 H7 Kfi
& ~/ Q" A7 |" o# j1 O$ |}
/ N5 a) h7 }( d3 d/ N
3 D, n& I+ p8 K8 ~; ~2 A/ _- gcleanup_alter()( a/ z- V) U. Z
{
3 B0 A2 k) G; I   /bin/rm -f $ALTER_COUNT_FILE 1>&2' h, ^; g2 v2 Z- N" Q3 Q
   /bin/rm -f $ALTER_HK_FILE 1>&2- E# ~; O0 M7 Y' v: u6 b2 ~
}
1 V5 c; _' f( u8 I
$ b) m, s/ @9 X+ E! l#generate alter temp files based on pid
! e. K2 m3 u3 W/ q4 w" l8 [ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$- A4 R  ~: y' s
if [ -f $ALTER_COUNT_FILE ]
  S! T4 I- Y3 w" a) a2 Y: `5 Fthen 5 D( D6 t( Y4 }. j- [6 E
  until [ ! -f $ALTER_COUNT_FILE ]
, f& K0 H+ J; q* L  do
9 D) ?) }7 }6 V  I& X    ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$
$ L& o( o3 h) |0 i0 [$ p7 q1 }  @  done
) q# _. D& J& K& E" A% Vfi
  v+ h1 ], G: f  Y. }export ALTER_COUNT_FILE
# p6 b0 j/ ^& P% }, l4 `" k. X1 e" h4 G, _2 }6 m/ f# ~
ALTER_HK_FILE="$ALTER_HK_FILE"$$  n3 Z- a8 k2 c8 S: Q, t; d9 B* U
if [ -f $ALTER_HK_FILE ], M/ L7 l9 `+ v4 ]
then
  l" N9 p5 i0 q9 w) W! j& r- w) x' w/ V  until [ ! -f $ALTER_HK_FILE ]
, R. a6 j# K4 ~% f) H6 k+ R- l  do! ?4 u# r+ @- I; |& z
    ALTER_HK_FILE="$ALTER_HK_FILE"$$
/ O' n- K) }! u% [. Y  done
) B, e4 \5 u% x  \% v% p% Cfi4 ]& P4 R+ i, P# z* n, S
export ALTER_HK_FILE6 o/ _; S" H0 R$ D2 ]
4 N0 S' p% u8 W" @
#generate monte carlo related temp files based on pid9 i4 b% @- R5 h0 T7 \2 v1 @! L
cleanup_monte()
, |. Q3 b  C" G0 w9 k0 D{
/ g& O/ W0 ?' Y8 K8 z; Z& q   /bin/rm -f $MONTE_IMG_FILE 1>&2( n4 f. r, [+ ?3 T; c, r8 u
   /bin/rm -f $MONTE_IMG_FILE.gz 1>&2
' R# c; Z; y% ?5 c% {  L   /bin/rm -f $MONTE_COUNT_FILE 1>&2
8 Y* g" F; s3 T% F( V3 J   /bin/rm -f $MONTE_CFG_FILE 1>&23 `' Y8 x2 ~. _; c5 v
}: j( x7 G# o1 A( E4 Z9 X

+ @: V* x5 J0 e/ p0 \' v, EMONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$
5 I& \4 j3 y# Fif [ -f $MONTE_COUNT_FILE ]
: n( K# ^7 j( l$ g' fthen: m& `. \" h, p7 a% V# l+ H
  until [ ! -f $MONTE_COUNT_FILE ]
8 `* ]/ U9 b7 c4 K+ ^' O3 k( k5 m  do
" w, M5 e! I  q' y    MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$/ v5 |1 j1 ~3 W8 N9 u
  done
+ a* N! D2 a( _  f1 d3 D0 D/ }5 Dfi
& d3 a* D/ M1 N# r, d$ q4 iexport MONTE_COUNT_FILE. [! _' Y; O5 W2 E
4 U- ~& m. c  A
MONTE_IMG_FILE="$MONTE_IMG_FILE"$$( M7 Y" i; K8 X3 Z# w1 J6 X& M, n
if [ -f $MONTE_IMG_FILE ]
% ]1 ]3 l9 m  Ethen$ s' Y6 t8 e8 |7 g
  until [ ! -f $MONTE_IMG_FILE ]$ q( t! ]1 D$ i8 ?' d" v' u9 D
  do/ Z6 }5 T% [9 Z' ^4 y# S
    MONTE_IMG_FILE="$MONTE_IMG_FILE"$$9 d- a4 u8 W% [3 H+ _
  done
# ]- P4 J3 O6 A+ N; {+ Ffi
( t, y& z4 t, pexport MONTE_IMG_FILE
7 ?3 p, W3 g& k- J4 v4 }. c/ v9 ]  X( W7 F4 c& F  e( @- k
MONTE_CFG_FILE="$MONTE_CFG_FILE"$$
& h6 ~$ s8 i! y% n/ _if [ -f $MONTE_CFG_FILE ]
2 j4 W! g/ H8 E- ~0 f; y) Rthen
* o& w! W9 O+ K% k  z  until [ ! -f $MONTE_CFG_FILE ]+ K! M+ v+ ]) }$ Z& d) w: i1 R1 g1 F
  do1 T# Y3 ]9 ?+ h: H, z
    MONTE_CFG_FILE="$MONTE_CFG_FILE"$$: M4 |* e$ V% k( [2 ~$ u" N* M
  done
" E  K) ^/ O9 X! Rfi
5 E2 K" N2 k) N2 M5 s2 ~0 ~2 P+ b. o& R+ f' S& X6 ^
# main iteration7 n3 B* w1 O" X/ S% D: P
run_main' l7 k% {+ @6 F. O
4 y; S' f) B6 w- [1 @3 S4 F2 v
if [ $ret_stat -ne 0 ]
4 V3 \9 @& e1 G9 c$ Mthen
/ e4 q! E1 x- T4 `  cleanup_alter
, O4 W3 b3 n1 n3 H; ~+ R2 R& L( P  cleanup_monte+ e7 l7 E6 F9 g$ d  N: x
  Exit $ret_stat6 [5 l5 y4 T6 _$ h& a9 P
fi+ d) s5 C  i" K; M8 n4 w* q5 s

  U" w) {0 q3 R' W#Alter related iterations* j9 V+ G: `- ^* B8 M% Y) R/ b

4 f1 P1 Y. O  {5 A; t/ Z( r9 witerations=0
" z4 I' u) W7 @) l& E7 e  `count=0
, X6 q9 G, k+ b5 {6 \0 rif test -s "$ALTER_COUNT_FILE"
; h" J5 a2 O$ K; @& ]- E' Jthen
+ ^# R1 y% X5 T; G7 W$ ~  x) p  if [ -r $ALTER_COUNT_FILE ]; then* r! A5 H5 O$ ~' E. A) _0 C3 P
   exec 7< $ALTER_COUNT_FILE
4 x# A( K  B+ n0 ?# B   read iterations <&7
5 |( E# ?. {! h' ]: I( h; N fi
2 P" A/ O, T* U6 V# O  n2 ofi
. G" I$ u! f( q0 J7 Y
0 S7 d- ?0 A! [trap 'echo Program Interrupt; cleanup_alter; exit 1'  2" q+ R: G* f" P. T7 \+ T
while [ $count -lt $iterations ]4 t+ E; d  w9 u, j/ E) u$ _0 U
do5 r; s; @  M1 u
count=`expr $count + 1`
0 ~1 [9 c: g2 w  Y7 [) E ALTER_COUNT=$count
+ @/ ]- m, s" x, l' W/ V export ALTER_COUNT. W# ?% t9 I1 d0 V

* A. ^9 S( B: D: W' i run_main
7 a+ C' g: W- P
$ b6 U# {! v( I( pdone2 S9 q' n8 l0 \7 k& C# d# P* M

, k/ g- A& ^' Y1 z" ~& F5 p2 J#Monte carlo related iterations
0 n, |" m2 h/ w+ |
/ f- {# M( b; ~2 X1 Zmonte_runtime_summary()9 n9 r- j: W1 _7 ]. ?  V6 H
{
* B3 Q7 n* i( `  keyword_1=real
5 ~" l7 A* P- Y1 p2 U  keyword_2=user
, p9 d8 Y! D0 T# z  keyword_3=sys
1 @! t' f; a6 u' Q7 w& x  ofile_prefix=nanosim
4 ^- c2 ^: a( |( o' Q6 Y1 ~6 C2 t3 S' I1 W4 `  P5 R. s
  if [ ! -z "$o_option" ]; then
2 y/ m& U0 s2 ^$ v) z1 E! k( f    logfile=${o_option}.log6 l; h! \) z' g% X( U- e) D. p& J" h
  else
9 F8 S: O! t, o6 K, w# b$ i5 V    logfile=${ofile_prefix}.log( Y$ [" e6 h- p
  fi
5 H3 o$ {4 r6 }. M& M* y) Y, c9 Q
- B, a0 R$ I; p$ ?! ]! S  if [ -f $logfile ]; then# F7 @, w) o4 J( D+ g4 K
    echo "*** Monte Carlo Total Run Time Summary ***" >> $logfile      
- C( R) n7 v/ [% b! n  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 }' >> $logfile$ o( u/ t% l. Q3 F
  fi' Q. B: V6 U8 a8 C
}3 O) e8 ]$ z3 u4 p& \" \

( F' Y. Y- i9 t1 c1 I  g; w. Jnext_monte=05 R6 Z( d2 t3 L9 ~% J* U
cur_monte=0" {- A& d" c# X. {% l6 C9 {7 q
7 V/ m: Q0 @; k* y2 ?8 a0 J' |
if test -s "$MONTE_COUNT_FILE"
! U, n; z  O  g; s, q4 ]* y1 kthen
- E% ?/ u/ i- }0 ?) H' a* ?  if [ -r $MONTE_COUNT_FILE ]; then
2 u9 X( X1 h7 b( r6 }7 V   exec 8< $MONTE_COUNT_FILE
* V/ _5 b: o2 |   read next_monte <&8- F9 O& ~; Y" R, M4 Q: w0 |
  fi
( t0 s% o, P+ v/ t% ?fi
8 V- t+ D/ j* ^+ W- e$ x+ n( s/ }9 K" }3 _$ R
trap 'echo Program Interrupt; cleanup_monte; exit 1'  2
7 V0 I7 q) \$ u# I" O# Q) Twhile [ $next_monte -gt 0 -a $next_monte != $cur_monte ]" ?. G2 N/ |3 s, Q1 j$ i" e
do
5 ^0 ^1 T' Z" K8 N( T  NS_CURRENT_MONTE_COUNT=$next_monte
5 `- w1 }3 W% _2 Y$ N+ e  k  export NS_CURRENT_MONTE_COUNT
) K. G! ^* s+ o$ O' v
: t- D) |7 k' T" d  echo "restore_ckt_state save_file=$MONTE_IMG_FILE" > $MONTE_CFG_FILE) ~, t3 U4 ~. ]- b) j' r
  CMDLINE="$CMDLINE -c $MONTE_CFG_FILE"
9 f" ~/ R7 O( e* ]  run_main9 ?# z  j" q5 e
; U8 H2 r8 }* h- M9 `0 ^3 C" G
  cur_monte=$next_monte, ~$ Y2 X. v3 j1 [
  exec 8< $MONTE_COUNT_FILE
0 l0 f: {9 _1 d  _) h$ t  read next_monte <&8
4 [) }  |& b* j' {2 c" _& gdone
" F! y+ _9 Q; f+ i9 F, B& e/ h/ h6 t6 U: G0 [
if [ -f $MONTE_COUNT_FILE ]
3 w* w3 r% g; s0 a# m/ cthen* W  v# G* y2 m' m* w& Q3 r
  monte_runtime_summary/ M; ?& w/ t$ n
fi
  d4 E0 O- b; |( |9 J6 h, J4 }, O5 F! |' b
cleanup_alter
. q9 j0 K% |0 L0 r/ Ccleanup_monte
# \6 }. ~* w/ W+ t
/ M! g; G) x6 F7 S6 `Exit $ret_stat

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2024-6-16 05:52 AM , Processed in 0.172022 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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