Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-5-6 13:58:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10Chipcoin
各位大大好:
5 g/ G2 D, n4 r                      小弟執行nanosim時,卻無法跑出視窗來,有個錯誤可是我不清楚該如何解決?問題如下
" F' `1 \, N! ^3 J. @) T: f                      [: 113: 64: unexpected operator' }3 Z  F( v, L
/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim: 1: Syntax error: Unterminated quoted string
( a! T5 @, B2 s! b1 J( H有大大遇過這方面的問題或是指導我方向去解決, 謝謝. 3 z& ~* y  K5 R8 q
我在猜可能是這個檔案內的文字需要修改 但不知道該如何修改?& }2 m; ~- v+ m' {) F
以下為/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim 的檔案內容:( c" Q7 z% J9 i! y
    #!/bin/sh
5 l' V. X8 U& E& Z. Q#$ a$ y% [# o6 s- M8 V5 e
# Copyright (C) 2001 Synopsys INC* a- y/ X3 `& J3 E8 A0 c1 q
# EPIC Dynamic Simulation Wrapper (DSW)" w# W* Q! E# V5 o+ U5 O& u, D# P
#9 X5 c- }0 Q. C& G  j+ f, O
eval ${DBG_EPIC_WRAPPER:+"set -x"}& H9 U. m/ n# ]4 \- ^
9 p6 W& Q6 B, ?* c) e; C, E
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then. Q3 E5 \) h. O# h7 _4 ]
    TEMP_ARCH="$SES_ARCH"
! u0 `# f+ b) Delse
# @; ~0 D( p0 ]+ w    TEMP_ARCH="$EPIC_ARCH"
2 c$ ]9 E+ L( Q9 Z$ n0 k, nfi! B+ _% t1 q" d4 l4 u8 ?, H

8 }/ S% C5 C2 x0 B/ ]$ E0 P& uscan_for_hva_args()$ j/ u: i) m: x5 F8 z. W  e& F
{. \) D3 E* {! x/ G1 `/ n
  /bin/rm -f hva.init 1>&2
: V* A/ a. y' a- H/ m  while [ $# -gt 0 ]; do
  D! `9 |3 [5 Q* x    case "$1" in
9 b+ X0 `, }: y) K      -vaf)
6 t5 V* X0 A" J( q1 O* i/ G0 P           have_vaf_flag=1
! Z# R* m9 k, v- i7 T& w9 [* L  _           have_va_flag=0$ ~( Z2 h# x" K% e
           shift;/ S' P0 L5 D" ]0 X; G0 n
           continue;
) }' R) N* K, Q8 t        ;;* K2 q$ \+ X' B( e
      -va)
* I7 ]* Q! H- Z" {           have_va_flag=14 n: E8 a( E1 ]! `8 L
           have_vaf_flag=0
4 h& n8 M1 v2 j7 i9 \$ _/ _6 S           shift;% J) a. ^! F$ o1 [. L1 S5 H3 h! r
           continue;
5 R; f* F' R9 q$ h% {        ;;
3 Z! w- I1 I- f3 C9 F  @( C5 \      -*)
$ Y& d8 W  e4 d% n' S           ARGV="$ARGV $1"4 ]9 y! _( f' r9 ?
           have_va_flag=0" D1 M7 [+ R7 R, v0 j- V9 Z
           have_vaf_flag=0
+ p! o# P! I7 h: ~) `           shift;; I% p" K: f6 j* S* L" f
           continue;8 j+ H: r+ O( J7 C4 c, n
        ;;
) G% B, \! q% W2 a8 o1 e# u      *)
& J, v% F" {; x, P6 ?9 N* u           if [ x"$have_va_flag" = x"1" ] ; then 2 Z: V; L4 j0 _* h
              VA_FILE="$VA_FILE $1"/ u! k8 W6 F: z$ q( c+ I: q: b9 B. g- G
           elif [ x"$have_vaf_flag" = x"1" ] ; then , D4 X- u/ S2 L& d0 F$ E0 p
              X="`cat $1 | sed -e '/\;/d;`"
5 p0 O8 C7 m3 C3 Y              for token in ${X}; do
4 Z$ D# z+ ?; Z  ]/ i  Y0 R                 VA_FILE="$VA_FILE $token"
; B2 P- U1 T& ^+ \5 c) T              done & A2 X# I3 H) p, ]1 x+ B
           else& n1 ~1 x( l8 C
              ARGV="$ARGV $1"" b' l6 _: v  O4 p' X! T
           fi% R6 W% h) \! D3 B; s( D, r, ~3 u  D
           shift;5 a  c0 e$ r' v: Z- @% B5 Y
        ;;9 d* x6 M5 m' A( [" q% [$ b
    esac
3 X2 L' y: z* n/ l% ]8 V4 E  done( G3 E! ^% N6 u7 Y& n
% J! D7 H5 v- f/ J; f# t6 r
  if [ x"$VA_FILE" != x"" ] ; then + E4 l. {2 N% v/ z: J4 S
##     /bin/echo " xxx ARGV $ARGV", s$ t. }& z! u9 N1 V
       /bin/echo "choose nanosim $ARGV ;" > hva.init
: {- Z& F" N# M       echo vcs +ad=hva.init $VA_FILE -o simv
; p0 ~! a. ]- ]5 w5 B  h       vcs +ad=hva.init $VA_FILE -o simv
  U# K. p" b9 ~' Z" f. z9 N       exe_status=$?9 X. s2 ?* u% Y- K
       if [ $exe_status != 100 ]; then
: g( F" ]' ]6 L' z0 F          /bin/echo ""+ T- e. H, H- v, |
          /bin/echo "ERROR: Execution of vcs exited with code $exe_status"/ @/ h& j. t3 K' Z
          /bin/echo ""- n; G+ ~- b3 i/ r4 d' I. l
          exit $exe_status
. Y2 @- i6 W" ^6 A2 f       fi
4 w% o& J- Q0 q$ A) @8 A! K" [       hva_files="-n simv.daidir/amsVD.ntl simv.daidir/amsWRAP.spi"8 o$ [6 V6 J% Z
       ARGV="$ARGV $hva_files"  `) k9 X6 v/ K3 x! Y% b) T
  fi: I/ a' s# C7 o/ G$ f
}
8 b- ~; E# `; E9 F: ~#-------------------------------------------------------------------------) ^- H' ?7 S. O9 W

  p+ |6 M- B1 b% k! P& |cleanup()% |7 m( |1 ]4 q1 w* {# J
{9 {1 Y+ M, i/ F. g0 L5 X
    if [ -d "$rundir" ]; then
, V/ |4 q& k+ T- X! b        # On AIX, a .nfsXXX file is created if libModel.o is removed4 Q- X0 g' n7 t5 B6 e
        # so .epicrun is not removed because directory is not empty.
# `3 l4 R  S0 S/ T        # Solution is to remove it again if the first rm failed) x% t9 d# Y% i1 \6 Y# |
        # (rm -rf $rundir || rm -rf $rundir) 1> /dev/null 2>&1
0 [% T; B4 `6 B! G1 I! q        if [ "$EXTRA_CAPACITY" = "YES" ]; then
0 y- |  M* G; K        chmod u+x $rundir/rpcidfile8 ?, N) n- r2 }, m$ B. M
        $rundir/rpcidfile
9 U3 R6 h2 I- c9 [        rm $rundir/rpcidfile! |( s( a5 m3 k7 a" @7 G$ N
        fi
7 x* h, s+ a% O  |. M' Z3 n! Q' S' ]        rm -rf $rundir5 \' \9 S' J$ F. T) ?; B; j
, s- d* Z/ g7 E7 j1 c+ r
        #Due to NFS problem, we have to copy files needed to
+ a# p7 I9 k. S& |- b0 I& d8 u        #/tmp/<temporary directory>, then symlink's files
2 g! r: F) M/ {3 A        #to the local temporary 'rundir'. This avoids the problem) \: j: Z/ G+ \+ m2 c
        #to remove 'rundir'
! L8 w+ a* ~0 r0 o2 B1 @        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
. i, _9 m8 ~! V$ q  ]          if [ -d "$tdir" ]; then
! ?8 H8 X% p3 t8 k+ ^: |# `* I' D$ L            rm -rf $tdir
7 O0 G- F- i/ ]: V/ _$ m$ o          fi
% m( j, q1 @- q) _5 B; I        fi
- c8 p$ ?, L2 e- P    fi
9 }6 N) ]4 ^6 u    if [ ${exitstatus:-0} -eq $ld_err_code ]; then: m( G, N% @  b0 g
        [ "$has_model" = "YES" ] && rm -f $cwd/libModel$suffix
/ f$ t5 L4 K2 \2 ]0 e: K9 X        [ "$has_custom" = "YES" ] && rm -f $cwd/libCustom$suffix
, J$ m" K  Q  Z+ g- z    fi7 F; v) V  G, D
    [ -f "$EPIC_SCRIPT_MESSAGES_FILE" ] && rm -f $EPIC_SCRIPT_MESSAGES_FILE 1>&22 a$ i  b9 g3 V3 _- K
    exit ${exitstatus:-0}
' o2 k; [& b# E8 k# h}) W0 }2 o* `3 Q! X3 l" X5 Y; Z

/ H+ u# Z. c2 h7 lExit()/ b. w% O  Q& w8 g0 X7 J
{
0 y% h4 _" q& e6 v+ K    exitstatus=$1' c# ]# N3 C% K8 h# l
    exit $exitstatus3 X  T' B! x3 d2 d$ \
}
0 R- ]& E$ d3 G! H% L5 M$ a3 H0 m0 s1 R+ ~0 j- g6 M; i5 u+ g5 O9 R
# get_epicrc filename keyword
3 X7 S  }+ G- y1 Uget_epicrc()0 }* O0 n) z3 h! l
{
" o# V: k) k+ B8 w+ h- E8 Y2 a    [ -f $1 ] || exit 0
  X  x7 b2 Q, e, q* t( R    key="/^$cmd2:/{print \$3}"
) o& D  k' M* [3 ~0 k' b" L" t    awk -F":" "$key" $1
# q; N9 c& e# o- l7 ^( Q) a}  P& x' r/ Z# d8 v9 E' F/ L
; c" v% Q7 c& W7 x5 I5 Z
#- x# y$ ~7 r& R) F6 f
# set datasize limit to hardlimit
) s, S- q: S- g8 C7 ?2 H#
( C8 d2 M+ n" D, ]( ]set_data_limit()
' f0 u6 w# [# K: C! [" g5 \# W7 S" C{9 T/ C+ I  T: W: ~
    dbglimit=0
: J' Y7 Z* D; ^8 z2 x! X# I    hardlimit=`ulimit -Hd`
; \; K2 D8 D# g    softlimit=`ulimit -d`
! c! M6 r) X  W1 N7 L% z6 P    desiredlimit=3500000' m7 z1 D$ \4 T8 m/ |4 [7 v
    hardisunlimited=0* ^8 m; a+ `5 g
    softisunlimited=0
4 c6 \6 i: `/ I# A# e4 S    is64=0
" H% M6 n: e  \6 t# u! ^( Z
: W# r# s* F- ?' R    case "$EPIC_ARCH" in6 T5 }# E) l3 w* Q8 H  E$ ~
    *SUN*64)! H) q3 B7 j2 M( t
        is64=1
9 l  L* U1 r5 @& T        ;;
7 a! o8 x$ k4 x8 e: ?) o; S    amd64)% l/ f$ q2 ^+ e1 l
        is64=1
