Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-5-6 13:58:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10Chipcoin
各位大大好:) v+ Q; p6 N/ S* d* J
                      小弟執行nanosim時,卻無法跑出視窗來,有個錯誤可是我不清楚該如何解決?問題如下7 l' Y" K* k, V4 J6 G: ^+ p* e, ~* f
                      [: 113: 64: unexpected operator
- X( V0 Q1 U8 L0 `/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim: 1: Syntax error: Unterminated quoted string% O9 P  c( I/ D4 `. ?
有大大遇過這方面的問題或是指導我方向去解決, 謝謝.
1 ]- C+ F% ?9 N6 V( N我在猜可能是這個檔案內的文字需要修改 但不知道該如何修改?
8 [7 `9 N) ]& k1 o' o& @以下為/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim 的檔案內容:$ Q  c0 U. [& E0 f) k, W
    #!/bin/sh5 d! }2 ?& K, n& j0 ]
#
7 t/ R9 l% e1 \( a4 X# Copyright (C) 2001 Synopsys INC$ w! w2 e" u; a2 D6 m
# EPIC Dynamic Simulation Wrapper (DSW)* Q9 S6 ^' z, v2 w9 i
#" V; O* Q7 f5 v/ a5 ?" ?) E; v
eval ${DBG_EPIC_WRAPPER:+"set -x"}
2 h" f, ?# t) E" V3 e* I) p" {4 i! g+ {4 k4 Q
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then
( D6 Q$ m; R2 s4 D% @, E, i  D3 {7 C    TEMP_ARCH="$SES_ARCH"  p5 o. p7 z5 x& e7 v* p
else" S2 S, s# B9 r: G( j& z- A) j
    TEMP_ARCH="$EPIC_ARCH"
+ t, E/ t. m$ R( o) efi
! f; i* \, i" s" ~. Z- g; M  `  w( l- K" q1 i* s+ T6 ]
scan_for_hva_args()
+ T! J) r* H9 V7 I9 V: {{& x2 B% T9 p$ X& Y) O1 n& L
  /bin/rm -f hva.init 1>&2
- e& D6 F# c6 L! p1 V$ u  while [ $# -gt 0 ]; do2 z- C2 D2 y: Q
    case "$1" in
$ ]; I+ l( ?7 b8 U/ _- n/ Z      -vaf)! U2 a5 f: _  Z6 `9 z" b" N
           have_vaf_flag=1* J/ a' Y  Y! N" _2 I8 F# a+ x
           have_va_flag=0; j( p1 P  t! E9 e5 h4 r2 Y
           shift;
; J( N) o' h/ d$ W; ~9 y           continue;4 v2 ]7 n$ _% F" k6 M* b1 e/ M+ }
        ;;
( l* K- W( D% f+ m9 D  J7 U      -va)
" {+ P+ Z% ]! j8 g           have_va_flag=1& R' c; O2 d+ G1 S* C% _
           have_vaf_flag=0
# _0 g6 ]$ `) N8 A+ u' M           shift;& B1 e* j: _7 D8 y5 e
           continue;
8 T: o5 f, s5 i: f        ;;
) W5 a' f- u) ?+ @! O. c6 C' ^& I      -*)
$ P* ?* E( _9 e$ P* X( t3 ^           ARGV="$ARGV $1"
, J; ]* E% _6 |$ N# J4 A           have_va_flag=0
1 {# S# l3 E5 b* C: e           have_vaf_flag=0
5 F3 d, H0 k- Z: [' O* i           shift;
+ c: F5 ~' t( G4 |( ]           continue;3 z* t! W* v: W, k% A8 }! c9 O
        ;;
  |" j  M2 u* A; X4 Y, H8 H# M      *)
5 H3 [1 G- C6 U; ]- e. o0 H% v9 X           if [ x"$have_va_flag" = x"1" ] ; then ( z& M8 i$ x8 R5 D( _4 j0 N$ A
              VA_FILE="$VA_FILE $1"$ F8 h1 T/ }9 \1 _5 Z$ A
           elif [ x"$have_vaf_flag" = x"1" ] ; then * |' E( K5 l5 h
              X="`cat $1 | sed -e '/\;/d;`"
+ A/ S/ ^* Z/ Z! C1 p              for token in ${X}; do
4 _2 q& l5 t7 c, G0 J& M                 VA_FILE="$VA_FILE $token"6 c. T$ a6 Q% L) C6 ]
              done ; W) v3 v/ V9 p3 p' b$ K$ m
           else0 `- a8 |9 s6 b: \/ P
              ARGV="$ARGV $1"; |: o4 a2 [/ ?: s; E+ O' Q4 P
           fi1 s) f; t" ?' Q, e) f+ z: t
           shift;
8 b1 J! P& b# S$ m! A, i        ;;  v& ^* `7 _, b$ M  \. c
    esac; r* E  c9 G$ h
  done
, `  H& m' N' m
, {+ r! P2 D- O+ x( V" Z  if [ x"$VA_FILE" != x"" ] ; then
+ }3 c/ {) n3 a9 [* X##     /bin/echo " xxx ARGV $ARGV"5 b, V' S9 R8 N2 ?! A0 s
       /bin/echo "choose nanosim $ARGV ;" > hva.init8 o- n2 W) u3 f2 K8 G0 S
       echo vcs +ad=hva.init $VA_FILE -o simv( q) k! f4 Z/ |3 H9 u& h
       vcs +ad=hva.init $VA_FILE -o simv. J! f8 D8 B, k  p- T& k; Z
       exe_status=$?+ g% N& J) O' Z2 F  C+ F
       if [ $exe_status != 100 ]; then
9 w" j, l3 c- j: Z; ?          /bin/echo ""
5 |6 f) x+ g. x, A7 d/ O1 O& W          /bin/echo "ERROR: Execution of vcs exited with code $exe_status"
/ c7 G+ `% n* M6 j& j9 G! N          /bin/echo ""
/ S/ n; A* G& P# z5 y          exit $exe_status  T5 q' X: p: {' M; j8 Q# K
       fi- w* _1 T% G. |6 @7 i3 ^
       hva_files="-n simv.daidir/amsVD.ntl simv.daidir/amsWRAP.spi"
4 r3 m7 |. q- A7 [       ARGV="$ARGV $hva_files"' p# k  C1 n' w" N2 X. \
  fi
; ]- |# N0 p( T( |! c9 `}( ]# }; t, ~* }8 p/ Z- V
#-------------------------------------------------------------------------* Z+ u5 i( G5 F+ _  Q

5 ^  o) m1 j- t4 k" |' g8 z. ?cleanup()$ e9 y, ~1 I5 n' _1 |
{3 K! R. h+ P3 M7 R
    if [ -d "$rundir" ]; then# d" h9 r" ]! V) u" S
        # On AIX, a .nfsXXX file is created if libModel.o is removed: V) O  Y* }' Q9 _" V
        # so .epicrun is not removed because directory is not empty.
6 [4 a0 y9 ^- d        # Solution is to remove it again if the first rm failed
6 A7 o" u/ D, S% @/ j        # (rm -rf $rundir || rm -rf $rundir) 1> /dev/null 2>&1
8 W) a0 A4 |1 B2 Y) g        if [ "$EXTRA_CAPACITY" = "YES" ]; then6 I" f' K. }) F9 q) K
        chmod u+x $rundir/rpcidfile5 ~3 R9 j: v- K/ h  L# d# w5 O
        $rundir/rpcidfile! O- Q4 M6 u2 d& C9 H
        rm $rundir/rpcidfile0 [: t; T( g, h) Z% l/ y6 R( D4 D0 Q) V
        fi6 n1 n8 h: Z/ X5 C( s2 R5 P
        rm -rf $rundir
$ h: J! n4 F0 {  ^' O% ?3 z9 F. }) b8 z: [, }
        #Due to NFS problem, we have to copy files needed to
$ `) j7 E5 T/ \        #/tmp/<temporary directory>, then symlink's files0 W# c/ N# s4 I+ j# x3 d
        #to the local temporary 'rundir'. This avoids the problem
, n$ m3 q$ p1 r! p+ y        #to remove 'rundir'8 |6 _$ M1 ^. }. Q9 P. z
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
7 Z( o1 j3 j# i6 {- M: l" {          if [ -d "$tdir" ]; then
4 i4 y2 n4 ^0 _2 }- l) \            rm -rf $tdir
$ R6 L, V7 b$ b4 P! j" V: ]0 a% A5 D; a          fi
' I3 W) E0 H) v% b9 z        fi
' }& _  l- @) R, p$ H! f% J    fi
( r- o5 G9 L7 {, Z0 h% j' t    if [ ${exitstatus:-0} -eq $ld_err_code ]; then3 o/ L! B8 i# N2 a+ g8 _
        [ "$has_model" = "YES" ] && rm -f $cwd/libModel$suffix
" o7 O0 x  z! h- Y6 }% @1 K, B- X; X        [ "$has_custom" = "YES" ] && rm -f $cwd/libCustom$suffix
! z5 N7 W% a4 U* [' Q    fi* }( j2 P) x/ T, \4 U; S
    [ -f "$EPIC_SCRIPT_MESSAGES_FILE" ] && rm -f $EPIC_SCRIPT_MESSAGES_FILE 1>&2" k& H& U, p/ |# @3 f2 k1 J
    exit ${exitstatus:-0}
  N$ }5 z6 |; e; b}
% ~6 G- R( O4 m
# D: c( {/ @- N0 UExit()) P0 K/ N: U- b% ^3 P  Y& L* p  }; M
{# ?- K$ `( O& s
    exitstatus=$1
% _4 u" [+ l" [: q+ F5 x    exit $exitstatus+ W& o2 i+ a) @' C
}
& ?: ]! A4 W) O- g* |/ h" i$ k( k1 ^* P4 L9 h, `. [
# get_epicrc filename keyword
- X& G% T, S$ T! d% K, x& rget_epicrc()
& \' w5 o6 x7 q/ l5 ^( x8 h  B{
* q$ E; u% k& O( ~2 E3 U    [ -f $1 ] || exit 09 G( ]: B2 N; w4 o! O. k' z
    key="/^$cmd2:/{print \$3}"
' h5 W+ E9 L% W$ z# H" g2 B    awk -F":" "$key" $13 q6 o, i1 {$ d* ]% I$ o* Q
}& b9 e6 F4 J, p7 a% N" t

' I" V- B/ B3 r% ^. F+ C$ {! c#
5 S( O; X  C( h3 \# set datasize limit to hardlimit& C$ N, v1 j* a: L2 P9 D' q
#  g/ u/ B" D5 r, p
set_data_limit()
8 ?6 D3 {! }, d. l8 b4 _{7 b( n9 u* I7 H7 X7 e
    dbglimit=06 u' ^  }# O9 b0 [
    hardlimit=`ulimit -Hd`
2 ]  F2 c8 D* ~3 G8 {+ T    softlimit=`ulimit -d`6 L. U0 R. \) I4 R
    desiredlimit=3500000; Q2 N5 r- T/ `& _+ K( T. v. S4 Z
    hardisunlimited=0& i3 k5 H9 _9 }+ r8 }  b
    softisunlimited=06 Y2 ^2 [4 H# k; a3 Q+ s. [
    is64=0- U1 Y& N3 A6 Q0 k. M4 ~" o

! ]1 [' J8 I0 T( }# e4 l    case "$EPIC_ARCH" in
0 [: V  x3 r9 ]2 W! k: }4 Y8 z! [    *SUN*64)
, H% Y& l$ H, ?6 ^5 T( G        is64=1/ h2 M: c# j$ _. N$ |' m# ?
        ;;
3 r, _4 g* u  L/ H' c+ e2 c    amd64)! v9 L/ j( }6 I! A  Y
        is64=1% l7 Y0 {6 w# l4 G. F
        ;;+ Y, y( Z7 j: M5 Z: c$ ]4 ?  M; f
    x86sol64)8 @( H! U/ U! ?$ X: @  g* b
        is64=1
: `) m" q2 }& o        ;;: l: F: I7 L  N- v/ d
    aix64)
( C/ }1 N9 B% ?; `6 E        is64=1
: L. i; C% G$ z3 ?! I, S, h7 }6 X        ;;
6 _4 ?9 [! E: I" U, f    suse64)) r! L+ t+ n7 ]
        is64=1
2 t* G' k" l' `7 l        ;;  c4 v1 I. c% m+ o2 p. z" m
    esac
7 B; Y( m+ [: U$ K, S$ o, H) ~) g. F
    if [ $dbglimit -eq 1 ]; then) O3 F. C, f) K  ]
        echo hard $hardlimit soft $softlimit