8 l+ b) Y/ c- L8 A6 ?" U! [! }/ b. f        ;;
( n* E) M; W" q* t( e" L    x86sol64)
7 S0 j/ v) q" q( s        is64=1. P' C3 y$ A) T+ R: t
        ;;9 x9 k1 _. `" ^4 r; {, K- }
    aix64)
, V6 z% G7 @! A" q' ~, p: _        is64=1
5 N) d, K* I; _' s. E0 h$ F( g        ;;; @, n; z, B/ `  [, P# H; \
    suse64)
/ E' a0 C) g7 |  o; Z+ K- D        is64=1
: ]1 Z6 i8 e0 A3 f# t        ;;: s7 @6 E5 X# ^. z
    esac
3 p! t- u7 _1 W* ]- y2 V
' t! I$ ?9 @& [2 D2 a) d) W3 y    if [ $dbglimit -eq 1 ]; then! f" |* \- E+ A$ k: h+ ]
        echo hard $hardlimit soft $softlimit% V/ |$ f" Z# M: P+ v2 f  p: X
    fi
, S# D/ g: G! ^& j$ [' n  q+ P. C0 T' K% R4 u- Z! \) g0 S# d
    if [ x$softlimit = "xunlimited" ]; then4 {. [9 r# E$ h: C; w
        softisunlimited=17 M- z) f4 c( v- B. x3 W1 Y( G2 T
    fi* L: t$ V7 ?& V

. j- k7 w7 e: J- Z5 ^    if [ x$hardlimit = "xunlimited" ]; then
, E" |- ?* o, y, z: f1 A( H2 O/ P        hardisunlimited=1
8 r/ b1 d( v! Q- \. k* o    fi* \! K8 N9 z7 p$ J) Y+ j
6 b( I5 Q/ M' n* g; Z- F7 t5 a
    # 64 bit machine should have bigger than 4G
' U0 S5 L0 A, g( X2 K    if [ $is64 -eq 1 ]; then' b* F# C# J! x/ Y6 d( T, ]
        desiredlimit=5000000
) n; \2 x. U3 A; u$ |- o. o7 H    fi
3 }% x6 ]$ u: [) B; O# k" m1 I4 ^( f
    if [ $hardisunlimited -eq 0 ]; then
- _* V3 H9 I( }6 g- Q7 [, f' ?; t        if [ $hardlimit -lt $desiredlimit ]; then
; }% V' ]; Z) `2 ]1 c            echo "WARNING: datasize hard limit $hardlimit K is too small."
3 i& G6 `0 Y3 h! o6 K        fi! n0 d! Q; L5 ?9 N0 }- Z
    fi+ B8 f2 m" J. ]; m" M, ]
* T, A8 z) U& q' y5 k2 t
    if [ $hardlimit != $softlimit ]; then, L5 H* T7 _$ i1 r1 H9 e6 C. e
        ulimit -Sd $hardlimit. K+ Z5 R( P* \" D1 D$ d" Z
#        echo "WARNING: datasize limit is set to `ulimit -Sd`"
+ f% J- \# L& ^& o) H    fi" a4 `0 T4 ~: L. ^' G9 j
, S+ _- C* I2 N0 f2 U; o, i  W! L
    if [ $dbglimit -eq 1 ]; then& a. @( y1 d- T5 ^* S% X
        echo datasize hard limit: `ulimit -Hd`8 S9 V- |$ M. e% ]  `' d, P) u
        echo datasize soft limit: `ulimit -d`( u, @+ e6 P; r) m2 T
    fi
% @1 Y- D4 `) p& h1 M}4 @& W8 r" Z* E: L

: D  G2 n2 v. u- W#1 l2 D) m3 t8 ]3 C) A0 U: M: q
# set stacksize limit to desired limit
% H3 m( R4 G% k' j#
2 I. G4 ?) ^( _- _' }$ {# [set_stack_limit()
" t  T; K8 q4 j6 ]* Y  f{
" T( P# K; a+ ^8 Q    dbglimit=0
: k0 @. ~) ^6 S9 A    hardlimit=`ulimit -Hs`# w1 B) G6 W0 Y. U
    softlimit=`ulimit -s`- u( q% J$ R# R  N6 f
    desiredlimit=60000
+ r. F7 X0 j' ~% i1 ~$ H    hardisunlimited=0
3 }( G( P, u0 q    softisunlimited=0
+ ?0 |$ q, D0 W* M* [    is64=0
" h0 o$ D' p7 ^* o* [% ~' c  h$ S8 u& w4 p7 A( y8 i- z& Y# s
    case "$EPIC_ARCH" in* J/ i3 H. R' ?- K
    *SUN*64)
+ Q5 |& z) S/ g  r/ S& J$ `9 _  Y        is64=1
0 y( D6 s8 n  _6 S. S' V        ;;2 `" ^- `; U+ j/ l* L2 n) T
    amd64)
8 Q0 w1 y! M3 D% ^8 }7 [- y2 U  U/ f        is64=1$ D8 y1 |, Q, e2 A8 p: B
        ;;' R2 o7 N' W6 E. v, ^$ U
    x86sol64). D7 y0 [% }6 T) x. @9 e3 F
        is64=1
5 ?* N4 o: P  T* ?+ ]( X  X2 M        ;;
- V6 _6 t# L. t. @: L; c    aix64)/ }8 f& l& {7 {* z+ A, a
        is64=13 U' n  N3 h5 g* j
        ;;
+ K$ X; k8 R: W  ]# g( f1 c, s    suse64)
$ m# _- w* r! @6 e, R        is64=1# b# p' `9 W# D; g/ v8 H5 f7 R+ L
        ;;8 ~8 j8 A8 ^# g
    esac
3 x! G" @) l6 g' ]2 M7 a8 K% k2 ~. X& w$ |
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then, G! m. q" _8 M* c2 f! z4 l' T
    if [ $is64 -eq 1 ]; then2 i: h+ u6 S8 {6 p' v
        desiredlimit=200000
7 P, n3 e, ]$ x  J, y# G    fi
0 e8 L. A+ r: Pelse. s$ ^3 W/ _& c! l1 q
    case "$EPIC_ARCH" in
3 `6 D( O! x4 _& C  H) f    *SUN*64)+ o0 e0 W- n* R# O- O- l
        desiredlimit=200000. {- E+ e6 d* T0 ?/ G2 m7 E
        ;;
$ z6 [5 [/ D" a    esac8 g  M/ s6 J6 ?$ {9 W# u' x$ m
fi& O% {0 q  {% H/ T! t
       
- _8 M0 Q+ _) K4 m4 ~3 z    if [ $dbglimit -eq 1 ]; then& ~/ M1 w. V4 m
        echo hard $hardlimit soft $softlimit
, G6 }4 F5 {1 G    fi) N% E1 Q1 }, U6 u: D
7 P' Z7 ]3 T7 E
    #stacksize can not be unlimited, pick smaller number- b' v, D3 J' L) p4 l
, [* I2 ?$ _/ m4 `: d
    stacklimit=$desiredlimit' _) T. h6 N5 ~: H, i

* q1 Q* j; J$ a( {3 d% `. `1 d$ r$ C    if [ x$hardlimit = "xunlimited" ]; then' q0 N( m; r+ E8 \8 y) L
        hardisunlimited=1
! J+ a! P2 B, n. _5 f    fi  O  U, j5 P( J- R8 \. ^; b1 r
/ }, J, O" T. r8 }; Q6 M% N. Z: Q
    if [ x$softlimit = "xunlimited" ]; then
# ~( I" e! s1 D8 }' r+ h        softisunlimited=1
: E2 x# v7 r! A7 ?1 f7 V/ N    fi
5 K2 m, _& M( k, w5 E) P! b5 B
" f: q0 @/ X. f: B* \, z    if [ $hardisunlimited -eq 0 ]; then
7 J' s8 f; v7 m" |) l        if [ $hardlimit -lt $desiredlimit ]; then
) g1 k3 o, p5 q; j. b            echo "WARNING: stacksize hard limit $hardlimit K is too small."
; \. }! x' J+ V, S' O9 s            desiredlimit=$hardlimit
3 O, K; }7 f" N( H7 P) W, \1 `            stacklimit=$desiredlimit" m9 r9 i- `7 G
        fi
. I2 C) _8 Y/ \0 i# n0 o4 v    fi
% F  s$ n' n* M7 X8 M6 s' t9 }) V* R* v8 ~9 C8 y
    # desiredlimit is set to proper value (< hardlimit)
- k; q6 X7 ^7 p" e9 ^* E* c& c( [# P! ]* P* W1 x+ c
    if [ $softisunlimited -eq 0 ]; then5 [6 M) C, M' m
        if [ $softlimit -gt $desiredlimit ]; then; s8 Q, q/ E# W5 [" ]
            stacklimit=$softlimit
* ?8 A/ m! O3 A, Z" Q        fi
$ m4 a' g  T7 j    fi+ y( U$ W; A+ T3 L# R2 i

8 X3 {* [3 F0 L; ?3 y    if [ $softlimit != $stacklimit ]; then
7 ^0 I+ e6 I% n+ [$ u0 K- M: _. p        ulimit -Ss $stacklimit2 J- z; J8 q' V0 f- r
#        echo "WARNING: stacksize limit is set to `ulimit -Ss`"& N: z! U& s' J% n; ?. O+ z: D
    fi
* n0 r7 V1 p/ X2 r' F& C5 m1 y6 v/ @1 j( F1 Z' Q- Z! E) r
    if [ $dbglimit -eq 1 ]; then
7 S1 u7 _  U% j" e) X9 @        echo stacksize hard limit: `ulimit -Hs`) t2 y0 C( f: u( p0 s# P5 @
        echo stackize soft limit: `ulimit -s`
) a. v& J: e. x: |9 l3 S  H  [$ d    fi
: A7 h3 }/ W4 e: v}
7 C) M) i& j/ Q2 d: T$ y/ D1 ~$ Q  N6 @" A
open_epicscriptmessages()$ g- B. m4 _$ L$ \: @# E* I* K
{+ {# q# f; Q* ]9 @- W8 K
#generate  temp ".epicscriptmessages" file based on pid
+ z$ b0 T) @* i4 nEPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
, h( w2 s+ q/ ^, Z% P# Uif [ -f $EPIC_SCRIPT_MESSAGES_FILE ]$ C- [! o5 b7 g' _& Q) c5 L
then
" v1 `" [: P, x3 T) x4 F  until [ ! -f $EPIC_SCRIPT_MESSAGES_FILE ]
  j3 d9 b- y1 G# g  do) l' m: w( J, `- B! D1 N% d- m5 u
    EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
) h+ I3 Z  Y  W; m* w3 }  done. G0 o, t9 t3 L. N$ C# `9 m
fi: @" v1 H# E; {: [1 d3 _
8 }; E+ c4 P3 L- t# c2 R8 S
export EPIC_SCRIPT_MESSAGES_FILE
5 [8 m9 T$ x' y}4 w' X" a; E* \2 t+ k$ B+ G

# Y) q  t+ D# O) o
' f+ Z& D; ^! X/ U, e5 m( ~+ {, ecmdname=`basename $0`
9 A3 Q+ F$ c# V* Q4 ~postgres="n") j( O; [% N+ {- |: ]
ostore="n"0 n. [) y  C3 i. \0 ?* t
gui="n"
/ S9 f' Y- c9 f7 P  |8 ddatabaseOn="n"
4 Q% M3 D" O& v9 u: [) T8 `. \# of_next=0
2 l9 l8 `" F; v- W- x- Lf_option=""% m/ A5 O3 E) k1 V! L+ h
o_next=04 Q( P0 E. d6 h3 g9 f3 c
o_option=""+ W% C* z0 C, ]0 X
workDir="". q; k. m/ {0 ~/ k/ E. Z
workDir_next=0
) ^3 K  d: @1 B6 _$ F- xerrFile="powrmill.err"- v/ U+ L. w! p! h( o0 A  k
win32flags=""6 f" u) n2 H# Q: r) P: q
ln_default="ln -s"
1 x3 |( R+ V1 B! Y( A/ L! r. [' J6 T0 E" w6 _! J2 V0 T
har_hilo_file="". G3 W/ e  H8 {( }( J6 p6 Y
have_har_flag=0
* E3 W( U% }; G  _; O! Ihave_har_setup_flag=0
+ p+ ^! K$ A; \4 Gis_special_har_run=06 c* G1 C( C2 P3 d1 {3 h# T; a+ l! b
har_ofile_prefix=""9 F4 C2 a7 A) z+ X5 b+ W8 n- s
" u4 ^- h! B$ H" c
have_va_flag=0; o( {# E0 V1 c* I  x, w7 t
have_vaf_flag=0
! |& s" J* s2 wVAF_FILE=""
7 l( }# B" h0 G% ?VA_FILE=""7 E8 h( f6 p. x! m- o4 ?5 Z, c* b
ARGV=""
( j( O$ I1 z* L  p/ L* C5 T) A$ e$ X% p: E! ?8 h& D2 R4 w- ^, E. s
ORIGINAL_COMMAND_LINE=
$ ?: I1 X  Y$ h$ v3 a- \LOOP_CTRL_FILE=".ns_ba_env"
# r9 R3 n+ F2 ?ALTER_HK_FILE=".alter_hkf"- n/ G) E; Z4 b3 G+ {4 z( j0 `
ALTER_COUNT_FILE=".alter_count"
" H4 x+ w' v+ P) H: {MONTE_IMG_FILE=".monte_img_f"
1 L6 \$ T' N+ sMONTE_COUNT_FILE=".monte_count"
* u) Y0 v4 d8 O# m- QMONTE_CFG_FILE=".monte_cfg"- l4 \8 @5 J1 _0 y3 r: D" E. t/ ]
EPIC_SCRIPT_MESSAGES_FILE=".epicscriptmessages"
3 Y' h/ M5 l& M; R6 O
& U- |. X3 V+ uopen_epicscriptmessages $@3 V( j2 o) W, @3 B7 W