" C8 ^9 M$ e& ~5 S$ u; _    fi' P2 O/ U" z0 D% z- L6 t7 A) _

+ b4 O* L, f; i3 m& L. y    if [ x$softlimit = "xunlimited" ]; then# W3 O) F2 H6 X6 m* O0 ~$ `4 `' n, `
        softisunlimited=14 ~3 [& C5 g) R. W6 B2 X& |7 b
    fi+ ]0 _% |( D5 D4 }/ g. S7 Q
  [# ^- e2 `' I) d5 t/ J# G2 h
    if [ x$hardlimit = "xunlimited" ]; then
( }3 {7 [  y' D4 `) B# |# }% x' H        hardisunlimited=1
* ]8 A, l' V0 J# \! |    fi
' ]' ^: R# O8 q# [8 K
& I- ^6 g. \, J1 i; Y$ x# B% e    # 64 bit machine should have bigger than 4G
. C) E- N' N  o. H* U    if [ $is64 -eq 1 ]; then9 b- \8 j( `8 f# m" m
        desiredlimit=5000000: S  m5 \8 K* T3 A7 f0 o
    fi! G' ^& \5 I, U6 v' q+ u
' a/ j! ]# z/ O  R
    if [ $hardisunlimited -eq 0 ]; then
3 z4 k& v& m* E! I8 k# j$ q        if [ $hardlimit -lt $desiredlimit ]; then" L; Q* g- u8 J% \
            echo "WARNING: datasize hard limit $hardlimit K is too small."
: j5 Z2 K; k1 ~& p+ |8 _* s        fi
( x# f5 W4 K3 p0 J; `7 X# i  Q2 P( U    fi; [6 m) [- R4 N; O4 h: y

& F  O! J; i% ^$ K6 z    if [ $hardlimit != $softlimit ]; then
: W. V: i; C/ n7 ^6 Y        ulimit -Sd $hardlimit( I  S+ e2 }: k- r
#        echo "WARNING: datasize limit is set to `ulimit -Sd`"4 h; ]& }; Q) w$ Q( Q% @
    fi- i5 H0 Q" X4 H2 w7 X; Y

) J& u' q, d' ]* ?7 r0 \    if [ $dbglimit -eq 1 ]; then5 T; W9 N# o8 W1 o( R% S3 V- P
        echo datasize hard limit: `ulimit -Hd`% W7 o5 j' U8 U2 g% N4 h+ y
        echo datasize soft limit: `ulimit -d`/ `% c( g; ]9 [9 d( T: c# v5 H& z: h
    fi
0 n/ ?0 O6 V: Q. y! _& u}
' a% s& N( f% s0 c: i4 u+ R: {8 _/ y+ c( b" l* z
#
8 Z  @" S1 s* v$ L3 b* |) F- W- w# set stacksize limit to desired limit
. t6 {, @# n6 M8 G  ^; W1 \#
/ N2 w' G( ^/ Oset_stack_limit()' _9 N  x% E9 U! i! k1 u
{
) T$ X3 S. w9 Z( y    dbglimit=0
4 e2 m! W. S3 U8 s    hardlimit=`ulimit -Hs`
" J' X4 p4 r- D& Q: I" Z/ ?    softlimit=`ulimit -s`0 k  [1 o2 n2 E6 B3 o
    desiredlimit=60000
( Z1 H# H5 X" R% `/ u& C8 B    hardisunlimited=0: @* x4 r  h. z$ a
    softisunlimited=0
' h1 Z; `* t" y: e& s    is64=0
" d/ J& i- ]$ s* `9 w+ D4 a1 F2 s1 b  d; V. @5 \0 Y
    case "$EPIC_ARCH" in  ^' y' U- B8 j  O# u* ?
    *SUN*64)" q* G3 f/ i3 Z. `
        is64=1, K% d  n/ B( N7 [& P3 \$ W
        ;;
0 d9 `0 r4 g# }' f! o2 K. e, U& ?& g    amd64), z$ J& L7 D9 p7 b4 K+ L
        is64=1( v# f2 }$ d$ P5 m0 I# B
        ;;8 ?# o% `: Q5 _, `! |# [
    x86sol64)4 d) t. C* ^) C! V$ [4 Q! G
        is64=1  `2 h( [4 l- {, e) W: u7 N) Y
        ;;
  [3 |3 X3 B1 M6 r% y) ~2 f    aix64)
. |- X: r* }7 U+ X- W        is64=1
+ o- s" q: g. j3 }        ;;7 F" f$ k) ~2 O- `% D) Q2 O
    suse64)9 S3 s1 }+ r% m1 A4 V# @
        is64=1" F& X6 ?! b7 V0 ]- y$ p1 b, U" S# I
        ;;
" ~$ |% k  C! E+ p    esac
' D' t0 i2 i  l
1 o7 L9 P9 C, x9 \( e' Bif [ "$EPIC_WRAPPER_DVLP" = "" ]; then4 v$ g5 o; D% g8 g
    if [ $is64 -eq 1 ]; then
. b# n7 b: @/ W% I. |; Y        desiredlimit=200000
: a4 ]7 o! I4 ^: k* A# d' v    fi
% }- H" N6 B' H' M/ c0 t4 N, Welse# \' n! o  Y3 }1 T) M: J9 D  j# t
    case "$EPIC_ARCH" in
( E9 u' g; j5 p& P, W1 S    *SUN*64)2 U3 _$ `, Z# Y1 o
        desiredlimit=200000' [2 g3 W* R% M0 N  F
        ;;1 }) I% Z4 |9 x- ^
    esac8 |6 F2 g0 h4 p% D- d
fi3 w/ D2 g# J5 |4 H( @/ ~# h
        # `5 P' L5 o5 V* \  H: N9 `
    if [ $dbglimit -eq 1 ]; then
8 M5 L4 d5 x7 D6 @5 ]/ i$ K        echo hard $hardlimit soft $softlimit, n4 u+ _( c+ G/ t
    fi8 g* [+ n" w3 i9 b, @& k

5 e) V3 W. H% t# }7 I3 W# n    #stacksize can not be unlimited, pick smaller number
* |! f% v7 {, H) e- L
5 o; o+ d# s5 N. }8 d0 r    stacklimit=$desiredlimit2 l$ Q9 k9 H) I7 z, s
  A4 F2 W+ v- C" p8 K
    if [ x$hardlimit = "xunlimited" ]; then
) x) p) }9 v. ^        hardisunlimited=1. `1 e( l4 n1 ~: o2 T
    fi$ Q2 @3 u8 }7 }

/ i; t1 h0 B4 h/ o5 ?+ z. }& T/ \    if [ x$softlimit = "xunlimited" ]; then
$ {8 B# n) S  @  |! B        softisunlimited=12 J! o5 y0 S8 k( G$ K& ], Q
    fi
1 ?; g" u1 B: N! W8 D8 C, U3 {- a8 }9 A: q
    if [ $hardisunlimited -eq 0 ]; then
" r% z4 D/ x( _        if [ $hardlimit -lt $desiredlimit ]; then
% c0 g* {$ |% c& s+ v0 G            echo "WARNING: stacksize hard limit $hardlimit K is too small."
; O2 K: N. b6 I" Q$ z! j! S% _% n  R            desiredlimit=$hardlimit
7 [2 {! q. g  u            stacklimit=$desiredlimit9 S5 N! b0 }8 {
        fi* Z) r2 a7 j* X& M
    fi. X" X9 C; v$ y( Z' ?
6 ^  V1 u6 R# y0 a' k
    # desiredlimit is set to proper value (< hardlimit)
1 H" l! d! \5 T5 E
) H: V& b8 M2 [' v+ h; b! F    if [ $softisunlimited -eq 0 ]; then5 {$ Q7 C1 G* j4 Y: ^' N& U
        if [ $softlimit -gt $desiredlimit ]; then4 m/ I' U/ A4 a8 {  i
            stacklimit=$softlimit
# R. a! I' O% N0 Y( I, P" N        fi
/ L) ]( n" E" L    fi9 z! K" o4 _" J2 v. ^

- w" g6 i% ]) G    if [ $softlimit != $stacklimit ]; then
* I% h# C4 _4 W2 @' X1 b# V# u        ulimit -Ss $stacklimit! c$ J) C  d! z7 K7 ~# P) R
#        echo "WARNING: stacksize limit is set to `ulimit -Ss`"% _8 |9 {* a/ Q  o0 h, J
    fi
7 x0 a: ?' W! P8 [" X( v1 m& o! u- y0 `, a
    if [ $dbglimit -eq 1 ]; then. f+ o6 M8 q  p* d1 k
        echo stacksize hard limit: `ulimit -Hs`