& A" n. C9 h0 Y* K' S3 b) }7 y3 bscan_for_hva_args $@3 ~  G7 Z  ~* G- A  e
5 N! `/ V8 U2 y5 v
scan_for_har_args()
. a& v! _& D; m/ H6 G" O8 R{
. @7 a- M9 P4 b/ h  while [ $# -gt 0 ]; do
& U0 t; ]7 k2 @1 Z2 Q5 k: a6 g    case "$1" in
) J( q' F& P# w: u8 b: ~  \3 k; K6 d      -har)8 \' ^% s" j0 F
           have_har_flag=1
- {& c5 Y( C3 O) ]. W" T           [ $# -gt 0 ] && shift
7 T+ E( u% f/ [8 z( ^1 V           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then
, L2 Q) W8 Y% w+ G$ V             har_hilo_file=$1, S* O. Z4 k+ ^$ ?  P7 T
             shift
4 h& a, M- _  E& ?0 R           fi  E: Z: L# x, D* X
           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then  b$ l$ e9 b" x
             echo "Too many arguments to -har flag. Only one hilo file allowed."( w9 S$ ^7 G8 \7 L8 R: j
             exit 16 e0 Y" k7 C0 j; C) P+ S& s
           fi
, D" u+ t" H% L3 ]. }; ]1 {           break
' H8 r1 f% B- ]+ b3 \0 ^2 m% f        ;;$ x3 S! Z7 q! i1 Y4 k: x" O
      -har_setup)
/ k$ y& M# l1 J; E/ b/ K           have_har_setup_flag=14 Y* [4 X- t$ b5 q' }% y
           break6 {/ O" Y' M9 y# K' {& h
        ;;
# f3 F6 R3 o$ [! _4 U$ l' Q3 h) U; y3 ?      *)% w  l/ j: `- ~+ F# s
        shift; y5 P$ c. Y7 w- I/ O* T
        ;;6 f- i  i! \" X
    esac* ^( W% P. f/ x* u1 d
  done( n1 ?/ D  j$ f
}( R$ \0 m" p* B

9 o( ~& U7 _) dscan_for_har_args $@
0 D, g& `1 a$ E+ p
3 S5 I3 ?  v( Y% Lfor argv in $@1 }- Y5 S; N3 u: U5 q! x/ Q
do5 U8 G+ t8 ?7 f' l4 J: `2 x9 b) x2 d5 A
   ORIGINAL_COMMAND_LINE="$ORIGINAL_COMMAND_LINE $argv"6 k% s. r- N1 }3 O2 u
    if [ $argv = "-gadb" ]; then
8 ]! a4 o% ~6 S' r$ l, {        databaseOn="y"- |; S4 b9 u3 C$ a3 f9 ?* w
        workDir_next=1! R4 T' q) F  k6 L
    elif [ $workDir_next -eq 1 ]; then
6 Z7 w# q! x; _: }/ z        workDir=$argv& F9 i4 `  n5 Y! Y. ~* o4 s2 t, p
        workDir_next=06 f9 Q0 B4 o% g! t; h
    elif [ $argv = "-ga" ]; then/ ?: e; w2 \- A" S1 ]
        gui="y"7 h6 K+ v- {0 ~9 J: r
    elif [ $argv = "-f" ]; then! e* D. f3 n- x9 W
        f_next=1; F7 Z$ w! m* g
    elif [ $f_next -eq 1 ]; then: z# R1 q/ m4 g3 t5 p( _
        f_option=$argv: E6 \8 U! X; X; O. }$ k  J* \& }1 B" ]
        f_next=02 W, F! s2 r9 h. M
    elif [ $argv = "-o" ]; then
5 \" O' `' m* y% `" ]/ a, l        o_next=1
% c( f  U& R+ T. E& a7 N    elif [ $o_next -eq 1 ]; then/ y% \5 I9 ~/ x$ w) N9 l6 r# ~
        o_option=$argv
% W$ D  x7 i( G, F: y% h        o_next=0- u* J8 b# n& f9 W
    fi4 N+ ^9 G! [- M$ \- Q& z7 e
done
" K/ W5 L1 F: u+ ~echo "Command line options: $ORIGINAL_COMMAND_LINE" >  $EPIC_SCRIPT_MESSAGES_FILE ; T9 h, T' Q) m0 V  d
7 V6 z5 m9 j! A2 Y
if [ $databaseOn = "y" -o $gui = "y" ]; then; R  k& x, U* l
  if [ $cmdname = "pathmill" ]; then
% l0 q$ S* M2 C5 I' w' @    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5"  -o "$EPIC_ARCH" = "SUN4_SUNOS_5_64" ]; then
8 H2 G# B3 E$ W/ c         ostore="y"
( \, \8 }" k! Q         postgres="n"8 U; I  i/ M( J  G4 X2 F2 D. \$ V
     else
$ L$ N. \2 c, O/ t- P% s1 o9 H        echo "athmill GUI is supported on Solaris platforms only" 1>&2
) q' H% l- R8 L2 O5 f1 V$ I" z7 H        exit
  }4 X3 K4 }% J' p0 U6 }+ a' a# L     fi5 N  e8 r- o2 E2 H
  else
4 U" a3 E0 P) L- M+ N& c5 M8 Z    postgres="y"3 F5 u. K: ^, x$ n  I
         ostore="n"
5 {- G& b# K0 z) _+ v6 c+ F0 }  fi
; f1 g" H+ u9 H! e1 H7 C9 l- r8 e" `fi( J8 k& |2 C5 @
/ E( [5 \8 v* y2 |( B" y
if [ $gui = "y" ]; then
* i) s4 }$ C9 U+ j6 |2 Z9 N    if [ $cmdname = "powrmill" ]; then" G0 X+ `- N# \# {
        pwga $@$ N8 w( W0 N: g" y+ k1 ~1 n2 a
        exit
, z% k' l; q$ m2 V2 Y( B7 {6 Q    fi
0 l: }; K8 @% C* q
% R6 L5 X8 u# n1 m$ v$ E  T: H    if [ $cmdname = "pathmill" ]; then
9 K5 D- s1 b# U* M8 B% l' H& n7 t        if [ $ostore = "y" ]; then
# K# E) T8 h" ~2 T+ @: b! o           ./pathfinder $@
! Y9 j6 u2 Z* T) L           exit8 T4 R  \* b1 t" m' N; f# ?: b
        elif [ $postgres = "y" ]; then. ]$ G; c% j& v5 Q4 R( r
           pmga $@
4 i, S- Q$ J! d, K' B           exit" Y. Z. n* @4 f9 e. R
        fi
& H% L2 U) d7 T+ g7 d    fi% ^  J* q: n. ]; q8 |
fi
8 b( n0 r* N( A1 u
  h- H$ B' }' R% H) gif [ $databaseOn = "y" ]; then
6 W$ e, @2 d8 q1 h   if [ $ostore = "y" ]; then2 A- z( l) a3 ^6 c9 r& }
      if [ -z "$workDir" ]; then
6 c5 J  k! n+ i# y( i7 {         echo "Error: Missing argument for -gadb option"
& z) d1 J/ N1 l9 w& l' a3 B' i) \         Exit 12 t% T: t1 h3 D% z* t, `& h; P4 B
      fi
# R9 j7 v" n3 U* R4 e( h. `: F3 x   fi; u- g. `0 y% G& ^
   if [ $postgres = "y" ]; then1 ?% R5 V. ^9 S: |- p( J
      if [ -z "$workDir" ]; then
0 j6 p4 o- s, T+ x# }         echo "Error: Missing argument for -gadb option"
8 N6 w; Q: m! S3 {3 c9 y" j         Exit 11 k1 ]- g, E4 G6 a8 D" Y* i* f
      fi
: ^( `2 }) [/ ^% T4 m. h   fi. o! k: y0 n( }& P2 G* A
fi, K8 D% R; v/ v/ D0 c
: d: z$ R. m7 G0 y) ~
if [ $postgres = "y" ]; then! F3 Y% _$ P' x$ x* \

- a9 W) B: g  @; ^) I    if [ -r $EPIC_BIN/scripts/gui-init ]; then: O/ y6 B) N8 ]2 C" ?. R
        . $EPIC_BIN/scripts/gui-init