; w6 j' g% ^/ |5 @$ {3 ~        echo stackize soft limit: `ulimit -s`
6 s+ ^4 r. J" [2 l- o    fi
0 \. N) F" u) e  i  u5 J  o7 s; E}
* _7 {( ~  @8 t7 W5 n  \& C
- s# k& O7 G% |: Yopen_epicscriptmessages()
* @7 t1 U- @- ~{
! [% @4 [  z- Y' @& [. O#generate  temp ".epicscriptmessages" file based on pid: n) Q* F/ j1 m1 \  \% r
EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
8 f1 [7 Q5 }1 T- a: I' `1 @; Mif [ -f $EPIC_SCRIPT_MESSAGES_FILE ]; l' C, l' i( w1 [, n
then
- i8 k' ?( D2 H* R% G  until [ ! -f $EPIC_SCRIPT_MESSAGES_FILE ]7 M" u2 Y( x# ], E, I5 N& ]+ T" Q
  do
: L# V3 {7 v* k6 ?0 R* {    EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
+ A/ X) P7 G, K8 G7 h$ Y  done/ c( ^, n  `( s& z7 D3 M: ^
fi/ p5 O1 Y: c/ p# a
7 s8 [! I- n0 f( {  P
export EPIC_SCRIPT_MESSAGES_FILE% {# h$ n' K& {1 j3 \6 O
}
4 J( \. s* _; u+ L; J! r
$ F: W$ z" b- s% ?$ L  Q9 {6 f6 a! u9 Y& `1 f
cmdname=`basename $0`# |! N8 B6 ~5 B, L/ [* Y
postgres="n"
4 n  s2 r$ S1 Y6 ]; {$ N9 P6 Fostore="n"
/ X- ], ^5 F: Egui="n". \/ I& B; N3 O2 U& |/ ]
databaseOn="n"
: t& L3 Z# Y% l" J7 g7 f1 Nf_next=02 L% \/ n  p7 e
f_option=""7 `' M; p0 ^4 r
o_next=0
3 }) x1 Y5 s. g4 k- Go_option=""; C2 H$ U1 F+ }3 {% z! C0 `! i5 X
workDir=""* ]6 ~  M7 ^5 c" s+ h9 S
workDir_next=00 a9 k2 T4 z* N$ q( \' ?
errFile="powrmill.err"
4 V; I4 b2 @. [4 Zwin32flags=""! B, N6 K' l' P. T& z
ln_default="ln -s"
+ Q8 G! U4 Z9 K! a# W5 a3 A
# f6 |- o1 h( Z5 p; W, ehar_hilo_file=""0 T5 h$ W! ]# Y; |9 z5 C7 ~+ s* o9 i
have_har_flag=0
8 c1 ^, }+ s% V7 Fhave_har_setup_flag=0
/ m3 `5 ?- M/ q3 H& J2 ~0 Iis_special_har_run=0) p' o3 ^" H( I3 A
har_ofile_prefix=""3 W0 ~  J8 o! L, m- e  r' x
9 _' S3 S  W, c9 U5 T; L
have_va_flag=0
( y9 [/ e; p& Qhave_vaf_flag=02 Z- _% X0 F  r& D4 p8 z1 R* y
VAF_FILE=""
" Q! m) W# _( t- q. R( CVA_FILE=""
, u8 x% Y2 X% E$ U. J' QARGV=""
& W  k. X. F1 f
# H; d% t; Y, K$ i0 W2 b) w0 u8 AORIGINAL_COMMAND_LINE=
/ ]; R  Z$ B% ?: U: q! H/ OLOOP_CTRL_FILE=".ns_ba_env"7 C+ V7 N$ `. _* i
ALTER_HK_FILE=".alter_hkf"! @7 T) r4 ]" e& L* R
ALTER_COUNT_FILE=".alter_count"
' C5 L, D/ o, K- nMONTE_IMG_FILE=".monte_img_f"
( R) R  e7 F' \" D  K1 u0 A; TMONTE_COUNT_FILE=".monte_count"5 |" T( W" \8 f- O6 M  w9 o: A
MONTE_CFG_FILE=".monte_cfg"
4 J& \1 \1 ~- h% @4 \EPIC_SCRIPT_MESSAGES_FILE=".epicscriptmessages"( o2 {* C3 C. Q# [( {

( i8 l* o1 e9 ]. S2 Z/ Kopen_epicscriptmessages $@0 B& i' ~7 s# d% z" B7 [8 k) {

8 z$ H% Y7 j3 c5 U. t) ~; Xscan_for_hva_args $@* k, w  D/ Y: E: C

% j0 X1 N& `' f; s# @: xscan_for_har_args()5 P2 l/ ]; a. ~; ^7 H; {3 V
{
+ ^7 e( |4 I& P/ d  while [ $# -gt 0 ]; do+ r" r+ g6 A+ K% b3 K; I1 H( F+ F
    case "$1" in  i& L! _& P1 Q
      -har)
3 A3 }2 W: @$ {" b           have_har_flag=19 l. y6 Y1 `, D- l3 `5 q
           [ $# -gt 0 ] && shift
; x$ h' {7 R1 j, U9 c9 H' ]           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then  U, B+ i) ~9 }* ]
             har_hilo_file=$1" @8 o; E0 c# z9 j
             shift
3 k* Z3 ?, @' N4 ~4 P& [" R2 R. @           fi; O$ {+ M/ F  [' ?
           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then: p9 z; Y0 g4 `" S- u; X% s7 i1 C
             echo "Too many arguments to -har flag. Only one hilo file allowed."
  H5 `2 D% M+ z! ?2 B0 j             exit 1
- ^, t3 ~( y( R) y) ~3 L4 H* Y9 O           fi- E: B/ K5 Q* N+ _% s: n# F. o) O
           break
" R% c; d6 X2 I8 K: ~3 h2 q        ;;6 ~: x  P: @+ F; a5 I. ~- A2 |  J
      -har_setup)
5 [2 F5 u  a9 ]! v( y. |2 }8 R, c( q           have_har_setup_flag=1+ i# h5 d9 k& D# O/ b
           break
# ?0 B, K5 d" O7 {$ A        ;;8 }0 s5 \! p& J- C
      *)5 L- K9 _5 B- F3 U- O2 u: @
        shift
5 v+ t6 L" _! u' ]2 H+ W) K3 W        ;;  @* C9 V% D* v4 o
    esac$ ^# c. a$ g; o
  done
! ^7 e& _$ `. h; l5 x}: ~5 M' X" O5 i$ p% F

2 U; R* Y9 V& X$ B  t  L! C" Jscan_for_har_args $@1 O$ Y# K. w: L) x& X9 o; H
/ k- X7 u, \( d1 K! O" c" @
for argv in $@0 R2 t9 E/ ?, I: \: U4 W
do, \  T( o, }. K
   ORIGINAL_COMMAND_LINE="$ORIGINAL_COMMAND_LINE $argv"; B% z* P% U" u* `/ X6 H
    if [ $argv = "-gadb" ]; then
9 C% I, u/ ~; ~' X0 f! @$ W" ?8 |( l        databaseOn="y"- `6 c" [) U5 x3 Q/ Y- U- H7 o
        workDir_next=1( Y9 e; C; C5 O, {
    elif [ $workDir_next -eq 1 ]; then' l; k4 z3 x) {4 r& ?
        workDir=$argv, W# ]) Z5 C6 X! ^/ a" o
        workDir_next=0( B- l2 z" t7 W0 _* I5 ]( @/ ^
    elif [ $argv = "-ga" ]; then
5 I( H1 R2 N2 E7 M, Q( w6 U        gui="y"
! v8 Q  w. Y4 [0 q9 [$ O# o8 F    elif [ $argv = "-f" ]; then" E/ t3 ]( P; Z
        f_next=1- t1 @4 ^" O5 m8 q8 s. a" g1 B, z
    elif [ $f_next -eq 1 ]; then& z7 J5 c0 f2 z+ |" K9 g
        f_option=$argv
, G: V! _7 j( ^0 r        f_next=0- g$ Q4 {2 F7 P$ P; |6 {
    elif [ $argv = "-o" ]; then5 G9 b3 Q' n0 p
        o_next=1
4 Z' ^; Z0 f( S* l0 X1 f; p    elif [ $o_next -eq 1 ]; then
0 n: j7 v/ H, Y2 r( ?        o_option=$argv
: ~( y6 N1 C. G4 B  F+ s/ c        o_next=0
# O. D  W2 S/ O1 K    fi- Z$ [4 Q9 M# O3 L9 I
done
: Y3 b. a; b; j7 t2 u: A; cecho "Command line options: $ORIGINAL_COMMAND_LINE" >  $EPIC_SCRIPT_MESSAGES_FILE 0 C+ \2 a' r% ^+ o  B

. Y7 c7 I" d, W9 rif [ $databaseOn = "y" -o $gui = "y" ]; then  x$ d. o% @3 I) n
  if [ $cmdname = "pathmill" ]; then
  z) L5 S9 f# f( z4 K    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5"  -o "$EPIC_ARCH" = "SUN4_SUNOS_5_64" ]; then5 F% ~5 @2 o. ~7 z+ A: o, B
         ostore="y"* M1 E! v' J# B
         postgres="n"" {$ D" x0 t, J" t0 z# g, D+ i* x
     else
+ ^" t; ?; R6 R5 A/ y$ d/ O        echo "athmill GUI is supported on Solaris platforms only" 1>&2
9 [4 \3 Y5 c. o6 P, r4 t# K+ b0 p' `        exit; c3 N( f# L6 |8 M3 S; |; L9 q- f
     fi7 \2 f8 M2 {! G
  else
) {) L( h2 F6 m' L8 V    postgres="y"2 A7 [3 N' X; n
         ostore="n"
+ o. q, i% {) m8 \# R$ i; R4 x  fi
* h* l' U1 h& S) [; U1 U0 rfi# K  {5 P$ q+ j
" S) z1 o9 u$ ~2 O
if [ $gui = "y" ]; then6 b& O9 n. D) }# f9 E$ w
    if [ $cmdname = "powrmill" ]; then
  R+ R$ L1 T  M  H        pwga $@5 O! M: ~% N7 A1 Y: p9 n) v
        exit6 g) q" {5 g; b2 r* z! h
    fi
  n4 _  a0 Z! b+ [ 8 G( v5 E" ]& f; W
    if [ $cmdname = "pathmill" ]; then, B' r3 \" [5 z
        if [ $ostore = "y" ]; then8 C1 c* Z& \; c) C/ S- F( M; n3 K
           ./pathfinder $@, i+ E( a7 }+ x1 M9 K% N% x8 Q
           exit
: E8 ~+ M/ a" \( K7 @0 u        elif [ $postgres = "y" ]; then
5 J8 `" m6 B5 S9 Q6 P$ ^           pmga $@
$ Q- |* S" i& ~/ q0 J5 y6 ^           exit' c% b  e4 I$ P% w0 i& _
        fi) R: A( S. @7 G2 S( l( n' `
    fi
5 h4 u: ^# Z, G! m$ Ffi0 {8 r8 }! K2 }: x

9 o/ n0 {! ^9 @  P/ T$ m- iif [ $databaseOn = "y" ]; then5 Z% A/ @  S9 j, g  v) K! k
   if [ $ostore = "y" ]; then
3 p6 ]0 H- B! k( u. e- ]      if [ -z "$workDir" ]; then
7 }2 c! e3 k. q+ V         echo "Error: Missing argument for -gadb option"
. \( Y$ B- A: c" j         Exit 16 P. |3 ^6 {$ N( ]3 w- o+ s
      fi( @# ~/ b9 r2 a! z
   fi
+ h: O% W: |6 ^9 }0 n! k( c% H0 `   if [ $postgres = "y" ]; then% D. f5 l- }! Z. q& n7 q, o
      if [ -z "$workDir" ]; then
& X' S( y- f# @         echo "Error: Missing argument for -gadb option"* f+ s& h" B( r6 M: T( w' x9 [
         Exit 1: J5 ~  g' \' t  [7 ^* e+ O6 _6 g9 y+ l4 @
      fi
6 P( D. N  U9 ^( {! Q. A( J   fi% v# W- F: R" F' O
fi
) H. T! X. s4 n5 y
3 G8 ?1 d; `+ Z  W, Q. C4 ?: Zif [ $postgres = "y" ]; then, K8 L/ Y$ S, _6 \* Q8 x  V
: n0 V) m  T+ A5 ~: s6 h
    if [ -r $EPIC_BIN/scripts/gui-init ]; then3 y" k5 D1 ~- E# t6 b9 e
        . $EPIC_BIN/scripts/gui-init
# P4 }' n7 I" M; t, p/ K8 U    elif [ -r $SES_ROOT/bin/scripts/gui-init ]; then$ Z) G3 p" G. F" X% h
        . $SES_ROOT/bin/scripts/gui-init
! n- ]2 l2 P1 f1 ~% \" Q$ _7 W' T    else- S+ Y* m! I6 G( a
        echo " ** Installation in \"$EPIC_HOME\" has been corrupted!" 1>&2
, @) r2 g! c) n8 A" }        echo " file bin/scripts/gui-init is missing." 1>&29 s& n, {$ P; l6 ~
    fi
2 Q) e8 M& _. S+ k* J! p
; E; U! F0 W4 X# X    workfile -tool $cmdname $@
, ]7 |+ M; Y5 N8 |- [1 Lfi
# {% b  `7 C! a/ G1 l! ~2 I; t* G8 _7 M+ |- w
if [ ! -z "$o_option" ]; then
9 g+ _% m. |! Z: U$ s# m    errFile=${o_option}.err. {! G1 T% n5 r8 F: M+ S+ H
elif [ ! -z "$f_option" ]; then2 g; J8 H! E" X5 I& x' ~2 h
    if [ -d $f_option ]; then
; H* a) E1 k6 Y        errFile=${f_option}/powrmill.err
" Y5 q1 R8 [$ J$ O/ M! E. M8 o    else errFile=${f_option}.err- ~; y. f, ^3 G$ w" C2 O
    fi
/ f- p; X) {' p. B0 jfi0 k. i' X" M0 j; z
5 k* Y. \; x5 l; C3 r" j6 i: H

% z# o( d2 I* Wif [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then9 d' [" u8 ]& W- O! Y! K! z
  rundir=.epicrun7 B9 f8 h! B2 U% |$ [
else
; t( E  j9 h7 [' y6 w  rundir=.epicrun$$
& Y6 o& M% S: P7 v  yfi0 E  [2 i8 D7 {* f3 z# r" G

8 ~0 S  |  V% [) v; |libpath="$rundir${EPIC_DLIM}$EPIC_DIR"  G1 q! f- @4 p

8 ], b+ T( Y, Y7 b# k1 M( {cwd=`pwd -P`* \* F9 g. c4 g6 `+ g
if [ $cmdname = "acehdl_w" ]; then) L, P$ b# J7 J
  cmd=`basename $0 .sun`' ?0 H) n% Y) U2 Y. d* y
  cmd=`basename $cmd _w`2 u4 }: T( ?- |: f$ P7 Q1 u; z  I
else. ^1 a+ s" y7 _: |# T( r
  cmd=`basename $0 .sun`" [) v) v- N3 B7 [% y+ O" }
fi
# c9 }; D5 R: ?$ L  a. h! n: h% q6 Y! N; l, h
command="$EPIC_EXEC/$cmd$EPIC_EXEX"0 w; v7 l  r  _2 o& N. \
[ ! -x "$command" ] && echo "$cmd: not installed!" 1>&2 && exit 1
$ d7 F6 b. J' }4 y
! @/ G2 m7 K* T7 N# buildmod extracts -u/-fm options and calls genepiclib* q( P6 n" C) }- n5 k! T. {
# It also set the remaining options to variable CMDLINE
0 I2 F8 ]% m& z( @$ n' j# look up in .epicrc for -fm & -FM parameters
) g3 _# P, a' _  |2 _8 f+ `: p3 R0 @& p- J
fmlist1="`get_epicrc ./.epicrc user_adfm_obj_modules`") j: y6 P* v& O9 j! `( l) u  U
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules`"
. r0 A& m6 J% I  m) Y9 {* S[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules`"
0 ?6 e5 H1 t! Q$ c  C
& Q) W* N9 J( J( g3 g' t" H3 GFMlist1="`get_epicrc ./.epicrc user_adfm_obj_modules_force`"
$ ]1 j+ G3 ^+ {5 C1 V. }[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules_force`"6 y0 ~8 i( A) M+ J4 B, c) R# S. H5 o
[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules_force`"
9 o' ?0 M/ e& _  z0 k( R4 J) f: A6 m" r6 E+ h
if [ $# -gt 0 -o "$FMlist1" != "" -o "$fmlist1" != "" ]; then  O+ d. E- g9 A" V1 L" @) W
    # note that the buildmod script will set the CMDLINE variable2 ?  p/ u; p0 Y4 g" f) {
    . $EPIC_BIN/scripts/buildmod  \( A; x3 l6 k2 F2 A4 V; n& \
5 \, t2 S2 E5 l, F- n/ c5 f0 J" K
    #echo "This is the value of cmdline=$CMDLINE"4 H/ K. z, u3 z, q% X
    #exit 0
2 y6 G& h! E+ I2 t4 M2 j! A& d4 b4 r- n. z
    # if a new timemill/powrmill/pathmill built, run the new one
& a; }6 T. Q% B6 |. {    [ -x "$rundir/$cmd$EPIC_EXEX" ] && command="$rundir/$cmd$EPIC_EXEX", ^! D/ x/ K3 J* v- Q# o3 e
fi
/ O. E0 [' w1 s3 O- D9 A" x9 X
if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" ]; then
9 N2 d, r# S/ E2 Y  if [ $have_har_flag -eq 1 ]; then' h- ^% _* i( W4 J
    is_special_har_run=1
8 b4 K5 T1 e8 {, L; \& Z    if [ "$o_option" = "" ]; then
, I* S* E( }( p7 O' \      case $cmd in7 C: V2 Z3 R& |5 \# N3 u! j
        timemill)% }8 `9 [6 R9 N3 J8 e2 p& m& k2 L
          har_ofile_prefix=timemill
# a9 Q* _! Y+ K, v/ f4 k3 c          ;;2 g5 L) j! k5 {! d  e
        powrmill), C0 h% P1 b: s: G1 E$ ^5 m
          har_ofile_prefix=powrmill
* G+ y/ n2 F6 \          ;;6 L+ [/ ~# @, r# p! s. a6 [
        nanosim)
0 |8 W4 ~0 ?9 r9 Y4 g          har_ofile_prefix=nanosim
" H! p/ K% e; ?) q" L3 s0 D. \' |, I          ;;( f. F' b8 o. z" f" ^( s4 Z
      esac0 x. d  \7 W/ u
    else1 h% G( d5 S8 }5 D1 x  H. ?
      har_ofile_prefix=$o_option
0 K% r, c+ }0 p. e    fi% F8 w0 x5 |! Z, w; \, J
fi) o+ s/ r% h, X2 R( C5 j) U; @9 G& z
fi; w% }0 c  K/ H' j6 A

( H2 z  w2 I0 W4 D: I# Call Double precision version of the product if -D( Z: X2 J3 ~. ]$ w( J
# or simulation time > 1,000,000 ns.& f1 _; @/ R0 H8 ^0 j0 D  W1 K
if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" -o "$cmd" = "railmill" -o "$cmd" = "pwarc" ]; then
7 R6 t" m! ]8 t% G) z5 p
; n- g0 A9 x; `& ?  # Now the binary always has the ACE feature
  S. [# r! S# |2 ~# [7 B4 D3 v  USE_ACE=YES
5 [! b. }  V- o7 v' F* _3 Z
* o3 i( ~7 s% F1 T" H9 m/ e  HAVE_DP=NO5 t$ ^% C* _7 H! J' {2 ~  n
  EXTRA_CAPACITY=NO
: {1 f3 ]) s5 t  DB_REAL=${FORCE_DB_REAL:-"0"}, e5 C2 d. W2 ]  [

/ U/ f% o6 R, i. L  # Enhance for ACE ease of use
. b$ q$ L& l  P$ a  # If no command line option or only a -T option, do:
5 e. ^! l% ~% k$ b9 a; _  #   1. set -A option9 o% d& J# S# W  J* O
  #   2. assume input file to be hspice) w, @1 L8 S  [2 [
  #   3. set -o to input file prefix
0 h" k0 B1 o/ M/ W' h' C+ }. X  #   4. set -z to input file prefix# x$ M$ |% H6 _* j" }! m+ U
  #   5. set -c to default config file
/ u4 W( L& t! `  netlist=""
4 u; w2 i* l: v5 ^$ t  minusT=NO
4 {* [0 F: x. J7 I' x0 i0 e& V  useStdCmdOpt=0" L# t: [0 Q& Z7 V& v  _  V
  prefix=""
3 z; P% K2 B* g9 f! ~. g" m4 a( ^+ o  circuitType=""
- g( I$ |8 C) I5 k" _  for opt in $CMDLINE
6 @$ H; h) O7 k+ A0 G& J2 ~# @9 j  do: k' X5 J2 ~8 o) ^; k/ @
    case "$opt" in " K+ @* j( L/ B" p/ j. K- t* P
      -T)
& ]) g$ v5 B3 |1 t        minusT=YES/ g' w4 J1 P! q/ k5 v  e
        ;;, Z' r1 q9 [2 U2 E7 v
      -*)5 o1 m) g& f9 l* u0 |4 e) a6 E3 [
        # using standard powrmill command line5 s8 I% x" q0 T
        useStdCmdOpt=1
2 [" B$ {$ R4 \  ?& I$ [        break
" }7 ~1 P: Z  l# ]! {% C2 G        ;;$ Y' ~! S( T- L1 B8 `% H
      *)
4 V2 P9 Y0 P5 v/ |       if [ "$minusT" = "YES" ]; then* K+ e* n5 D9 A5 M4 e3 q
         circuitType=$opt6 e) I& i8 f, O9 e" m) D( m- |. P
         minusT=NO  # reset flag3 F% w* w# I4 S' F0 K8 u& N
       else + l( z2 A' {& j0 G8 p; T
         if [ "$netlist" = "" ]; then
7 y* p2 J, \. J, m$ s+ }7 h" O           prefix=`basename $opt`5 p/ `- B- S! H2 X* J5 ]
           prefix=`expr $prefix : '\([^.]*\)\..*' \| $prefix`3 u( H6 x6 ?9 t
         fi
: N, K3 o0 I- j5 W# M2 n         netlist="$netlist $opt"$ @  M, l7 }4 `4 b1 q* n
       fi) Y/ b2 i, t' p5 x: t
       ;;0 u9 y/ s3 e7 ]4 x* x
    esac/ o  |/ j( y: m0 Q' C
  done. V+ n8 c, K1 ~5 o. }: O

8 s$ \5 B( m& S% F8 ?" B* O' l: r4 p/ ~. A7 v
  if [ $useStdCmdOpt -eq 1 ]; then
3 X3 ]9 w" c' [6 O; V) z    # use standard powrmill/timemill command option
! x( k. j( x9 |% B, L3 h- j3 `% ?    for opt in $CMDLINE+ b6 I9 J7 a1 \4 H7 i6 d; L
    do
) @1 a: S9 O+ _& y! M( Y  b* x# P/ s1 F      case "$opt" in
. _9 l- T. }! m8 R( J, y+ ^3 |        -A): I! p7 E' o6 R
            DB_REAL=1& x$ |  `! G8 ^. E6 [
            ;;9 V* r2 {# K; N0 j+ \  G! \
      esac
: p6 y8 ^+ b& v    done
& i* ~) Q; n' ]# g/ z, ]0 p    if [ "$netlist" != "" ]; then
5 L( g# m! v7 z; }% r      CMDLINE="-nspice $CMDLINE"
, ]  a( V1 |$ `( o1 e- k7 m4 P4 }    fi: |2 j: Y! h6 Z8 X! ~! ]  q2 S4 q( e! B
  else! G# @. T# O+ d! d5 R4 w/ f
    if [ "$netlist" != "" ]; then
! {: M5 Q: T  K      EPIC_DEFAULT_CFG_DIR=${EPIC_DEFAULT_CFG_DIR:-"$EPIC_AUXX/etc/$cmd"}, _. Q! x7 J& u8 X* M
      # construct new command option
# @# Q/ R; ?- f$ Q% ~- e" P& h      if [ -f $cmd.ini  -a  "$circuitType" = "" ]; then
' N. m  x- e5 C& x: z- d- A        CMDLINE="-nspice $cmd.ini $netlist"
# ~- [+ v7 w& l& U( {      else7 |. Y& i* o: e+ N& j
        if [ "$circuitType" = "" ]; then% ^7 ~* `$ _8 E, }. p) w" e
          circuitType="msana"
" N: g% N/ q* t. E        fi& d' F! Z; }2 T; C8 v4 ?/ h% }
        CMDLINE="-nspice $netlist -c $EPIC_DEFAULT_CFG_DIR/$circuitType.cfg"' c8 Y2 H, G& w) V9 M2 e! H9 c
      fi/ }# T# R0 _6 B
      CMDLINE="$CMDLINE -A -o $prefix"# K0 M" `4 O1 \; w
      DB_REAL=1
4 q) \( }, e9 A5 I+ {8 G6 `      echo $cmd $CMDLINE; ?& o% K3 {) ^4 H( m
    fi' A* [/ M0 u0 T; T9 K6 o8 X
  fi
. A# B: ~0 Q& @1 N% Tfi # cmd is timemill or powrmill or nanosim or railmill or pwarc
0 Y1 D+ P; O, y; X* b5 |/ F0 O- l# r7 F. ~! t
[ "$HAVE_DP" = "YES" ] && [ -x "${command}_a" ] && command=$command"_a"
! s0 l. h( m. ]; I& f; k' X& g[ "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a" ] && command=$command"_a"/ T1 L; H3 C- `. S( i  r
[ "$USE_ACE" = "YES" -a "$vlog_design" != "" -a -x "${command}_v" ] && command=$command"_v"
; h* E4 P' y1 I. i+ K3 \5 c! n' p+ L) x. W% [- h, @8 N% O
if [ "$__engine_wrapper_called__" != "Indeed" ]; then
1 [- `7 i7 q4 f8 h. R0 m. h    __engine_wrapper_called__=Indeed
! v5 z1 L5 [" K3 x# H# `. f$ u    if [ "$cmd" != "amps" ]; then. T  k+ \) A4 n
        export __engine_wrapper_called__5 l4 N, T6 I9 W+ y
    fi
8 ?# q3 L. }4 y3 ]  l& D/ U% X( T$ Y* \% ~4 [5 X7 y# a2 J# \
    trap "cleanup" 03 E& R/ F9 t( N* J
    trap "" 2
2 J+ t( W1 f- Z9 l5 m5 Q6 q( V% L6 A/ K- Q, z
    [ -d "$rundir" ] && rm -fr $rundir
7 T; b" J% M) x2 w0 |, F    [ -d "$rundir" ] || mkdir $rundir* u" l" m: Z3 c: u1 k0 g$ D

7 F, R; ~+ K2 e8 }    case "$EPIC_ARCH" in
' e9 @) U/ D+ L$ d! m    *SUN*64)   
: [8 D6 H$ u2 D        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"* |' k: E4 p, A. X" a$ A6 z
        export LD_LIBRARY_PATH8 s7 A0 l$ b7 [; ]
        suffix=.so
9 I( S7 D4 A. w7 a  c- r6 k4 ], Q        ld_err_code=1274 G2 M3 D0 u; t0 _' S1 V+ U
        ;;
4 J$ Y+ R/ r1 f: Y8 l& N    *SUN*4)   8 C3 G9 S3 m7 u$ ^/ t) S! x
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
0 z5 f7 N% C- v  Y; |  B( Y1 o        export LD_LIBRARY_PATH
1 ^. j, R: ]. U1 E        suffix=.so.1.0
6 L6 Q% ~) I& k' a" ]4 l9 ]        ld_err_code=127: p' o$ ]% C2 L# M2 F6 K" V6 i3 k0 S. m8 F
        ;;
2 F, D  h8 \8 ]5 F# J    *SUN*5)   6 q. ~" z7 I5 @! H5 w
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
6 N8 r3 J& o2 H4 x        export LD_LIBRARY_PATH# e( X0 S( f0 }( Z* |: q
        suffix=.so8 V% t1 q9 p( o7 A. T. A: Q$ p, `; y  v
        ld_err_code=127
$ O. p5 Q6 D7 ]! G) c  R        ;;! q4 d# J  O+ W) @+ x: ?' q
    x86sol*)   0 ]) a9 v8 z# f' _4 R5 U; A/ D* b
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
* W- o& S, t  @4 |9 f        export LD_LIBRARY_PATH. A/ W, a( w, |. e$ l
        suffix=.so
5 p: ~( G# {5 i        ld_err_code=127
5 U6 U4 g' B$ h# n' e7 }        ;;2 T% Q# w+ k( _" Z+ x. s
    *AIX* | aix64)   1 G2 b8 k+ C+ v4 o7 v' x
        # When genepiclib creates shared objects, it creates a import file and : i* ~0 j4 z* {4 d, J
        # uses timemill as program. So at exec time,program timemill is needed
# [; g9 }3 O( ~/ w9 V        # in LIBPATH$ |+ O1 P8 T7 l" T0 c
        $ln_default $command $rundir/foomill
) J1 J$ y! ^" b& P2 i' T        LIBPATH="$libpathLIBPATH:/lib:/usr/lib"' N2 t/ b" [+ M* k: l% X# R7 B
        export LIBPATH* H9 s! O7 M* X
        suffix=.o
1 l; {$ l2 Q7 c2 ^        ld_err_code=8
0 o6 N3 E1 s# n( ~. t. n: x        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then$ ^9 I( I- J- \: w
          tdir=`echo "/tmp/d"$$`
/ ?1 p' I+ q" u8 s; I          [ -d "$tdir" ] || mkdir $tdir
8 O" U  b& C  o. v$ W, N3 k& C          if [ -f $EPIC_DIR/libCustom.o ]; then
* w8 y' O& S( w7 ]' F3 e; P% E- w             cp $EPIC_DIR/libCustom.o $tdir/
* b- N* n* a! n+ N             $ln_default $tdir/libCustom.o $rundir/
( u! ?+ W( d* M: g+ D1 p) N          fi6 W3 Q- u2 p$ r4 {# ]
          if [ -f $EPIC_DIR/libModel.o ]; then6 C% m! P& ^/ ~# X5 H& `
             cp $EPIC_DIR/libModel.o $tdir/
' h6 w* }$ n9 i+ k+ s) N/ O             $ln_default $tdir/libModel.o $rundir/
( T5 _/ ?/ n* M: d+ i          fi
% P4 q2 h$ K8 l- Z( l          if [ -f $EPIC_DIR/libFuncModel.o ]; then5 |4 v# t# a( X) A% i$ V4 g
             cp $EPIC_DIR/libFuncModel.o $tdir/4 s! Q/ N: e3 I$ z& i
             $ln_default $tdir/libFuncModel.o $rundir/
$ E- ]1 V% g8 d  l/ }, U          fi
5 p- B2 k1 f  @          if [ -f $EPIC_DIR/libFuncModel.34.o ]; then2 }3 v! S2 W2 B. e8 |  ]
             cp $EPIC_DIR/libFuncModel.34.o $tdir/
4 i2 L. E  r, ^  }. D* t0 T             $ln_default $tdir/libFuncModel.34.o $rundir/) g3 K7 g, E; H' x
          fi6 p4 ]+ S8 @( Q) Z: ^8 y) `
        fi) d- S6 e9 \( B. E$ o
        #Set the IBM flag to enable more shared segids
. t& v4 B, `3 s& `2 i% E        EXTSHM="ON"5 J+ ?) v/ g/ n0 r8 V8 r0 W
        export EXTSHM
' \1 }8 ?8 Q3 t        ;;
% ?3 a7 C" R7 K6 q2 M    *LINUX*)    " q4 j+ C" o' K
        suffix=.so
- a" J, c# Z5 E# `        ld_err_code=1+ m% N" p; q. T. R- |% Q2 W( k4 T, S+ {
        ;;) {3 u( d5 g7 v) d
    *amd64*)" Y' S0 t) }( k( U7 w( T% s: c
        suffix=.so