0 M. K5 h9 e$ ?    elif [ -r $SES_ROOT/bin/scripts/gui-init ]; then$ \9 E& u' X1 k; o
        . $SES_ROOT/bin/scripts/gui-init1 V% c  [: S/ c" u6 H% ]3 S, Z
    else8 q3 w% ~, }/ B8 H; O
        echo " ** Installation in \"$EPIC_HOME\" has been corrupted!" 1>&2
, N; I; Y& i6 e        echo " file bin/scripts/gui-init is missing." 1>&2
" ?" x, w- m/ Q7 g# D    fi
' ^9 @. R& X- R& ?; ?( q& t  D% Z" D9 w( a/ b
    workfile -tool $cmdname $@$ b3 g1 D. \1 I9 [# J7 H
fi  s" X7 c: l9 V8 [3 V3 A$ @7 r
" O0 }  G3 z: o3 w$ \6 s/ O
if [ ! -z "$o_option" ]; then
1 k6 k" Q  g5 }( g, C/ ~3 ~1 I- e) G    errFile=${o_option}.err, f* s* V  A8 w' f( _" n
elif [ ! -z "$f_option" ]; then
  z& ?( s& x1 B6 b0 V/ w  X    if [ -d $f_option ]; then. n+ G- P/ M3 {6 U
        errFile=${f_option}/powrmill.err7 j1 p; Y  M2 E" v! t
    else errFile=${f_option}.err
4 B; I9 K2 l1 a( O    fi
9 U8 z: m$ |" w: mfi
5 t" ]% G7 v* r3 M6 F: V! F
. c; p% H& [$ K+ C: T4 _: d6 n# `; r; c; c" `0 b1 Q- p
if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then# @" d4 n" S( ]% \2 Z* R
  rundir=.epicrun
# L$ |. v/ F% u3 zelse
# M& I2 K4 C# X% u% [4 P( W; c  rundir=.epicrun$$! d$ N% `9 \/ Q3 D& W+ f
fi
( W; X2 B+ x, V% Z: x. @5 g4 e9 H' @2 J8 |: P
libpath="$rundir${EPIC_DLIM}$EPIC_DIR"
9 Y/ w8 L! F; D5 F8 a' d6 x+ j+ z3 X/ Z! t, ?
cwd=`pwd -P`
0 y8 ]2 @5 w0 U; p- v1 N/ K) K9 r2 Wif [ $cmdname = "acehdl_w" ]; then8 a! Q6 ?$ k$ C: C/ ^7 e# S$ |1 b/ N
  cmd=`basename $0 .sun`
% E2 y& a+ X' a) f4 N# ?  cmd=`basename $cmd _w`
) o# k# t* W- r% G, D: t0 Delse# F8 c7 R- J/ w+ ]
  cmd=`basename $0 .sun`: l( U) p' P; }* g) g
fi
/ M- {2 _" e& r
; t- d0 n. w. n  {8 D/ u& G6 ecommand="$EPIC_EXEC/$cmd$EPIC_EXEX"
$ I4 ~) x/ l7 P. ~[ ! -x "$command" ] && echo "$cmd: not installed!" 1>&2 && exit 1! x8 U8 J* T1 u* r. c

+ x' x8 q9 B/ e. g9 q# buildmod extracts -u/-fm options and calls genepiclib
0 B) |& I0 U+ A9 S# It also set the remaining options to variable CMDLINE
! ]) M" E" i6 M% A# look up in .epicrc for -fm & -FM parameters4 v/ S8 l  C2 I4 G

* o: S% T1 f% N0 I6 t+ vfmlist1="`get_epicrc ./.epicrc user_adfm_obj_modules`", G+ o: f* n7 C# r% E9 y
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules`"5 X* v8 D& j' s! }
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules`"
8 y. ]; F+ M! H5 Y
. T9 A5 q7 R5 P, E7 ^FMlist1="`get_epicrc ./.epicrc user_adfm_obj_modules_force`"$ F3 Q2 n+ ?3 B) n' M' }* S: B& P
[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules_force`"
& ~6 I8 u- F) q" w: _[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules_force`"7 b  H* X6 j% l1 e
) @' q! |5 t  ?- ?
if [ $# -gt 0 -o "$FMlist1" != "" -o "$fmlist1" != "" ]; then
% m3 w: ^( j) G9 r7 Z5 b1 S5 j+ W    # note that the buildmod script will set the CMDLINE variable
% p4 [4 s; P  M% ^  B2 s! f1 l4 G3 e    . $EPIC_BIN/scripts/buildmod
: a; x0 i+ _' s# y" d7 c. y% ~1 _1 O/ J
    #echo "This is the value of cmdline=$CMDLINE"5 V/ `( V) ^+ R% A$ r; y  y- J
    #exit 0% t1 Y' P0 H$ X! P. I$ u# P/ b
' K. Y/ E' j* D' r
    # if a new timemill/powrmill/pathmill built, run the new one% z* ]- q/ _, I
    [ -x "$rundir/$cmd$EPIC_EXEX" ] && command="$rundir/$cmd$EPIC_EXEX"
" o6 h1 P" w7 }* ]fi
( L9 K' Z* {6 f
% I; N- s2 z2 ?if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" ]; then) |' T2 X1 b+ `) D& h- V+ x0 K" k  e
  if [ $have_har_flag -eq 1 ]; then
, h1 X5 ~* \( j7 ]    is_special_har_run=1/ S$ x: [9 C+ g, N
    if [ "$o_option" = "" ]; then8 c1 h* x" t: u) Y0 s3 H
      case $cmd in
+ a5 ]& \( `  I        timemill)
) E+ u/ \6 m7 H! w          har_ofile_prefix=timemill$ E* [$ K9 A  ?0 O$ P# X
          ;;; x: U. q" p$ \, R! G* t
        powrmill)" L! V8 \2 B  y
          har_ofile_prefix=powrmill
; K( m& y6 H# b7 K( E          ;;9 c% ~* c3 b( M+ Z* B6 j$ j
        nanosim)
/ C& ^1 r5 ^: m3 }          har_ofile_prefix=nanosim4 y- l. @. @( ~3 X( C! Z
          ;;
0 f) }/ Y0 {9 ~$ |$ _) A      esac+ V' x& ?8 {. c- q7 Z9 l
    else
# l  D' y0 X2 H3 G  C2 P" P- l/ T/ b      har_ofile_prefix=$o_option# X/ z3 ], W) {; C2 S
    fi+ a( X1 }/ A9 ^, ^% v
fi; [9 @" e  w# G
fi
" z# b) @) Y. A; n  b, B' \, v$ m# z8 T8 L& T) A: T
# Call Double precision version of the product if -D
* W0 C& m$ q3 k0 |# or simulation time > 1,000,000 ns.
6 a7 O+ X+ ?0 v. E+ ~4 H+ e# sif [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" -o "$cmd" = "railmill" -o "$cmd" = "pwarc" ]; then
4 f- W4 Q9 H' N
- T7 O: ]4 p$ L$ Y/ ~7 m  # Now the binary always has the ACE feature( k, A1 U) l  G0 a
  USE_ACE=YES
7 Y) B: _/ y" P$ ]6 o8 v6 }7 H+ O' t/ z* ~) _2 C
  HAVE_DP=NO
4 E) \. g- \" j2 g4 I; r1 ], _  EXTRA_CAPACITY=NO
% O. L) [. m& a3 _  DB_REAL=${FORCE_DB_REAL:-"0"}
* X0 E& ?$ m' g3 y
8 o8 k+ a" j6 {0 W3 T1 `  # Enhance for ACE ease of use
4 N  ^4 |9 }6 h' U1 Z; E  # If no command line option or only a -T option, do:
0 }' p+ G2 Y  @% Y! G+ r  #   1. set -A option
5 p, {* e. D! U+ W  #   2. assume input file to be hspice
! W+ @5 h0 Q+ \' _  #   3. set -o to input file prefix
- T$ |$ a, \6 X9 F, g$ [& b  #   4. set -z to input file prefix
# S% ^+ H3 B* B6 J( q% V. Q. H  #   5. set -c to default config file
0 H# v: }( R9 q9 z. m2 \; W  netlist=""6 ]) F6 y% k' m, p6 Q
  minusT=NO5 }* x. J: h/ d+ ~) o, G. ]
  useStdCmdOpt=0" K6 I! c. P: I! m6 F3 ^8 i$ w% e
  prefix="": z! r5 @! m& C5 |" p  p4 j
  circuitType=""8 |1 J- w6 Q, J# a) C6 k
  for opt in $CMDLINE
6 q& p) h; F. ^. i) c4 k' i$ U  do
" S7 N* ?& o. J" x/ i7 B+ f- s    case "$opt" in
: E# B7 J5 M$ U' z! Z% |      -T)
) ^' ?- S% ~+ G% \3 r        minusT=YES# D! _$ G9 @( s  A6 E0 C9 f
        ;;( S; b( [% i3 V  z3 W* V
      -*)
. j2 o) u" i# L, T        # using standard powrmill command line% c( V  A  f3 b- i6 n. X6 N/ g$ O
        useStdCmdOpt=12 y, i+ X$ u, v" K& Z6 T
        break
! y8 h8 e6 |0 L' ]  k7 C        ;;. o" a& S2 a* P9 [
      *)
" h/ G' D2 {/ [0 t9 ]5 _% m, m       if [ "$minusT" = "YES" ]; then7 }: d4 E5 X; p3 B# {( c
         circuitType=$opt
/ T+ c) N2 K  y4 \, |         minusT=NO  # reset flag7 L8 [: l5 f6 s5 B3 M# ~
       else + A* K# p8 B% v3 m5 m
         if [ "$netlist" = "" ]; then' x, ^) [! p+ H9 Q
           prefix=`basename $opt`
$ U6 P& B. P8 z; l7 D           prefix=`expr $prefix : '\([^.]*\)\..*' \| $prefix`# _9 [/ w1 ?: C8 H0 _; E/ U
         fi/ o$ S! M4 U0 u8 f
         netlist="$netlist $opt"  ~! w8 c6 [% f- s( f7 N
       fi
! ^0 M2 ~3 M/ K0 Z7 `; }& K3 @       ;;
' E* t; z8 `* n2 ]8 r3 F    esac# G4 C7 Y& p* @. a& k
  done" W$ c9 W+ V0 S: o% ~- X0 l

' L$ d3 {. M- e5 B, x# m+ ]2 [2 ]5 D9 Y- X9 |
  if [ $useStdCmdOpt -eq 1 ]; then$ {, j! F. J1 b9 ~* o
    # use standard powrmill/timemill command option
' i" ^- a4 ~& \" f+ N+ j! V    for opt in $CMDLINE
* `8 D% w; J* t; J4 q! j# s% `    do
; O6 T. ?4 ]" J) Z- ^1 d      case "$opt" in / V% Q# ]9 s" k) O
        -A)
  }2 P0 b" z0 ]0 ~/ A            DB_REAL=14 y2 a: E! E0 `  u4 N1 o
            ;;
- G& u6 O, c1 Z; s/ S  l! m& D      esac  V# p7 G0 }! H& k; N$ c
    done