6 m( b" F. v# m$ x        ld_err_code=1; w' a( N( p, k0 ^% P+ O; u
        ;;* X6 H: g( N$ j! r7 ^5 }6 {
    *suse64*)
3 f% _5 Q& Z6 [' n3 y        suffix=.so0 P) n8 A# [7 Z) c' e/ `, x* U, v
        ld_err_code=1
4 o) [7 O: S& Y6 H- s        ;;
( }, c* y1 m" O6 W. K& j    *suse32*)   
6 ]1 t: t3 `% C' x        suffix=.so! j6 y' h1 x2 [+ {8 O
        ld_err_code=1
, a4 V+ w- r: @" W$ Q# _        ;;) n: H3 b  q+ N) j
    esac
3 ]: B! u( w2 v( E
  x+ M3 B9 m* t/ g1 u% T; m    [ "$has_custom" = "YES" ] && ulib="$ulib $cwd/libCustom$suffix"1 d/ X5 u% v$ `' M. d; I. m
    [ "$cmdname" != "timemill" ] && [ "$cmdname" != "powrmill" ] \; I% m! }; H3 Z. a1 V, l& i  _% f
        && [ "$cmdname" != "nanosim" ] \: j( g8 l1 S$ s" U9 m  @8 @
        && [ "$has_model" = "YES" ]  && ulib="$ulib $cwd/libModel$suffix"
' S* _1 h( m* e1 {5 {    [ "$_VA_" = "YES" ] && ulib="$ulib $cwd/libva$suffix"4 C! N6 `$ Q; D+ Q3 D- W( J
; }) B, ~: ]) ^
#Look for command line option for libFuncModel.so! l* o1 Z. I! I- m
#    user_library_next=0/ i% P9 Q8 p# L7 n
    has_fmlib=""( W; ]  S; c/ L8 \! F0 _" ~
    for opt in $CMDLINE: i+ J; ]! k, R" @% E) L
    do
* }6 k0 n" u8 s( n) B+ `% J) z% m8 \3 H      case "$opt" in 1 @' @% [; c1 m& G7 g
        -fm)& @* @  j+ q* J) X, x
            CMDLINE="$CMDLINE $cwd/libModel$suffix"1 T! o( Y5 @2 d1 g$ A; y
            ;;( ]- @8 [/ r8 u6 {
        -fm_user_lib)! G& q- C# R' U: g6 K3 p
            has_fmlib="YES"% w7 {  b; h: p! u+ r3 V: I
#            user_library_next=1
* O: s5 X& W3 @4 O3 N            ;;
# G- s; z' c, j' ]& J/ X. P        -xc)
2 e% y4 K* \4 f( G% T$ V            if [ "$EXTRA_CAPACITY" = "NO" ]; then
2 `7 H8 T# ?, e9 ?! T: L5 C            EXTRA_CAPACITY=YES
6 d4 W3 d& \2 J  ^, B5 g& v: |* `            fi
& I) Y. n* v1 T2 D5 p& s            ;;
9 R& k- |  e  Y5 X#        *)- I& p  o! ~6 Z3 g' i" t
#            if [ $user_library_next -eq 1 ]; then
, ^- [; x2 B" u9 G+ Y#                if [ -f "$opt" ]; then; d8 P& @3 M; b: z# i3 e
#                    libfmodel=$opt
& n! ]" N& j2 b; W#                else
6 f- G0 j& J( f6 u) h#                    echo "-fm_user_lib: Specified file not found"- S8 o& j' K5 D% g9 I% y
#                    echo "-fm_user_lib: Specified file not found" >> .epicscriptmessages
2 I6 a+ E, B$ X: P( }( b4 G: K) k#                fi
4 F( h6 L: C& A$ X& P# Z2 _) T#                user_library_next=0+ c7 S, O, {8 I: ^7 ^
#            fi
7 ^! @+ G% N; G5 t: ~2 M1 C#            ;;
7 X( N2 J& [; s        esac
6 A% T, g! Q+ ]    done
8 `* J4 {; L6 l+ S: Y9 a/ t9 _4 P) K
    if [ $cmdname = "timemill" -o $cmdname = "powrmill" -o $cmdname = "nanosim" ]; then8 p  K; a' }: Q# y- h
        flib=""
5 c7 Y7 p) W( R  _        if [ "$has_fmlib" = "" ]; then
, F" o! V5 J) R0 W6 V            flib="$flib `get_epicrc ./.epicrc user_libraries`"+ Z5 G' p0 y2 I5 ~4 N% e; Z
            flib="$flib `get_epicrc $HOME/.epicrc user_libraries`"
. A5 _1 t/ w9 X' c0 H: `" t            flib="$flib `get_epicrc $EPIC_DIR/.epicrc user_libraries`"
! Z8 g/ Y! i! ?8 ^        fi% o7 D2 J# Z' n2 ?' E; m
    fi1 e5 ^! a  `+ O5 S2 n) K3 v

5 l# Y2 _, c3 L1 Q: G, f2 ]. K   for i in $ulib
* I4 e) [3 c  l1 H* v( i9 W3 b   do# C4 g+ F7 M* i! }
       [ ! -f "$i" ] && continue# O$ w0 H' j+ C1 D
       dir=`dirname $i`; cd $dir; dir=`pwd`; cd $cwd! f' {5 D& |) P$ @% A) G1 V
       i="$dir/`basename $i`"* |. O" S- k5 `( @* {' Z6 F2 e
       case "$i" in4 C$ _8 _- ]% z( C3 I
       *libCustom$suffix*)    [ "$libcustom" = "" ] && libcustom=$i;;" [' D, \9 {6 Z' S- ]
       *libFuncModel$suffix*) [ "$libfmodel" = "" ] && libfmodel=$i;;
* M0 Q7 r( D8 g       *libModel$suffix*)     [ "$libmodel"  = "" ] && libmodel=$i;;
% H$ W. M# z3 y) C       *libva$suffix)         [ "$libva"     = "" ] && libva=$i;;
& h7 I8 D# J& U+ J" K2 o8 l' u       esac
. @( k3 i- t- d7 C& i- C       [ "$libcustom" != "" -a "$libfmodel" != "" -a "$libmodel" != "" ] \4 G) U4 }! y2 ]3 e! T
        && break
) o8 m/ l, f  l2 l2 y/ ~   done
4 }9 ?6 g% g" ]  q0 z4 r. d! b# M! ~8 E; \
   # symbolic link shared libraries to .epicrun$$" B7 _7 e# t: b  {
    cd $EPIC_DIR; epicdir=`pwd`; cd $cwd
. B- r; \+ N2 v$ \* B- W1 }    if [ $cmdname != "timemill" -a $cmdname != "powrmill" -a $cmdname != "nanosim" ]; then9 `2 T* a0 r& v6 K4 @, N
        if [ "$libfmodel" != "" ]; then
  k- r6 {: c7 g, e             [ "$libfmodel" != "$epicdir/libFuncModel$suffix" ] && \6 j6 v9 i2 J' s: j6 y) p6 @" d- T
             echo "Using $libfmodel ..."  && \0 g- f, S; j! B. J9 Y) Y' L0 \( O
             echo "Using $libfmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE# m+ @$ T! j2 D- C. f  T
             if [ -f $rundir/libFuncModel$suffix ]; then
# J) Z1 [- O- F* L7 [7 Q               rm $rundir/libFuncModel$suffix
( @$ j. A# n3 _4 f             fi
) R* @- V* {6 F  p8 \             $ln_default $libfmodel $rundir
. a4 d6 S- b9 E5 m3 [3 Z5 N, W        fi" k4 H4 W% x& Q% }
        if [ "$libmodel" != "" ]; then
$ e# k% C4 h! r1 X9 }+ N& J, g             [ "$libmodel" != "$epicdir/libModel$suffix" ] && \3 Q8 b# L; ]$ G+ j7 A
             echo "Using $libmodel ..." && \
( K6 W3 \  K; R* X             echo "Using $libmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE/ M$ F% H  W3 l3 {! p  J  e
             if [ -f $rundir/libModel$suffix ]; then
  H) Z" \. z5 {; U  \               rm $rundir/libModel$suffix
& G) D* ?; R' G* t, k+ f( P             fi' X3 A* v2 f9 J8 J" p" Z1 z
             $ln_default $libmodel $rundir ! d  X7 G9 j5 X# I2 Y
        fi0 H4 Q8 Z% I0 j& f# G' ^4 |! T' c
   fi
3 A7 Z5 o7 E+ i' {& a   if [ "$libcustom" != "" ]; then
& L( \" M) d# I2 H        [ "$libcustom" != "$epicdir/libCustom$suffix" ] && \% ~; Z, @7 v1 G- v( u: t+ l
        echo "Using $libcustom ..."5 x# M+ v6 H, }2 Y
        if [ -f $rundir/libCustom$suffix ]; then
: J1 [, ]2 z: \          rm $rundir/libCustom$suffix
. b: V+ n( m& V4 _# K- m        fi5 e" ~; _& d7 `, f5 X! A& C
        $ln_default $libcustom $rundir . |( r# n* D( \/ k8 L6 O  }
   fi8 ~9 v8 R, ^- R. w: ~3 x: ^4 N5 l) {' p

" e$ y2 f; V/ N: _# h6 f   if [ "$flib" != "" -a "$flib" != "   " ]; then7 u7 m, R9 {7 T" P* i0 ?
        CMDLINE="$CMDLINE -fm_user_lib $flib"
  x+ l7 U! e$ W: R   fi5 w) I" |0 q- f- s2 j$ k