' B# G" z8 F( L5 ~# B: H# C# C3 A    if [ "$netlist" != "" ]; then
: o  I8 H9 x# l) L' i' g" I+ r9 w      CMDLINE="-nspice $CMDLINE"
. Y8 ^( ]4 M; n    fi
8 b& R3 d5 N- R. [+ F( Q  else
2 |( V3 n" @+ u& z) B7 t2 E    if [ "$netlist" != "" ]; then
; {- A, q- ^8 s8 o6 s1 E      EPIC_DEFAULT_CFG_DIR=${EPIC_DEFAULT_CFG_DIR:-"$EPIC_AUXX/etc/$cmd"}1 z- {' q! K8 r  r! ~
      # construct new command option( e4 V+ u( k( u* y8 r6 z; q
      if [ -f $cmd.ini  -a  "$circuitType" = "" ]; then
2 }# [# I2 R- U7 C6 B        CMDLINE="-nspice $cmd.ini $netlist"
4 c! J1 _5 K- D8 M/ |6 r+ s      else; m  ^. F( @% |* q) g, x3 M
        if [ "$circuitType" = "" ]; then
) f0 O+ W% @1 {8 h2 d6 R8 S          circuitType="msana"
- G8 A; ]( R! r5 p& o        fi
( G* w/ ]' Z7 z: [4 |' W+ I6 V        CMDLINE="-nspice $netlist -c $EPIC_DEFAULT_CFG_DIR/$circuitType.cfg"
. b+ i, b' _/ ?0 D      fi- q! T& T8 `7 A
      CMDLINE="$CMDLINE -A -o $prefix"6 v7 M5 x0 h' b1 e6 J
      DB_REAL=11 ?, S* K9 u: Z  |
      echo $cmd $CMDLINE
: [7 d1 I( G* [    fi
4 X8 o7 T# ?, O" v  fi
9 ~/ y: c, l5 o, i% Q  Gfi # cmd is timemill or powrmill or nanosim or railmill or pwarc* L' q; m- h6 k+ k
& s" z1 Z) A2 O) B  l
[ "$HAVE_DP" = "YES" ] && [ -x "${command}_a" ] && command=$command"_a"
5 ~' f8 w( j) }0 D1 B4 V( ^[ "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a" ] && command=$command"_a"
( c* T2 Z% @) h; R- g# u% {! i# P[ "$USE_ACE" = "YES" -a "$vlog_design" != "" -a -x "${command}_v" ] && command=$command"_v"
  u( R* a0 x: o7 v3 M
) J# x% {, j1 Y1 D; M- Aif [ "$__engine_wrapper_called__" != "Indeed" ]; then1 D/ b: J" k$ B  ^! H6 z, [
    __engine_wrapper_called__=Indeed  s/ V5 k0 v9 }) |
    if [ "$cmd" != "amps" ]; then1 W; o) x6 B2 a
        export __engine_wrapper_called__
' b9 P0 k# P# j8 T+ M2 H4 I    fi
1 J3 W" T% J. v6 ^  z. l8 ~- H9 m& s! x& I- t8 g& ^/ B
    trap "cleanup" 0" |: d- X$ g! F- b8 S$ t$ a
    trap "" 2: d' v9 R/ h/ U" M# q6 `
5 b. K' t4 |1 k3 _2 @: k
    [ -d "$rundir" ] && rm -fr $rundir( a# h1 b% H9 ^* {
    [ -d "$rundir" ] || mkdir $rundir
- Y! _  q' q4 r* c2 i( R0 O% y0 z) q# E; ?) a5 j$ {3 i  a0 A+ M
    case "$EPIC_ARCH" in
8 e& t$ f; p2 o/ D+ }3 r+ d' Z    *SUN*64)   
  ?( N" C- B5 g/ E& }        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"! z; u1 }$ i9 g! ^' r) [
        export LD_LIBRARY_PATH+ }' }0 a6 ^6 w
        suffix=.so
- P8 M6 z7 v7 K% L: e7 ]        ld_err_code=127% u; n9 ?8 g9 e. L, y
        ;;9 {) @7 W! p! _& c
    *SUN*4)   * ~% w& a( d! i# p: v
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"3 ]9 L$ g7 r* {1 f/ U
        export LD_LIBRARY_PATH
# |' S$ T: I, @, {! h, A        suffix=.so.1.09 }7 b: Q; F5 Z, s
        ld_err_code=1271 r# j0 a6 e3 T) Y8 Y
        ;;6 N8 l! P% w7 o# a* Z" C: d$ i, @" C# I
    *SUN*5)   , s& W* W$ n) o& F4 U5 \! ^, e
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
+ j5 W" e* ?& C- U: j3 b$ d        export LD_LIBRARY_PATH
  u$ H( U8 m7 k        suffix=.so) d2 J" ?. c" O' D+ K
        ld_err_code=127
6 Q) F( ^- C( e5 I. ~        ;;
3 S+ k2 }3 E# x6 P    x86sol*)   : o3 x' B* M1 Z- T# R& x& C
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH": J# I% P  L6 D/ B6 H! t4 D) Y
        export LD_LIBRARY_PATH
! p# w5 \, L9 [        suffix=.so
3 o: z- s% H+ J        ld_err_code=127
+ |$ ^7 o' R+ |% ~* p4 w        ;;
) a6 e7 S) b& [    *AIX* | aix64)   
! G& M% h7 K" S: F% W        # When genepiclib creates shared objects, it creates a import file and
3 Y" S3 ^5 s& F3 o8 M        # uses timemill as program. So at exec time,program timemill is needed 8 @, w9 e( t' J9 y6 c3 L# S
        # in LIBPATH
, \2 ^3 @- x# I. W: ^        $ln_default $command $rundir/foomill" Q) i# t4 e2 K/ J9 g3 q. t
        LIBPATH="$libpathLIBPATH:/lib:/usr/lib"
# s( `, A4 H  R1 b0 k        export LIBPATH
5 v) x: f3 J* B% ?4 E6 _$ F        suffix=.o
2 f; ^+ d% v* Z% `1 `. Y        ld_err_code=8
: o) H2 P$ v7 \, H  I        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then  l! p+ |( Q6 j- C4 ^
          tdir=`echo "/tmp/d"$$`
8 l) B+ P/ w/ O  c0 \9 m3 k9 c          [ -d "$tdir" ] || mkdir $tdir
: t* V9 e$ i! S8 m) N          if [ -f $EPIC_DIR/libCustom.o ]; then
2 P4 Z$ G3 l& q- h: W             cp $EPIC_DIR/libCustom.o $tdir/" Y, F( g* \$ J+ Q* J8 |: W+ H  O  x
             $ln_default $tdir/libCustom.o $rundir/; U8 R1 O2 [9 p  H
          fi
0 E4 j; j5 r3 n( I6 D+ B& g; a          if [ -f $EPIC_DIR/libModel.o ]; then* a$ f/ Q% y/ |
             cp $EPIC_DIR/libModel.o $tdir/4 Y- ~" [5 t. l$ b: c; p: g
             $ln_default $tdir/libModel.o $rundir/$ s: J0 Z" |; @, W) ]3 H! ~
          fi
% ], ~5 E) f5 J  b' K" o, K2 h          if [ -f $EPIC_DIR/libFuncModel.o ]; then1 W# V! Y$ s% D9 {( @  Q0 m, A5 J
             cp $EPIC_DIR/libFuncModel.o $tdir/  Q4 B) @8 {* m- E
             $ln_default $tdir/libFuncModel.o $rundir/
8 j* ?# z' u. _, g: g/ G. ?& i          fi
. X/ Q: l% H- F. D) x9 y# ^          if [ -f $EPIC_DIR/libFuncModel.34.o ]; then
8 c2 e! H3 C/ `8 i- S& S3 j             cp $EPIC_DIR/libFuncModel.34.o $tdir/
% x7 @9 \8 N" _- u5 e1 q             $ln_default $tdir/libFuncModel.34.o $rundir/
5 T% Y8 M: o& t9 i' t3 ]          fi
. j! r7 j7 D2 r$ q* e( y% E4 a) V        fi5 N& X* A6 ?- @# C8 _( ]& x
        #Set the IBM flag to enable more shared segids0 O2 e( ^% J& i
        EXTSHM="ON"+ v4 p: a7 |2 v$ X0 {. V! i& F
        export EXTSHM- C$ p8 d3 C" f
        ;;
) m. y5 [( [/ U+ T: E/ D    *LINUX*)    7 ^: r2 v! n: V& d. v' e( ?6 }
        suffix=.so
4 m9 _* l( R/ l" e        ld_err_code=1# ?! n! j4 x% p& ]  U. d, P2 z+ \
        ;;
& r7 N) x9 I. O* o    *amd64*)
; i9 ^' T5 \/ i        suffix=.so+ r! S4 Z9 {( b/ Z9 q: q
        ld_err_code=1
( ?! ]+ K7 p# r$ `+ M0 E        ;;
2 L! w0 b8 E: c    *suse64*)
* I. I1 I2 j& x/ w  o- i7 Z        suffix=.so
# ?) r' W8 V& j5 r/ |  k# }        ld_err_code=1$ _  M3 Z: d: ~; N
        ;;
) W, E; A- c5 _( w7 \    *suse32*)    ) J8 F, E* `- P+ c
        suffix=.so+ w& p2 j8 V- I) O" H
        ld_err_code=1
- ?/ q4 C" u+ @% \        ;;* t. v$ }; r1 ?/ F, w# [( U
    esac/ C6 M: M7 d4 ?

! O$ U# B1 T" D/ S3 l* b    [ "$has_custom" = "YES" ] && ulib="$ulib $cwd/libCustom$suffix", }8 F+ [* d/ Q3 z
    [ "$cmdname" != "timemill" ] && [ "$cmdname" != "powrmill" ] \+ w6 r4 L* U8 t2 X4 Z) ?
        && [ "$cmdname" != "nanosim" ] \8 M( S! b( k* V5 D' y2 }
        && [ "$has_model" = "YES" ]  && ulib="$ulib $cwd/libModel$suffix": U; q5 A: h) K. V6 ~7 L' H9 N1 `
    [ "$_VA_" = "YES" ] && ulib="$ulib $cwd/libva$suffix"
2 j! I* {* T6 z# L& `& g& m
# S7 S+ h( R' B0 Y- W#Look for command line option for libFuncModel.so1 `( ?7 P& ^; m7 l0 R' a
#    user_library_next=0
/ a( B0 L) k$ ~) h  l    has_fmlib=""
% E8 P  J6 d+ E4 z# }    for opt in $CMDLINE0 m" X$ f$ h; T+ i/ C0 h& O
    do
2 ~! d4 f8 x; D# C      case "$opt" in % V' I7 }2 a: z3 f
        -fm)
" M) T# h4 I+ x5 t4 l5 v% p7 p- }  N            CMDLINE="$CMDLINE $cwd/libModel$suffix"* n/ V( M! \' ]: Y0 J3 C- B  P
            ;;5 Z# W5 s; s& C. o: @  g
        -fm_user_lib)
8 g( }7 @$ t: j- V; G6 n2 O            has_fmlib="YES"6 x4 K6 F7 A" M, H' l
#            user_library_next=14 _' Z3 t) F; H3 Y" ]% L
            ;;7 y6 P" Q2 W$ c: N6 b
        -xc)
5 z# F" j8 r( Y$ O" d; ]: J            if [ "$EXTRA_CAPACITY" = "NO" ]; then+ e( O! L1 j$ b& ?% [( D
            EXTRA_CAPACITY=YES