! o0 O& r% Q0 A( L$ O, H
   if [ "$libva" != "" ]; then3 y0 l; l4 M* A5 _, |. x
        if [ -f $rundir/libva$suffix ]; then% K$ Z8 o3 {5 c! B
          rm $rundir/libva$suffix& {0 w  ?  J, Y; W5 ]
        fi
& W; ]2 J! K! V' U, v# j        $ln_default $libva $rundir & E1 V$ z5 M, @  e6 d
   fi* i/ f0 L& ^5 W7 g+ u9 g+ p- K
/ }: o- ?3 D  k
3 B4 M% S, y( G) z' T1 [
    # VCORE design library
* h" I, Z% K7 W% W5 @    if [ "$vlog_design" != "" ]; then, A2 S. a5 U* T2 g2 h: q/ z1 Q) m
        $ln_default $cwd/$vlog_design $rundir/`basename $vlog_design`
  N* n1 f& ?0 z. T7 N    fi
# Z+ S9 S! P1 t( W$ _/ E" q) e( _* G
    if [ "$EPIC_EXTRA_CAPACITY" = "1" ]; then- l- l" g% r' L" m: r, R/ |: ]0 I
        EXTRA_CAPACITY=YES) e% g! y" }' I! m' M: ^
    fi
- t. w+ G7 H! C" t2 ~$ i2 Y% ~# F/ g6 i/ V: }3 G# g
    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "0" -a -x "${command}_xc" ] && command=$command"_xc"
% m( r) k1 L. n5 z. V: C+ j6 C    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a_xc" ] && command=$command"_a_xc"
5 j3 F( @- q( }& i* ~8 O; H% v    #Create temp file if dual process is on% p: f( R- T6 d1 O$ k! D
    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" ]; then- ~  ]" k3 u. B" g) z/ Z
        if [ "$EXTRA_CAPACITY" = "YES" ]; then
( ~6 J7 r) Q/ V& C  z# Y* |            touch $rundir/rpcidfile
( D6 e# Y3 z- T+ `8 c        fi
$ [0 A& F4 t, u" w( T+ l. {# {    fi1 C1 S0 \6 e$ `3 q/ z7 B
fi; [0 g1 Z, V( f7 ?
2 t1 x0 ], d8 N; u6 X
run_cmd()
1 y9 v; I* a( l4 K4 b{! |* E/ j- ~( l% U& c7 r
  command=$1: [9 d# K9 P! @: [9 ?
  shift5 ^. a* P( v$ |+ J# V1 L4 D8 a1 X* Y
% Q) u( b2 d/ u1 v+ Y4 U) o1 z2 l
  if [ x"$VA_FILE" != x"" ] ; then
( L" h$ w" J" k4 P8 J# h! @     cmdline=$ARGV
4 W) ?# F2 e1 S) H$ B  else  |) U# D  c* p" I7 z% X
     cmdline=$@) n7 y5 ~* R" h6 c( _# e8 Z2 m" r& U
  fi
: Y* |9 \! r$ ]& Z5 _; H- e5 l5 z
+ e. ^8 _1 Z/ h3 e4 p' R/ @  debug=${DEBUGGER:+"$DEBUGGER $command"};
! V/ d' I3 C, q5 C8 M( h5 @3 C9 P7 ?4 }
  # To disable Exec-shield-randomize in RHEL3 U3+ when running nanosim and nanosim_a# M: Z2 r, z; P' S0 z; i9 I
  # so save-restore may work.
  C" |1 [5 j, d, v0 U8 g/ j, _" z6 ]  setarchStr=+ q8 y2 R* s% o; j& V+ F7 q! ~0 C5 Z+ p
  cmd2run=`basename $command`
5 h/ G& R. Q! W) o' B3 {  if [ ${cmd2run} = 'nanosim' -o ${cmd2run} = 'nanosim_a' -o ${cmd2run} = 'powrmill' -o ${cmd2run} = 'timemill' ]; then' s4 f! B- g7 W) S7 b6 h$ a& k, ?
    if [ "$EPIC_ARCH" = "IBMPC_LINUX_LINUX" ]; then
% e, }0 H/ \8 I6 t      setarchStr="setarch i386 -R "
9 _8 k1 j" c% F8 Z" \    fi
  s) V- }$ i6 @1 {  ]    if [ "$EPIC_ARCH" = "linux" ]; then4 Q8 P, X+ T+ i% I1 b
      setarchStr="setarch i386 -R "0 K2 Z* J) B8 O' e* o+ S
    fi. ]4 g! G0 F4 e; i5 d& v5 M: W
    if [ "$EPIC_ARCH" = "amd64" ]; then- O8 D4 r" q. T9 @9 Q6 `* e
      setarchStr="setarch i686 -R "