/ `  p5 E& q' V; h: I: J            fi6 S' K! x) z; k
            ;;
0 A9 r) o9 x3 O: t/ j1 m#        *)
. d7 r4 y, U! Q' U/ \" W  s#            if [ $user_library_next -eq 1 ]; then
9 \9 F+ O. S$ ~0 W: |# u$ {#                if [ -f "$opt" ]; then) B6 n# \0 G4 ]( m: ~! x4 b
#                    libfmodel=$opt2 F2 ?2 w) a: I% ^/ l$ i' y
#                else- g0 S* |+ r) v# m/ x
#                    echo "-fm_user_lib: Specified file not found"6 h  g$ }: |2 v" u
#                    echo "-fm_user_lib: Specified file not found" >> .epicscriptmessages
' \! k: B' g. S; B* t#                fi+ @9 A7 L) {# F( n! B
#                user_library_next=0
0 x% W4 w1 K- I7 u% a, O( z#            fi0 e- f; \0 Z" }' k( r0 N
#            ;;  _9 J) y1 M% ?% H5 h# Z8 z
        esac
# n0 v2 m' q9 b" j    done
8 o- }& x6 ?$ d
9 s1 v- R* s' k9 ~! o    if [ $cmdname = "timemill" -o $cmdname = "powrmill" -o $cmdname = "nanosim" ]; then
! Q, r$ i  p7 E5 `        flib=""1 v7 d- c) ?/ v
        if [ "$has_fmlib" = "" ]; then  N" @0 L9 G' q+ z
            flib="$flib `get_epicrc ./.epicrc user_libraries`"
+ g. {* r, @& P6 i            flib="$flib `get_epicrc $HOME/.epicrc user_libraries`"
! l* r( w& l6 l  b1 Z! B            flib="$flib `get_epicrc $EPIC_DIR/.epicrc user_libraries`"2 L5 f& w5 r( x, n! P8 A1 j- P* J
        fi
$ h/ O5 t, p1 T1 F$ V% q    fi6 W( V8 C6 s  s' A
2 A/ N! o& Z( u5 `
   for i in $ulib
8 D$ M" [+ I( j+ _$ t6 A   do- p4 y. K+ L9 `9 i
       [ ! -f "$i" ] && continue) I/ {/ U8 I# p! o5 U: Q
       dir=`dirname $i`; cd $dir; dir=`pwd`; cd $cwd! w% v, R/ V2 v" J
       i="$dir/`basename $i`"
$ x1 }7 ]- E$ z       case "$i" in
7 i0 N+ `  v& ]% w% k       *libCustom$suffix*)    [ "$libcustom" = "" ] && libcustom=$i;;
* U" q+ e/ `: Q+ T8 }8 `& R       *libFuncModel$suffix*) [ "$libfmodel" = "" ] && libfmodel=$i;;* l- q0 n1 X) v: f7 {; y
       *libModel$suffix*)     [ "$libmodel"  = "" ] && libmodel=$i;;
" W( W9 t. J! R$ N9 Y/ p3 k( h2 R       *libva$suffix)         [ "$libva"     = "" ] && libva=$i;;% t9 \/ J- v7 S' Q- ~
       esac) P' _; `, z. k. b
       [ "$libcustom" != "" -a "$libfmodel" != "" -a "$libmodel" != "" ] \$ a1 |% C* b+ U% F) r2 k2 g
        && break6 R, C2 ~: Y# }$ i
   done* a7 O7 O; G+ u% |3 R
' x; j* j! c$ c  Q$ W
   # symbolic link shared libraries to .epicrun$$
" N- W! C6 t$ p. ], w3 H3 }    cd $EPIC_DIR; epicdir=`pwd`; cd $cwd: S- D; `( p2 j1 I
    if [ $cmdname != "timemill" -a $cmdname != "powrmill" -a $cmdname != "nanosim" ]; then
/ N. q9 K1 r+ j        if [ "$libfmodel" != "" ]; then: L% y, ?7 Y9 b8 X5 E
             [ "$libfmodel" != "$epicdir/libFuncModel$suffix" ] && \0 b2 D3 v6 V2 }
             echo "Using $libfmodel ..."  && \
4 x0 [  v+ K- y3 A$ J. A* W             echo "Using $libfmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE
7 ^1 ^) j! W# g. w0 C7 J             if [ -f $rundir/libFuncModel$suffix ]; then
- v( Q, \0 y/ T$ {+ H$ G               rm $rundir/libFuncModel$suffix! `2 y" T% S# D5 Q+ b( s5 G
             fi
! {. x% d$ Y, {$ V! M             $ln_default $libfmodel $rundir ; @" }3 z1 B/ P& V
        fi
" ~; Z% u3 {8 ]        if [ "$libmodel" != "" ]; then& E& }2 ?8 p( L' o" g" ?
             [ "$libmodel" != "$epicdir/libModel$suffix" ] && \* T$ U/ e- Q9 p, s( N
             echo "Using $libmodel ..." && \! T$ b+ {8 l( f& ]# {2 k+ w
             echo "Using $libmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE
. [) `7 z: \; @1 M$ c             if [ -f $rundir/libModel$suffix ]; then& f  d9 d6 r1 K. g: l% D
               rm $rundir/libModel$suffix) ?& d% m# _/ l8 M; p5 U, V3 O
             fi8 i- f+ L  T1 `& q3 U
             $ln_default $libmodel $rundir
+ J* D$ ^  `! i7 B* a: f, j1 W: Y        fi
7 d& H9 r1 W: I% w   fi: _- N1 s) U$ k
   if [ "$libcustom" != "" ]; then
% f' e8 F  @2 p6 m        [ "$libcustom" != "$epicdir/libCustom$suffix" ] && \
. e$ h2 t% l, Y3 p) }" ^: ?: b5 C        echo "Using $libcustom ..."
3 G& `$ P* A/ ~4 e6 t/ t        if [ -f $rundir/libCustom$suffix ]; then
- {. L- o4 r! K4 p' M          rm $rundir/libCustom$suffix
$ W0 x) U; b7 w, [        fi* T) @0 o" t2 z/ ~0 j* E  ~
        $ln_default $libcustom $rundir * z" d+ O2 Q* X" T4 _+ x$ J; H
   fi& Y5 p$ |) B, t/ q+ {8 m6 H! R9 m
4 a* F2 }4 V: s+ ?- P  W
   if [ "$flib" != "" -a "$flib" != "   " ]; then
) N* r! w1 A, V' H) Z2 z4 G8 O: T        CMDLINE="$CMDLINE -fm_user_lib $flib"
6 N+ w: |, o/ @8 X8 w: I( P   fi! {( e9 b% d+ [8 p8 `- a

6 r1 z8 ^1 _# m5 C+ L( e   if [ "$libva" != "" ]; then7 b0 W4 V) v% w2 ^0 c  Z
        if [ -f $rundir/libva$suffix ]; then# G! v& A. z) A* S. c
          rm $rundir/libva$suffix
' B8 ]5 W/ k7 Q/ J0 U+ ^        fi. W: M/ Q0 Q% ^% s7 |2 o( G( j
        $ln_default $libva $rundir
+ ?, A" B  i5 g   fi
2 c. A0 K# a2 Q2 q$ V; m
1 \, {$ F/ Z: o5 c/ K" _" `, `! A( }5 a
    # VCORE design library
2 x( n# e; Q9 c1 T* y1 d. u    if [ "$vlog_design" != "" ]; then
  }, v6 l# i8 P4 d2 F9 h        $ln_default $cwd/$vlog_design $rundir/`basename $vlog_design`1 [) e, d# x& D. q, B6 \# i1 {3 k
    fi5 w. Q$ t9 _9 K, I3 [% O# `
' `0 d* r: b5 N
    if [ "$EPIC_EXTRA_CAPACITY" = "1" ]; then
+ U& h% w* W2 p: `        EXTRA_CAPACITY=YES
! S8 h% N! `/ X# Q, U    fi
+ m, H9 P( s4 i; v. T6 n! E' f. c
! m9 r$ ]' \1 k+ Q1 X    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "0" -a -x "${command}_xc" ] && command=$command"_xc"
1 N: u/ H# h1 ?- [2 g/ e" H    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a_xc" ] && command=$command"_a_xc"
0 g, A- C4 Z, |+ i0 B9 S) s3 Q    #Create temp file if dual process is on
6 @5 J1 u5 W3 m/ C& `6 _6 X    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" ]; then
4 N( b& L  N' |        if [ "$EXTRA_CAPACITY" = "YES" ]; then
" ^5 D/ Y  N" u& j8 b9 l            touch $rundir/rpcidfile* ~* f0 W- l" q& t, z4 N7 t
        fi
# W& U. b% U2 g. @9 [* s+ {) D    fi
3 x6 o, O9 _7 ~0 T% F1 cfi
% I, a; I' {" }
0 X* u8 t3 A2 ^& `: x8 z' S: irun_cmd()
; h1 _) U. A) o4 t{) X6 o" H& d% x
  command=$1