/ Q- Q& n. ~: l    fi' i8 z2 w% p8 B# x4 A, b5 t
    if [ "$EPIC_ARCH" = "suse32" ]; then
3 N7 u, s" c+ x4 }, T      setarchStr="setarch_suse i386 -R "
1 I# F) z, J2 @7 R+ ^8 Y) l    fi* Z( W, z8 D! a, ]7 O
    if [ "$EPIC_ARCH" = "suse64" ]; then
' L& s, B  C* f: u& V      setarchStr="setarch_suse i686 -R ". {# e+ a9 `' `1 R0 {  J+ m2 f
    fi
( f7 U" d; R. V3 r8 [2 I  fi
) m/ g# i% n. D- J* w
- p* a. [. `4 C  ret_stat=0
( h8 M7 ?8 A& ?+ V6 v* [: k; Y+ ^$ C  if [ -x "$command" ]; then
8 P- r/ x( W% V$ a      if [ "$debug" ]; then5 D. c8 f3 d0 M0 x" m; Z
        _debug_args_=$cmdline5 |" u. j& J3 G2 ?7 N: S5 w7 U
        . .epic-debug
/ G" D9 q  Z- J, m      else$ B$ p; H$ N- _; \1 \* A
        DEBUGGER=; export DEBUGGER' S- P- D; a% Y) I9 \) g3 t
        $setarchStr $command $cmdline# Q0 a% |0 G8 s0 t7 }% V
      fi
3 I" k( G6 L, k* H  o      ret_stat=$?
' Y" O  B, j9 z9 @5 D0 M& \  else
& A3 }/ W0 p# Y' f3 H# d, m: v    echo "Corrupt installation, executable \"$1\" not found!"
; z: D' `9 A$ e    ret_stat=1
* B5 d0 S% p2 x% E3 X  fi
/ t2 i3 S5 V6 o" T# c}
2 U/ N3 v8 Z! A% Y& y
1 K/ F: [' W2 f; e! Q# keep runing cmd if ctrl file exist
* v8 F5 e: K& W
. B" _7 G% D0 `9 c- f" e5 krun_loop()
3 {. q* {! q1 o( N6 T& b% Z{3 Z# c1 q) H$ `
  command=$1) A4 a' x( P, v/ O4 }: `7 T
  shift
9 a: s$ W6 `. P& R7 F5 l
, z+ P+ O! @) x: g2 t  if [ x"$VA_FILE" != x"" ] ; then4 o( Q8 x' i  g  A$ T- V( v& I3 U
     cmdline=$ARGV
4 v& h6 z& C7 J1 S( e; J) k  else6 C2 J; y, d" [7 ~8 f
     cmdline=$@
! O! `  d9 p' S6 m  fi
+ S7 H$ F# f1 v1 t5 X
0 N- \9 N0 g; |8 t8 _9 _! J6 r: B  while [ $ret_stat -eq 0 -a -r $LOOP_CTRL_FILE$$ ]; do
7 `$ \" s1 L. o    . $LOOP_CTRL_FILE$$
9 a1 U0 @9 ]+ X+ G$ h  n2 @! l. j    run_cmd $command $cmdline -banner 2
/ P: t  A  {! v6 S2 t  done;
, O" N. L' ~. M- }+ H6 u$ n3 j' F# l3 S% c- W8 l
  if [ $ret_stat -ne 0 -a -r $LOOP_CTRL_FILE$$ ]; then! V$ }8 m1 j7 S1 W  u" D$ A
    rm -f $LOOP_CTRL_FILE$$3 X) d2 d/ Z, \- t
  fi  Z' z6 I! _) x1 J4 d
}
9 T. S* L$ B8 E  Y9 |/ _% d. I0 A- `
har_check_ret_stat()
' d# B, f; r& ?' s5 k" W* s{
# l8 R+ @2 m: P. k3 p  if [ $ret_stat -ne 0 ]; then 4 k+ R& Z  W3 N
    echo "Simulator returned with non-zero exit status. Stopping."' C9 F2 `; H9 v& }& ]. u
    exit 1+ x: f6 p$ C3 M' r  ~4 W: g8 o
  fi8 ?, N* A1 D6 x
}
2 ?* d% N. A& E8 f) n8 Z/ j& N' P- K7 J8 f; P
#; |7 W' f& g9 V( I
# set stacksize and datasize limit
# ]7 T# c3 d. k#
# G& B; C  ^5 _* K# P; e- [( k. G% c+ Z% Q) N0 A
set_data_limit
4 J( o; |( v1 `& x, }( jset_stack_limit
8 [% Q. u( w! q
& V( v6 B4 v* x2 B#rm -f $LOOP_CTRL_FILE1 j4 C; B2 v" I
6 W$ [% h& E- Z& E- g5 V
run_main()$ i( P: s7 a% ]1 L( ~* s7 b. Z- ]
{
6 ~9 D0 M; t! U% Q# Q2 b2 q) Nif [ $is_special_har_run -eq 1 ]; then
$ I1 j8 ^3 e/ [2 }9 C  if [ "$har_ofile_prefix" = "" ]; then- P" y- W" G+ F% J5 `' D
    echo "Wrapper bug. Notify Synopsys technical support."
$ \, M$ i; ?8 e# l1 U$ q    exit 1: T9 }2 x' b; e! t5 |
  fi
0 _( d2 i$ ?9 D& L& Y- @7 ~  if [ "$har_hilo_file" = "" ]; then
: H2 u' E9 K; s% P    # no user specified hi lo file - do both runs
" {9 H; B  Z7 @" Y    run_cmd $command $CMDLINE -har_one -har_setup
! t+ ^( r4 W0 D* r6 H7 y7 n    if [ $ret_stat -ne 126 ]; then
, |+ \- o7 x5 R9 w/ a) w      har_check_ret_stat8 u- ^! x, S0 H" K5 U9 R6 J- j
      if [ -r $LOOP_CTRL_FILE$$ ]; then7 l/ E- ]# v: f
        run_loop $command $CMDLINE -har_one -har_sim ${har_ofile_prefix}.hl' Z  ~2 e! e8 V" _: U2 }
        rm -f ${har_ofile_prefix}.hl  W" W: l& ?. o
      else3 x/ S4 `% K9 ]6 s! v; R
        run_cmd $command $CMDLINE -har_one -har_rmhilo -har_sim ${har_ofile_prefix}.hl
- {1 ?. J- N" Z5 |  b  o      fi
% U; ]- Y( k& I3 i1 ?    else
% f0 P: w8 m/ q$ W6 A      ret_stat=0  B3 R! Q2 r5 S+ ^/ V
    fi
% U7 t' \9 C0 D  else
+ G3 H' T. J% d+ {7 Z$ h" Y% k$ ^    # user gave a hi lo file name
# W5 L8 ~7 {; y' U) y  F: ?2 l$ ?    if [ -f $har_hilo_file -a -s $har_hilo_file ]; then
* u. u. I  v( \% @% v      # file exists - use it - only do sim run/ p; C: B3 v8 ^& o, U  {) c
      run_cmd $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}4 j4 |& }) m3 B1 G5 U: h! {
      run_loop $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}& e" v8 j. B; q" m! S
    else
. y; {) `3 o" `3 ?3 D6 s6 |      # no such file - generate it - do both runs8 r" p5 @9 r! K
      run_cmd $command $CMDLINE -har_one -har_fnf -har_setup" s' V; l6 G, H! U% T+ O; J
      if [ $ret_stat -ne 126 ]; then0 h) `' J# r7 i6 i7 q& Z
        har_check_ret_stat
3 a7 x6 E! o8 ^7 V        if [ ! -f ${har_ofile_prefix}.hl ]; then  ~4 [) J4 _% Y7 k
          echo "No hi lo file generated after setup phase. "
9 v6 ?0 x$ v# ^- n# Z5 o( q( ?          echo "Contact Synopsys technical support."
5 ]- d; c4 _# D  H4 @          exit 1
" T7 ~/ X0 j" g7 `& J) w* J        else
+ ~2 y: Y6 z- g2 ?$ l; C2 p          if [ ${har_ofile_prefix}.hl != $har_hilo_file ]; then
# ^; S- x/ |( Z            mv ${har_ofile_prefix}.hl $har_hilo_file
0 [* X" Z) B2 a3 ~1 O          fi
7 G% M, g7 x: }) Q. D4 k        fi
5 a2 S( o, {& o. ~        if [ -r $LOOP_CTRL_FILE$$ ]; then# }- m/ H# N0 z& P
          run_loop $command $CMDLINE -har_one -har_sim $har_hilo_file- J- Q' c7 q5 O
        else" a, j9 y  S: _" S- U9 q) p
          run_cmd $command $CMDLINE -har_one -har_sim $har_hilo_file* q# I* G" e6 H; `* T: v
        fi
6 h0 I. O% C; l: c      else 0 ~5 ~  S# o5 k5 C* c
        ret_stat=0+ r8 Q4 U% t& H. v! H, M+ [  [
      fi9 ]0 {" r  U: _1 c) u/ j. [. Y9 |
    fi
9 C* E# j8 j% [  [4 r9 l0 s! t* D  fi2 F, \! _" a* ^0 r7 ?' }7 J- u
else  
/ [6 H" A0 p( X; J, V+ Q# don't loop if -har_setup
. z; M8 E( N/ k5 _0 E, D% ~8 C  f  if [ $have_har_setup_flag -eq 1 ]; then
* M: F, F& w& ~. Y    run_cmd $command $CMDLINE. ?# t- [4 }( }2 [! l
    if [ -r $LOOP_CTRL_FILE$$ ]; then+ F$ J% t% T& p/ c6 P! M9 w" [. w
      rm -f $LOOP_CTRL_FILE$$
' e/ ^4 K4 ?  W% W    fi; T" f, `9 V& p% Y1 J
  else
) S. |- H0 }7 z8 f    run_cmd $command $CMDLINE1 g8 e3 S3 D( `0 H
    run_loop $command $CMDLINE
' k$ J0 l  z9 N0 H, ?  fi
! b, C1 d( n! z: F1 w2 {fi; {* G( |, |7 k
- C8 ^4 d% ~# w
if [ $ret_stat -eq 0 -a $cmdname = "powrmill" -a $postgres = "y" -a ! -z "$workDir" ]; then
& t! S0 ~. e" n& P5 @  pwCreateErrDB -w $workDir -e $errFile
8 o+ G' s# p0 L2 @; F0 J  ret_stat=$?
& \6 I0 ~# y. C& {' Ifi
) _& x7 k: [$ _- X7 _3 r}' v& `7 S0 O  ]
' {9 k* |7 }5 B- {
cleanup_alter()  |# J% H9 V4 f  C3 H
{
3 }: }# l2 i4 `  [4 E   /bin/rm -f $ALTER_COUNT_FILE 1>&2
. P8 j7 l% ?; i8 F& X. ?   /bin/rm -f $ALTER_HK_FILE 1>&2: @( A9 g+ w+ j  c
}
, }: m( _. {. c, ^7 e$ x; n( i9 C2 k$ x6 V  k$ R
#generate alter temp files based on pid
' H9 q) o# r+ ~6 UALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$
0 j7 o# o+ x+ \% k2 j( tif [ -f $ALTER_COUNT_FILE ]4 V( A2 E# u4 v
then ! [  E' N) k1 O6 `) w* p
  until [ ! -f $ALTER_COUNT_FILE ]
" e5 _1 m* u2 L# s  do2 I% _! M% w  B& g
    ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$
+ K  p3 F1 s, p2 L4 ]  done
% E: J, ^8 R/ ^1 _fi
- g. w& P  [5 Z6 D1 T) P# jexport ALTER_COUNT_FILE! O. Z9 F. q) i/ k
7 c4 a) p5 Y3 ?) i0 G& G6 A
ALTER_HK_FILE="$ALTER_HK_FILE"$$- }! n4 g5 \. @" ~
if [ -f $ALTER_HK_FILE ]' `4 i9 U- d1 ^$ f. {
then + ?; D4 G2 Z" s
  until [ ! -f $ALTER_HK_FILE ]
1 O; o: X3 Q8 y& S: y  do4 i  b2 u2 \9 m  L! c
    ALTER_HK_FILE="$ALTER_HK_FILE"$$7 c; N8 P9 C$ H/ @+ V
  done
8 x( z, E- }! R0 {* Bfi
2 G! ^" C* ~4 m/ s0 _export ALTER_HK_FILE
* k& f/ G. f% x; l+ S) F7 w( S
/ m, i$ }- S4 u9 t/ H* x1 I#generate monte carlo related temp files based on pid
# ^) [0 N5 c( S; m8 R- kcleanup_monte()
1 Y2 u5 P% F0 \+ H0 K* s8 m{: l1 w# b( j" I3 ]% u3 T  h0 \
   /bin/rm -f $MONTE_IMG_FILE 1>&24 V8 a0 b0 g$ d9 \- [
   /bin/rm -f $MONTE_IMG_FILE.gz 1>&2# ~8 [: s% g0 o& D7 R' y
   /bin/rm -f $MONTE_COUNT_FILE 1>&2
. p8 k' P0 R/ ~* z   /bin/rm -f $MONTE_CFG_FILE 1>&2
+ X0 ~9 D$ t# x: q6 A! k/ ]6 I}/ y: V9 ?7 D' T0 |. h
6 }+ {/ M2 h8 P" U( X! M
MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$
  D; {0 N# p- T; R$ b+ h4 B. t9 A9 u6 ]if [ -f $MONTE_COUNT_FILE ]- G# Z. o4 C3 E1 p, I" J2 k
then! \$ r8 i2 s' b9 F
  until [ ! -f $MONTE_COUNT_FILE ]: u. a; ^8 {& H/ H& \# U/ x! B
  do
$ ?! k# C1 K; F0 ~- @9 e% s    MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$& F" x+ l& T0 w* o# q
  done# W- E* ~2 M# I4 y
fi9 p- j( A0 ~( c. M- q* T
export MONTE_COUNT_FILE3 c% d. U: j7 \/ Y9 _- W* h- X
' H; u8 D  e8 g# t5 y1 p
MONTE_IMG_FILE="$MONTE_IMG_FILE"$$4 Y6 K5 ^" \5 R7 r
if [ -f $MONTE_IMG_FILE ]
( e8 b- Q! z: R9 p. g2 B7 sthen
# B1 s. D% H# d  L- X( o* Q" ?  until [ ! -f $MONTE_IMG_FILE ]
% B- K* V: H2 w5 P  do  r; J  O$ k* g+ o0 q
    MONTE_IMG_FILE="$MONTE_IMG_FILE"$$9 b5 V$ y2 x6 c1 S+ Y5 X, {
  done
) o, z' T9 o6 I2 e3 Wfi
/ s4 i9 h2 q) X+ p8 }export MONTE_IMG_FILE6 Z+ \! J2 n" R5 g1 Z
9 S$ C) R% W5 y/ a) t
MONTE_CFG_FILE="$MONTE_CFG_FILE"$$% N8 @- k6 s8 E. K1 v" Z
if [ -f $MONTE_CFG_FILE ]
& H! k" a. L: G6 R$ i# m$ |/ J5 Dthen
: r# X/ h6 A. R, \+ T; `  until [ ! -f $MONTE_CFG_FILE ]
& Q0 ?; ^# I! H! B* k  do
; m) o  _+ w$ [+ _  c    MONTE_CFG_FILE="$MONTE_CFG_FILE"$$
3 o% \. R* M5 h2 K  done
' Z! e( J# i; m- W1 S+ rfi
6 e% ?7 D  S0 f) C8 s; h9 N
* [$ o& D! f4 w- T% l. o: U, H# main iteration) T' m( R* {9 X# A- m
run_main
3 {8 I; j' ?% j* m# U
' `+ q# c. [' R7 m8 \3 c* X- Zif [ $ret_stat -ne 0 ]   X! d! X$ |1 L0 |( n& E9 B% X
then
1 {3 \' [6 h- C5 _* N8 x  cleanup_alter
: Z  S, {" ]" d# J9 c1 x: l3 [  cleanup_monte1 s8 {# f8 v" K' d
  Exit $ret_stat. r. f5 i3 y5 ^5 P! |4 n7 ]
fi: v9 c2 @# j. x

0 c2 B! Y) x3 L$ V1 C4 _3 u#Alter related iterations; v" Z5 Y9 o8 ?- Q! D3 C. C) p+ j
) q: X; b+ G) L' X, I0 H7 x* M
iterations=0+ b; l5 B+ v# [5 [8 }/ K& k
count=0% S( A+ Z* D& s$ K2 y- B, b
if test -s "$ALTER_COUNT_FILE"
0 Q' T0 n, E# s; ~0 B1 b) R; d' ?; Rthen+ e" C9 R3 J5 c6 E
  if [ -r $ALTER_COUNT_FILE ]; then3 B" D* K3 m2 O' Z0 @: R
   exec 7< $ALTER_COUNT_FILE  ]5 S: [% a+ G
   read iterations <&7
  y9 v$ A" u4 t& v! O, z: u fi) [! ?* @. E. G& z- K
fi
( z( s) ?+ D7 m" p7 g3 E7 O8 H
trap 'echo Program Interrupt; cleanup_alter; exit 1'  2
! F1 M! T& G) \/ l( twhile [ $count -lt $iterations ]
9 T6 I- X6 f4 L, U; Z8 O" }do9 S& u: |4 z( I" h. m5 B; }
count=`expr $count + 1`
# ]$ x+ r4 o7 e( G ALTER_COUNT=$count% a# Y  Y6 y# L! _. L0 ^/ J
export ALTER_COUNT
7 V( P1 Q; ]+ p  R9 A/ V4 y# o% ^+ `$ }
run_main/ D* Y% S0 p3 Q; }
% e* |2 g! C+ ^
done
+ F$ U0 m, d! @+ U. r
% T8 e; `  i3 z5 E' X* q#Monte carlo related iterations" Q/ W  H7 b( J$ v( P
' A7 o' u  O! O! L9 ?' M3 e% J
monte_runtime_summary()! s2 c$ J2 Y8 _" b/ a8 c
{3 d, {" o  O6 S( z4 M. j0 C6 w
  keyword_1=real
, W/ \- e* ~+ o* z  keyword_2=user# N2 V- J7 h0 v7 q  A  m
  keyword_3=sys5 h. N4 Q2 y) G9 ^7 P' N8 q
  ofile_prefix=nanosim
; u+ m) z0 s5 `: D! o0 T5 c  f* v5 L' w" U
  if [ ! -z "$o_option" ]; then7 M* ~4 [6 r$ [
    logfile=${o_option}.log
& y7 q* i$ h& P1 g0 Y  else" e7 H7 w- b6 e4 p
    logfile=${ofile_prefix}.log
- T0 J9 S: j) c$ w8 Z  k  fi
* [2 c& O  Z" R1 m8 M  v4 Q5 Q
# S4 N' R7 N- c, W) y5 B; Z6 R  if [ -f $logfile ]; then
- S; [% Q$ P9 c$ {2 b0 X: q5 }7 Y    echo "*** Monte Carlo Total Run Time Summary ***" >> $logfile      
- i' c- U; f" o- [* U- U    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 }' >> $logfile4 N- w8 w: R* B+ P" {7 F
  fi" H  o& A4 A& l2 i
}
" L) I( \! d2 F
. w& h: B! N8 Z7 H0 \5 Qnext_monte=04 C# j! I* q( _+ J0 h0 t, }: ~! b
cur_monte=0+ |& g5 e' N% M" b% c  L: _
& J9 k# J# b2 a, G0 b/ {# H
if test -s "$MONTE_COUNT_FILE"4 G- V, \8 U1 q/ m; p
then, s5 j; _" U0 u9 s- \8 F  o
  if [ -r $MONTE_COUNT_FILE ]; then
  o: r+ H% j2 v. {" C   exec 8< $MONTE_COUNT_FILE
. b9 O! E  n& C! c5 A' }; d9 P. r" O   read next_monte <&8
- c: Z8 u* Q( c/ m, f3 V# s  fi
, e" ?3 o( ]9 V( I( W! t: j: _# Xfi
, N. ]& j6 p3 Q" i( T; w  A" S+ r8 |: X0 W# [# X( ?
trap 'echo Program Interrupt; cleanup_monte; exit 1'  2
2 y, J! C, N. i% O8 S6 _- h4 ~while [ $next_monte -gt 0 -a $next_monte != $cur_monte ]
% f$ \% j; h- |do
% n7 t& A- S; P6 P* S  NS_CURRENT_MONTE_COUNT=$next_monte( L( }. O* t6 x9 [5 m. T
  export NS_CURRENT_MONTE_COUNT
# I8 t3 E1 S' P4 `- i, h6 h
. Z) M8 H$ h0 N& a  R5 y( p  echo "restore_ckt_state save_file=$MONTE_IMG_FILE" > $MONTE_CFG_FILE
) f  p. N6 Z/ w3 a; l  CMDLINE="$CMDLINE -c $MONTE_CFG_FILE"4 R* Z% o2 P+ H* k. [% @
  run_main
) [1 n* m6 {; O1 ?
: i* B& d6 w7 M  K8 l, _  cur_monte=$next_monte" h) c; Z5 I7 V
  exec 8< $MONTE_COUNT_FILE
/ C- s) h; x5 e  read next_monte <&8
. L; ~: O! |) `" qdone# j* L6 N: f4 d$ G' B& R: \

0 S2 f  k4 e2 ~. mif [ -f $MONTE_COUNT_FILE ]
5 Q7 b9 g  j8 z8 F3 a/ B+ u  Lthen
5 q5 ^7 L9 D& d4 I; S- h  B6 k  monte_runtime_summary0 t6 x3 m6 t4 o5 T
fi
, ^2 `  M1 B9 m! y- B
% t5 \5 C1 U, o5 q4 _/ y$ lcleanup_alter0 }, h. h8 i" D0 p$ r) G
cleanup_monte! i9 u* S' h9 Q1 s# `" L+ C5 `

" r+ p0 R0 r/ K5 e' _* gExit $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-5-31 03:16 PM , Processed in 0.132017 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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