6 l- L& V: B5 Z0 X% w0 O$ j  shift& C( W- N% B+ T0 K3 V/ b, a, o

1 Q$ B: {- `. U  p# c7 {/ E" U  if [ x"$VA_FILE" != x"" ] ; then
0 K- l. v  i, y0 h2 ^( P( v( o. J     cmdline=$ARGV
) |6 o! H, |, @2 V  else
1 u$ {. }2 U$ U! f+ l     cmdline=$@0 x; e3 C, P# q0 V# ]5 K
  fi' f6 G: \5 K" t5 x7 ~7 D$ c! @! j- g

5 x# S: [, @$ s, t  debug=${DEBUGGER:+"$DEBUGGER $command"};
0 |3 W" l/ |# {" U* b" i* z. f
' D1 z$ q9 O) a, E  # To disable Exec-shield-randomize in RHEL3 U3+ when running nanosim and nanosim_a
, T7 w# x4 i3 f7 _. Z- t, z2 @  # so save-restore may work.
+ v  G  g. `2 q' [( q1 ?  setarchStr=  a7 s: r* Y( }) Q
  cmd2run=`basename $command`
) E  F! E0 x1 o' ^3 ~  if [ ${cmd2run} = 'nanosim' -o ${cmd2run} = 'nanosim_a' -o ${cmd2run} = 'powrmill' -o ${cmd2run} = 'timemill' ]; then
0 c5 B# K+ ~. P, g0 f+ @    if [ "$EPIC_ARCH" = "IBMPC_LINUX_LINUX" ]; then* Z1 s2 T3 z0 M0 Z
      setarchStr="setarch i386 -R "
0 k+ V" V' F& f. h    fi
+ [9 A7 i2 ?  H5 p    if [ "$EPIC_ARCH" = "linux" ]; then. y' i* C: C% v
      setarchStr="setarch i386 -R "% W; [$ z5 P& A! D! C; {! Z3 j
    fi
+ {4 _" i  {. D6 [    if [ "$EPIC_ARCH" = "amd64" ]; then
3 a- m0 n" q6 y% `: M% h6 N      setarchStr="setarch i686 -R "
4 ^2 }4 S  B: O$ M+ v; X    fi0 O' Z% K" ^' o. {, E, Z
    if [ "$EPIC_ARCH" = "suse32" ]; then
7 Z5 W4 b7 {' B+ T! f# r. d# N      setarchStr="setarch_suse i386 -R "
2 D8 D* m# }2 W    fi6 V: G. x" e2 Y8 T' a5 \8 q
    if [ "$EPIC_ARCH" = "suse64" ]; then% d# I" \- x7 [% K2 l+ n5 r
      setarchStr="setarch_suse i686 -R "
4 R7 s# h" E' D7 t    fi
# |. q5 n2 a" r. w9 S4 p* J  fi( `, Z" M: i, \3 @
  P! ]2 ?, s6 [) z- \! N
  ret_stat=0
0 a! j( ^: T  k9 |# [2 p  if [ -x "$command" ]; then7 O( _. a- M+ z; d+ w  P0 e  W% _
      if [ "$debug" ]; then( |+ X& ?/ [& \  F6 r
        _debug_args_=$cmdline
, J4 o# [( V( S/ v        . .epic-debug/ c% C! ~/ x6 r: s9 d& f0 w6 h3 m
      else7 T% W2 z# E( G7 O! M5 N6 [
        DEBUGGER=; export DEBUGGER$ U" y! a; l# f" L% p% J
        $setarchStr $command $cmdline
2 b) }. g& g1 t2 M      fi6 C- U9 F' `% u0 S5 _# B
      ret_stat=$?
! O) y9 c; F4 g1 r& t; \7 P; ^  else& N% z: [& X  K% j( O
    echo "Corrupt installation, executable \"$1\" not found!"3 ~3 ~5 C* `* T* }4 M
    ret_stat=1
$ F4 B6 P& r+ |# E% y# A- ?  fi
! N) H0 p" x" |  H}
8 e0 f* c& c  K# m$ J3 B! h) V
  ~) Z9 y3 ]' l) ^9 t# keep runing cmd if ctrl file exist5 @& z6 C2 E1 b& A
9 `, }! K% L* s
run_loop()
: C2 R' U8 q! {! H{6 V% O! U, Q7 ?/ ^3 J$ ^5 F
  command=$14 X! t) _; n9 ?6 e4 G  L
  shift% e* C5 X% l# m/ c# U+ W6 ]

2 W& y& K1 ^5 |: x( s8 t. P  if [ x"$VA_FILE" != x"" ] ; then
0 f5 ?: P- K9 d, W2 Z     cmdline=$ARGV7 S# ^: K' K, M2 n* n
  else
, a( I* \# {% r; N; A' v     cmdline=$@
* N5 x: a# [4 C8 a0 S  fi
$ n8 k# ~, B- V4 P9 r1 k* \
" }: G2 ]7 Q$ D5 P  while [ $ret_stat -eq 0 -a -r $LOOP_CTRL_FILE$$ ]; do
/ e* t; t( G" \% s3 `0 @& I$ r    . $LOOP_CTRL_FILE$$
( a0 s5 ^: v; w& V2 N    run_cmd $command $cmdline -banner 28 N: g3 Y. C* L2 W
  done;5 P# k  l: M* C, T
0 Q1 o2 X/ }$ [' {
  if [ $ret_stat -ne 0 -a -r $LOOP_CTRL_FILE$$ ]; then5 M& |3 z! N+ G. K, a0 v
    rm -f $LOOP_CTRL_FILE$$4 i( h& C5 ?" K& ~6 f9 Z1 e( h! ^
  fi
  c4 \8 Y$ u! ]) g5 m+ r}" C& n0 v$ k0 n; r9 g! b" z# ?3 x4 X# a

$ @0 F3 E6 A- S8 a$ r) G: Zhar_check_ret_stat()
0 x+ B1 L8 r9 n{, V% G# e2 G! c* \0 R- n& H6 }$ L" |
  if [ $ret_stat -ne 0 ]; then $ v; b( l: |& V- |1 ]; d
    echo "Simulator returned with non-zero exit status. Stopping."$ U! w2 f: ?2 h) E4 V7 T1 t
    exit 14 ^" I' ~2 F' r. ^% B6 e% W
  fi7 R$ c) C" U! F' O9 d
}( r9 u& b" G$ {5 a+ W

$ p* n5 q- l4 N! C1 d- O- u: q, R#
% V& b4 f: e" N' k) s, R1 D# set stacksize and datasize limit
- l2 A- \# n/ L$ H  ]  }6 P" @#* x5 l! j# ]/ t& [+ r; k

, u  H' e" E# ^4 d% \set_data_limit
1 ^1 p+ g! E& sset_stack_limit) n4 y" `3 M% ^, ^  ?: X
( `6 b- w% E: b/ R6 K
#rm -f $LOOP_CTRL_FILE
' c/ q4 K1 l4 K) A" p* f* ?8 W3 |' V9 i4 I* D/ w0 @% u9 R  `2 H: M
run_main()/ \3 k7 d0 p: X
{
$ q" E6 [8 @1 z1 R. W( O2 \if [ $is_special_har_run -eq 1 ]; then
+ w2 \  ~6 j- B+ ~  if [ "$har_ofile_prefix" = "" ]; then4 O9 s, `+ e/ M/ r) N. F
    echo "Wrapper bug. Notify Synopsys technical support."; t+ e5 U3 ]/ }& E
    exit 1
* X  p, Q% l8 R2 `  fi, d; n+ P* p1 g  _" w& q
  if [ "$har_hilo_file" = "" ]; then
2 C0 a9 E: i+ w1 ^5 V    # no user specified hi lo file - do both runs3 _. e& z8 ^4 E3 U* z) l
    run_cmd $command $CMDLINE -har_one -har_setup) ]- u4 U7 G- t# o1 {: B; W
    if [ $ret_stat -ne 126 ]; then
6 O4 _9 L7 C/ Z      har_check_ret_stat( q8 U: g% i% N. X' t7 l& ?
      if [ -r $LOOP_CTRL_FILE$$ ]; then
, f6 ]) G8 d9 e. C1 T        run_loop $command $CMDLINE -har_one -har_sim ${har_ofile_prefix}.hl
1 P& H) [% U, F4 J' J+ H5 \        rm -f ${har_ofile_prefix}.hl7 H5 \2 n9 D) a1 K7 Q3 w4 q( j' Z' J# T
      else; p9 b8 L# H% m1 v7 {! a% L
        run_cmd $command $CMDLINE -har_one -har_rmhilo -har_sim ${har_ofile_prefix}.hl, @( e0 J3 j" _  ]9 L7 [
      fi
, _) C( p8 _# M! }. Z, z7 J    else6 r+ w3 a( s  O* q! B8 G; b9 A( @
      ret_stat=0
) {5 {( \0 u, C# t1 a9 V0 q    fi
% c: L* e) i) T* D9 V5 v  else
# D1 Z% D1 O) _. C0 u    # user gave a hi lo file name
! ~1 |; p+ U# A$ [    if [ -f $har_hilo_file -a -s $har_hilo_file ]; then
5 O& @$ d) s5 p0 x      # file exists - use it - only do sim run: \" D7 b3 b5 T: c6 Z8 K# O  K. N. C& `7 b
      run_cmd $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}1 M+ y. X  L: l$ _# t0 @& V* o
      run_loop $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}7 |5 }9 d8 R9 M+ N. b5 D+ _
    else* k- r. M6 d4 F% _. m
      # no such file - generate it - do both runs
, b- e& R: ?7 O; ]      run_cmd $command $CMDLINE -har_one -har_fnf -har_setup9 u' t' H$ v% y8 ^! `
      if [ $ret_stat -ne 126 ]; then
7 b7 y$ `9 A9 y        har_check_ret_stat
2 O, y* T( P2 G        if [ ! -f ${har_ofile_prefix}.hl ]; then
- A- W9 x* `# ~" o5 _) @/ o          echo "No hi lo file generated after setup phase. "; c2 l  w) g7 r% t+ x- Z' D  V8 @
          echo "Contact Synopsys technical support.". v: C% |$ k  g/ S) t2 U* _
          exit 1
/ h& U% c0 D  V        else
0 f' z. e# M9 M4 D  z          if [ ${har_ofile_prefix}.hl != $har_hilo_file ]; then/ R& ?1 D6 p! ~) R! k1 `8 ?* T
            mv ${har_ofile_prefix}.hl $har_hilo_file
4 O+ c9 y& J8 C$ }          fi( ]% I+ d4 H6 ^6 {4 C& y# h
        fi
: H0 c" @# ?5 Z9 }        if [ -r $LOOP_CTRL_FILE$$ ]; then
3 {7 t! w: q' c' A3 J" l) q6 F          run_loop $command $CMDLINE -har_one -har_sim $har_hilo_file4 x6 _& B8 Z$ O* V1 g
        else
( L/ ]  o% {$ y# N7 s          run_cmd $command $CMDLINE -har_one -har_sim $har_hilo_file+ J- H4 m5 i/ A8 ?% G/ k2 Q( z
        fi& E8 g/ a6 x" w) D) b  D* v
      else % ^  [% {/ z/ J2 Y7 s! _& n7 q; K
        ret_stat=0- q2 T' b8 e6 R' g; t0 ~' @
      fi0 l' w2 M) `" B3 W: y1 z# o
    fi. q* a7 z& Y; _; J  P9 O/ h
  fi
. s! H. o+ l: z, G2 i0 oelse  8 X# D# ^* Q% o* y+ z9 B6 }; {4 {
# don't loop if -har_setup
- g% T/ k$ w5 B% N  if [ $have_har_setup_flag -eq 1 ]; then
9 r9 ^$ X5 i6 e- w    run_cmd $command $CMDLINE- n; Z# i6 \% b, ?6 W3 F8 z
    if [ -r $LOOP_CTRL_FILE$$ ]; then
7 O7 [- V( `, p      rm -f $LOOP_CTRL_FILE$$$ F7 ]; v% w$ w0 G1 j" G4 ~' q
    fi
) }2 ~# {2 H! ]  else
" p, j0 w; t! p7 v  \/ z& V. m" V    run_cmd $command $CMDLINE
2 |$ T2 v7 X  C* h- f+ z' D    run_loop $command $CMDLINE
9 P( ~9 g  p% a) |' C! o9 z- x, T  fi# W5 j3 \7 L0 e3 r% i' X- {) Q8 v
fi
' v% C$ {. ~% i7 R1 l7 P/ H/ T9 d' h' O1 \! G
if [ $ret_stat -eq 0 -a $cmdname = "powrmill" -a $postgres = "y" -a ! -z "$workDir" ]; then
. ~8 ^+ j- ?! d; {  pwCreateErrDB -w $workDir -e $errFile
0 S6 h) @$ I! s' K# j  ret_stat=$?
4 N0 Z8 q% x' M9 `fi
; t1 p& x- f2 J. N% J& G% v}
" P5 v( y  e6 e
" W6 d& w5 w% }9 T/ a; o* j5 Ycleanup_alter()
7 I2 C4 C. X6 d( d{
- e% ^  h1 I0 n3 B/ n0 R   /bin/rm -f $ALTER_COUNT_FILE 1>&29 J( }! ?' [& g7 E% C5 s
   /bin/rm -f $ALTER_HK_FILE 1>&2
5 A4 C4 C; H4 I  O, r1 a2 _}
/ I5 o1 Q, J) n- [! j
: T2 L  c/ @6 T2 {9 c( g' i#generate alter temp files based on pid2 |8 I2 n- Z# M- O* s/ x$ P
ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$- h7 v. k% M- c' s; I% s
if [ -f $ALTER_COUNT_FILE ]
: a) {4 _/ ~" r; R, l7 }( v$ Wthen 1 _; b7 H' a0 i% k0 e. j8 I
  until [ ! -f $ALTER_COUNT_FILE ]6 w" C! L* s7 c! J
  do
, V/ t( w# P, A. ^4 D    ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$% z7 n5 x5 m# ^) v3 R0 {
  done
9 [* H) q$ _7 o* E* yfi
' {" E) i# D, R4 Xexport ALTER_COUNT_FILE7 I  S: e  S3 c# L" O

  K- _3 f/ J0 j4 c- f/ }; ]4 t; yALTER_HK_FILE="$ALTER_HK_FILE"$$# A: i& S$ l2 l( T
if [ -f $ALTER_HK_FILE ]9 C- t* N7 l/ ]) L* o
then
3 E# o: i0 m$ E4 R) I  until [ ! -f $ALTER_HK_FILE ]
0 _4 X& E  p4 Q% {2 [% J& v  do
- ~5 S% q8 b" ]$ _3 _: p    ALTER_HK_FILE="$ALTER_HK_FILE"$$
+ s( g, X- o! z# K7 Y  done
$ O  T5 b2 m* k+ ~; n( Vfi
3 k" e6 n! @& b$ J( Q1 @export ALTER_HK_FILE( _0 q% W1 V+ y* {9 G$ L" l. Y  f: O

/ R( s5 g/ v  e! h0 c% ^#generate monte carlo related temp files based on pid( k: R/ I% [" D' l+ X; N7 h
cleanup_monte()  _, s: l* O) w$ a/ H% g* a$ M) e
{# g1 P" u8 T4 S& k
   /bin/rm -f $MONTE_IMG_FILE 1>&2! ~& ~  U& s7 c1 l2 ~0 K8 U
   /bin/rm -f $MONTE_IMG_FILE.gz 1>&2
  R, y# h; q) G: ?2 |, |   /bin/rm -f $MONTE_COUNT_FILE 1>&2; D- T& c4 j5 ^% l7 N* ]% l
   /bin/rm -f $MONTE_CFG_FILE 1>&2% l. z1 |  t3 V
}& v/ P; L0 ~# \" J( r$ z

+ ^8 p$ I& I; N/ c& _, V; x1 mMONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$+ X4 @- K' v1 v. i/ u; c7 S8 Q
if [ -f $MONTE_COUNT_FILE ]
( n5 v9 s" s" @7 ~; H' Z) |& uthen* q  s& L3 j( i. e
  until [ ! -f $MONTE_COUNT_FILE ]5 r/ D$ |$ @8 s% T) v8 H
  do1 w$ K. P+ ^, O* `% H" f% Z3 l
    MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$1 Y; L$ o! [/ {) P- p  m) l
  done5 N' t4 k0 |8 E
fi
: p, H% c. ~5 H1 J) {  J+ K) Sexport MONTE_COUNT_FILE
! F5 z6 X* q- J9 E4 a
1 }8 _1 T2 J/ n# m6 rMONTE_IMG_FILE="$MONTE_IMG_FILE"$$- u- d! b/ {* u2 ?3 _( v0 w
if [ -f $MONTE_IMG_FILE ]9 s, N0 V2 t+ N  M' t
then
7 }& D6 G% [$ T' J# i; X: a  until [ ! -f $MONTE_IMG_FILE ]
7 f( u6 Z" b( w: j* B5 ]. q  do
& i4 Y1 E( \* y0 k1 B+ j    MONTE_IMG_FILE="$MONTE_IMG_FILE"$$4 w, D5 \  V& z. `% `
  done& Y4 O% }. b, z/ g  A, K$ |& j
fi0 q* _, R; I  v2 U; P6 w2 @5 }
export MONTE_IMG_FILE
( Q+ {. Y( @1 H2 G$ n& T$ V0 l; [5 J1 s+ t' V0 G* V; N- l  |& v8 o" t
MONTE_CFG_FILE="$MONTE_CFG_FILE"$$
& m; \% x! h7 @if [ -f $MONTE_CFG_FILE ]3 ~! x. S- S7 K2 |2 m
then' E% H  l. U0 t$ k/ y
  until [ ! -f $MONTE_CFG_FILE ]$ K& b! c4 [2 R- I
  do
. {! q$ l, p# ?7 s, @2 W    MONTE_CFG_FILE="$MONTE_CFG_FILE"$$' u  O% E/ K2 [6 ~0 b
  done
* C  N+ f* W# b% d: d! jfi
  D+ Z0 A6 N. x9 g# {3 N( F9 `7 |" b5 k
# main iteration2 ^6 P2 N0 i8 z  W* J
run_main! k- g7 a9 {5 P1 T: c) L

+ Q4 Q7 t5 V0 g/ }if [ $ret_stat -ne 0 ]
2 I) ]% Y  K( [" E3 a4 x9 A6 Othen ' K  l, `' P8 |, k
  cleanup_alter1 O  y' P% i  P6 F
  cleanup_monte9 A% ]9 b" _7 y- R
  Exit $ret_stat* u6 N& C+ L: x. ^
fi
8 a) ]6 d" l2 A! B2 O0 n5 C% \9 v; E9 [9 c/ ?7 s" o
#Alter related iterations
; h- }7 ]3 M/ ~% t8 l) ~6 W3 g! _+ s- W6 H1 y
iterations=0
$ H3 F5 x& Y8 Tcount=0
4 p) z$ @7 Y3 z9 {  `if test -s "$ALTER_COUNT_FILE"( `) N- X0 O; B3 n8 _
then! v" W8 p8 W: e3 K- {8 A0 I/ g
  if [ -r $ALTER_COUNT_FILE ]; then
. ]8 O1 U5 J: Z% _4 c   exec 7< $ALTER_COUNT_FILE, e, B* a" v0 r$ \$ z
   read iterations <&7" ?- x4 k0 f% G: Z( R5 A4 d4 Y
fi
' i# J6 j* t% [$ r% Gfi
- p* {3 ]3 Q" w+ G2 m5 I, N: k: x9 L+ S2 Y4 Z
trap 'echo Program Interrupt; cleanup_alter; exit 1'  2/ z1 m' M6 r8 [* |7 i: z: s& q
while [ $count -lt $iterations ]" v7 a/ r4 r% F9 L. x9 n* r' ]
do" t( s0 w8 Y6 z8 t4 |/ V# w; j
count=`expr $count + 1`8 W( f( G+ y) w# T( z$ t
ALTER_COUNT=$count2 Q5 \0 Z+ g  W' E2 s( J* K
export ALTER_COUNT. Y1 O0 c1 Y* }: u& v0 C
1 x4 q  v9 T7 o! ?
run_main
: L/ P% E! B0 Z9 U1 G# o; l
6 O0 r+ l% O* G7 P; Wdone
( C, F! g+ y7 O3 J& i/ d2 H& z* V9 `6 r0 W, O! Q' ~' ]3 B
#Monte carlo related iterations8 A0 c, i; U1 L& g' a# ?
! u( K; k7 K3 C8 ]$ u0 m9 ~9 e
monte_runtime_summary()
5 X+ ]  h7 l$ U2 R/ s7 X{$ ~5 I, g5 O& {3 R8 ~- Y5 {& P, Z
  keyword_1=real1 n% w4 ^6 A# I
  keyword_2=user  x! R; ^2 H, m$ F
  keyword_3=sys
- b7 z  f) N* @' @( h' L  {  ofile_prefix=nanosim
5 J+ q3 ]  x) {; A( q+ G1 u( O# m4 ^3 x" z7 n/ K+ u" e0 _
  if [ ! -z "$o_option" ]; then9 c; k8 X( U; m% y: o
    logfile=${o_option}.log" a7 t4 t- b* {& e, y$ R
  else) ?6 S4 \/ s0 B. u/ z
    logfile=${ofile_prefix}.log
) W( v( B& W7 a/ Z* B0 l! q6 d  fi2 o" v8 O: Q- m$ t9 T7 c
5 {& c, c% M! A6 F
  if [ -f $logfile ]; then
/ Q7 P' @; e2 A    echo "*** Monte Carlo Total Run Time Summary ***" >> $logfile      : s1 {' H% k/ \0 P$ \
    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
: }5 {1 P# T* K% B! d6 K$ L  fi
4 O& {5 H  J+ y! h: I: C}
6 {) e3 Y7 S1 \* {% e; L. i! O2 x# N% g- W0 N' u
next_monte=01 ~: s3 |- O8 O6 k" U8 M
cur_monte=0
" X4 s9 ^+ q8 E: g' A. A* @
, i" A/ N2 _; A7 f$ ^/ P9 }# N+ F' Uif test -s "$MONTE_COUNT_FILE"1 ]! e& m+ A5 N8 t9 E3 `( @
then9 G8 M: x! Y/ ?  Z  O: P% C
  if [ -r $MONTE_COUNT_FILE ]; then3 _: ^5 p! B6 N3 z: ]- r
   exec 8< $MONTE_COUNT_FILE: V/ Z' g+ X  A; i0 |2 K
   read next_monte <&8
7 M0 ~* v* n: I/ g" ?  fi
1 V& _5 d5 g0 i( Ufi1 G+ u# k0 b+ B# ?
. `/ D6 p7 g: M$ J, N, I+ ~1 @
trap 'echo Program Interrupt; cleanup_monte; exit 1'  23 G2 W0 E2 f( \0 _) m) N
while [ $next_monte -gt 0 -a $next_monte != $cur_monte ]- t3 X& F( n0 j! J
do
) @) \, b7 J* D0 U- W& D  NS_CURRENT_MONTE_COUNT=$next_monte
: O: @& z. z% |6 J! B  export NS_CURRENT_MONTE_COUNT" ]8 p0 P2 A9 k! L1 }* P  ]

+ d$ g0 N; U7 F' m/ p  echo "restore_ckt_state save_file=$MONTE_IMG_FILE" > $MONTE_CFG_FILE, g. `: Z8 \4 v1 F6 X
  CMDLINE="$CMDLINE -c $MONTE_CFG_FILE"
7 y$ M6 o3 Y. H- n  run_main
2 p/ A/ d7 Q# K/ G# |2 Z9 @
( {4 `- Y; W: n) u7 b0 x  cur_monte=$next_monte
6 p4 r- g0 l2 G  exec 8< $MONTE_COUNT_FILE
1 o0 i# R5 f6 ^; u2 |  read next_monte <&85 b5 S7 x  H$ g% S( C
done
8 U/ j$ p4 d% y8 B9 H' w, i# e/ F: C
if [ -f $MONTE_COUNT_FILE ]$ s. {- T- V  f  ]5 ~$ l. x
then
& T# ~8 o4 B* N% ^5 T3 x3 i  monte_runtime_summary+ }) y9 n; ~2 A0 \2 t5 ~7 k  {8 q
fi5 j0 K, K6 m3 O$ ?/ x, k) P

$ u9 L0 K" r) O% w/ D% ocleanup_alter( t. r, T0 c' {2 z; [- f# Y
cleanup_monte/ Q; I! C5 x% G. x4 P

  h3 F4 R& T/ aExit $ret_stat

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-2-19 06:33 AM , Processed in 0.216013 second(s), 15 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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