Hex Artifact Content

Not logged in

Artifact 3294a27309b29b65d4b365b6ff5d3af5f05ed144:


0000: 2f 2f 2d 2d 2d 20 4b 2e 49 2e 4c 49 42 20 2d 2d  //--- K.I.LIB --
0010: 2d 0d 0a 2f 2f 20 6b 6c 5f 72 79 74 68 70 2e 63  -..// kl_rythp.c
0020: 70 70 20 3a 20 69 6e 74 65 72 70 72 65 74 6f 72  pp : interpretor
0030: 20 66 6f 72 20 73 69 6d 70 6c 65 20 73 63 72 69   for simple scri
0040: 70 74 20 6c 61 6e 67 61 75 61 67 65 20 27 52 79  pt langauage 'Ry
0050: 74 68 70 27 0d 0a 0d 0a 23 69 6e 63 6c 75 64 65  thp'....#include
0060: 20 22 73 74 64 61 66 78 2e 68 22 0d 0a 23 69 6e   "stdafx.h"..#in
0070: 63 6c 75 64 65 20 22 6b 69 6c 69 62 65 78 74 2e  clude "kilibext.
0080: 68 22 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  h"....//--------
0090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 56 61 72  ------------ Var
00a0: 69 61 6e 74 20 8c 5e 95 cf 90 94 20 2d 2d 2d 2d  iant .^.... ----
00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00c0: 2d 2d 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 69 6e 74 20  ------//....int 
00d0: 6b 69 56 61 72 3a 3a 67 65 74 49 6e 74 28 29 0d  kiVar::getInt().
00e0: 0a 7b 0d 0a 09 69 6e 74 20 6e 3d 30 3b 0d 0a 09  .{...int n=0;...
00f0: 62 6f 6f 6c 20 6d 69 6e 75 73 20 3d 20 28 2a 6d  bool minus = (*m
0100: 5f 70 42 75 66 3d 3d 27 2d 27 29 3b 0d 0a 09 66  _pBuf=='-');...f
0110: 6f 72 28 20 63 68 61 72 2a 20 70 20 3d 20 6d 69  or( char* p = mi
0120: 6e 75 73 20 3f 20 6d 5f 70 42 75 66 2b 31 20 3a  nus ? m_pBuf+1 :
0130: 20 6d 5f 70 42 75 66 3b 20 2a 70 3b 20 70 3d 6e   m_pBuf; *p; p=n
0140: 65 78 74 28 70 29 20 29 0d 0a 09 7b 0d 0a 09 09  ext(p) )...{....
0150: 69 66 28 20 27 30 27 3e 2a 70 20 7c 7c 20 2a 70  if( '0'>*p || *p
0160: 3e 27 39 27 20 29 0d 0a 09 09 09 72 65 74 75 72  >'9' ).....retur
0170: 6e 20 30 3b 0d 0a 09 09 6e 20 3d 20 28 31 30 2a  n 0;....n = (10*
0180: 6e 29 20 2b 20 28 2a 70 2d 27 30 27 29 3b 0d 0a  n) + (*p-'0');..
0190: 09 7d 0d 0a 09 72 65 74 75 72 6e 20 6d 69 6e 75  .}...return minu
01a0: 73 20 3f 20 2d 6e 20 3a 20 6e 3b 0d 0a 7d 0d 0a  s ? -n : n;..}..
01b0: 0d 0a 6b 69 56 61 72 26 20 6b 69 56 61 72 3a 3a  ..kiVar& kiVar::
01c0: 71 75 6f 74 65 28 29 0d 0a 7b 0d 0a 09 69 66 28  quote()..{...if(
01d0: 20 6d 5f 70 42 75 66 5b 30 5d 3d 3d 27 5c 22 27   m_pBuf[0]=='\"'
01e0: 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 2a 74 68   )....return *th
01f0: 69 73 3b 0d 0a 09 66 6f 72 28 20 63 6f 6e 73 74  is;...for( const
0200: 20 63 68 61 72 2a 20 70 3d 6d 5f 70 42 75 66 3b   char* p=m_pBuf;
0210: 20 2a 70 3b 20 70 3d 6e 65 78 74 28 70 29 20 29   *p; p=next(p) )
0220: 0d 0a 09 09 69 66 28 20 2a 70 3d 3d 27 20 27 20  ....if( *p==' ' 
0230: 29 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 69  ).....break;...i
0240: 66 28 20 21 28 2a 70 29 20 29 0d 0a 09 09 72 65  f( !(*p) )....re
0250: 74 75 72 6e 20 2a 74 68 69 73 3b 0d 0a 0d 0a 09  turn *this;.....
0260: 69 6e 74 20 6c 6e 3d 6c 65 6e 28 29 2b 31 3b 0d  int ln=len()+1;.
0270: 0a 09 69 66 28 20 6d 5f 41 4c 65 6e 3c 6c 6e 2b  ..if( m_ALen<ln+
0280: 32 20 29 0d 0a 09 7b 0d 0a 09 09 63 68 61 72 2a  2 )...{....char*
0290: 20 74 6d 70 20 3d 20 6e 65 77 20 63 68 61 72 5b   tmp = new char[
02a0: 6d 5f 41 4c 65 6e 3d 6c 6e 2b 32 5d 3b 0d 0a 09  m_ALen=ln+2];...
02b0: 09 6b 69 5f 6d 65 6d 63 70 79 28 20 74 6d 70 2b  .ki_memcpy( tmp+
02c0: 31 2c 6d 5f 70 42 75 66 2c 6c 6e 20 29 3b 0d 0a  1,m_pBuf,ln );..
02d0: 09 09 64 65 6c 65 74 65 20 5b 5d 20 6d 5f 70 42  ..delete [] m_pB
02e0: 75 66 3b 0d 0a 09 09 6d 5f 70 42 75 66 20 3d 20  uf;....m_pBuf = 
02f0: 74 6d 70 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d  tmp;...}...else.
0300: 0a 09 09 6b 69 5f 6d 65 6d 6d 6f 76 28 20 6d 5f  ...ki_memmov( m_
0310: 70 42 75 66 2b 31 2c 6d 5f 70 42 75 66 2c 6c 6e  pBuf+1,m_pBuf,ln
0320: 20 29 3b 0d 0a 09 6d 5f 70 42 75 66 5b 30 5d 3d   );...m_pBuf[0]=
0330: 6d 5f 70 42 75 66 5b 6c 6e 5d 3d 27 5c 22 27 2c  m_pBuf[ln]='\"',
0340: 20 6d 5f 70 42 75 66 5b 6c 6e 2b 31 5d 3d 27 5c   m_pBuf[ln+1]='\
0350: 30 27 3b 0d 0a 09 72 65 74 75 72 6e 20 2a 74 68  0';...return *th
0360: 69 73 3b 0d 0a 7d 0d 0a 0d 0a 6b 69 56 61 72 26  is;..}....kiVar&
0370: 20 6b 69 56 61 72 3a 3a 75 6e 71 75 6f 74 65 28   kiVar::unquote(
0380: 29 0d 0a 7b 0d 0a 09 69 66 28 20 2a 6d 5f 70 42  )..{...if( *m_pB
0390: 75 66 21 3d 27 5c 22 27 20 29 0d 0a 09 09 72 65  uf!='\"' )....re
03a0: 74 75 72 6e 20 2a 74 68 69 73 3b 0d 0a 09 66 6f  turn *this;...fo
03b0: 72 28 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c  r( const char *l
03c0: 61 73 74 3d 6d 5f 70 42 75 66 2b 31 2c 2a 70 3d  ast=m_pBuf+1,*p=
03d0: 6d 5f 70 42 75 66 2b 31 3b 20 2a 70 3b 20 70 3d  m_pBuf+1; *p; p=
03e0: 6e 65 78 74 28 70 29 20 29 0d 0a 09 09 6c 61 73  next(p) )....las
03f0: 74 3d 70 3b 0d 0a 09 69 66 28 20 2a 6c 61 73 74  t=p;...if( *last
0400: 21 3d 27 5c 22 27 20 29 0d 0a 09 09 72 65 74 75  !='\"' )....retu
0410: 72 6e 20 2a 74 68 69 73 3b 0d 0a 0d 0a 09 6b 69  rn *this;.....ki
0420: 5f 6d 65 6d 6d 6f 76 28 20 6d 5f 70 42 75 66 2c  _memmov( m_pBuf,
0430: 6d 5f 70 42 75 66 2b 31 2c 28 6c 61 73 74 2d 6d  m_pBuf+1,(last-m
0440: 5f 70 42 75 66 29 2d 31 20 29 3b 0d 0a 09 6d 5f  _pBuf)-1 );...m_
0450: 70 42 75 66 5b 28 6c 61 73 74 2d 6d 5f 70 42 75  pBuf[(last-m_pBu
0460: 66 29 2d 31 5d 3d 27 5c 30 27 3b 0d 0a 09 72 65  f)-1]='\0';...re
0470: 74 75 72 6e 20 2a 74 68 69 73 3b 0d 0a 7d 0d 0a  turn *this;..}..
0480: 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..//------------
0490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 8f 89 8a fa 89  ---------- .....
04a0: bb 81 45 94 6a 8a fc 20 2d 2d 2d 2d 2d 2d 2d 2d  ..E.j.. --------
04b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04c0: 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 6b 69 52 79 74 68  ----//....kiRyth
04d0: 70 56 4d 3a 3a 6b 69 52 79 74 68 70 56 4d 28 29  pVM::kiRythpVM()
04e0: 0d 0a 7b 0d 0a 09 65 6c 65 5b 27 25 27 5d 20 3d  ..{...ele['%'] =
04f0: 20 22 25 22 3b 0d 0a 09 65 6c 65 5b 27 28 27 5d   "%";...ele['(']
0500: 20 3d 20 22 28 22 3b 0d 0a 09 65 6c 65 5b 27 29   = "(";...ele[')
0510: 27 5d 20 3d 20 22 29 22 3b 0d 0a 09 65 6c 65 5b  '] = ")";...ele[
0520: 27 22 27 5d 20 3d 20 22 5c 22 22 3b 0d 0a 09 65  '"'] = "\"";...e
0530: 6c 65 5b 27 2f 27 5d 20 3d 20 22 5c 6e 22 3b 0d  le['/'] = "\n";.
0540: 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  .}....//--------
0550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 83  -------------- .
0560: 70 83 89 83 81 81 5b 83 5e 96 88 82 c9 95 aa 8a  p.....[.^.......
0570: 84 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . --------------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 63 68  --------//....ch
0590: 61 72 2a 20 6b 69 52 79 74 68 70 56 4d 3a 3a 73  ar* kiRythpVM::s
05a0: 70 6c 69 74 5f 74 6f 6e 65 78 74 28 20 63 68 61  plit_tonext( cha
05b0: 72 2a 20 70 20 29 0d 0a 7b 0d 0a 09 77 68 69 6c  r* p )..{...whil
05c0: 65 28 20 2a 70 21 3d 27 5c 30 27 20 26 26 20 28  e( *p!='\0' && (
05d0: 20 2a 70 3d 3d 27 5c 74 27 20 7c 7c 20 2a 70 3d   *p=='\t' || *p=
05e0: 3d 27 20 27 20 7c 7c 20 2a 70 3d 3d 27 5c 72 27  =' ' || *p=='\r'
05f0: 20 7c 7c 20 2a 70 3d 3d 27 5c 6e 27 20 29 20 29   || *p=='\n' ) )
0600: 0d 0a 09 09 70 2b 2b 3b 0d 0a 09 72 65 74 75 72  ....p++;...retur
0610: 6e 20 28 2a 70 3d 3d 27 5c 30 27 20 3f 20 4e 55  n (*p=='\0' ? NU
0620: 4c 4c 20 3a 20 70 29 3b 0d 0a 7d 0d 0a 0d 0a 63  LL : p);..}....c
0630: 68 61 72 2a 20 6b 69 52 79 74 68 70 56 4d 3a 3a  har* kiRythpVM::
0640: 73 70 6c 69 74 5f 74 6f 65 6e 64 28 20 63 68 61  split_toend( cha
0650: 72 2a 20 70 20 29 0d 0a 7b 0d 0a 09 69 6e 74 20  r* p )..{...int 
0660: 6b 6b 63 3d 30 2c 20 64 71 63 3d 30 3b 0d 0a 09  kkc=0, dqc=0;...
0670: 77 68 69 6c 65 28 20 2a 70 21 3d 27 5c 30 27 20  while( *p!='\0' 
0680: 26 26 20 6b 6b 63 3e 3d 30 20 29 0d 0a 09 7b 0d  && kkc>=0 )...{.
0690: 0a 09 09 69 66 28 20 2a 70 3d 3d 27 28 27 20 26  ...if( *p=='(' &
06a0: 26 20 21 28 64 71 63 26 31 29 20 29 0d 0a 09 09  & !(dqc&1) )....
06b0: 09 6b 6b 63 2b 2b 3b 0d 0a 09 09 65 6c 73 65 20  .kkc++;....else 
06c0: 69 66 28 20 2a 70 3d 3d 27 29 27 20 26 26 20 21  if( *p==')' && !
06d0: 28 64 71 63 26 31 29 20 29 0d 0a 09 09 09 6b 6b  (dqc&1) ).....kk
06e0: 63 2d 2d 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28  c--;....else if(
06f0: 20 2a 70 3d 3d 27 5c 22 27 20 29 0d 0a 09 09 09   *p=='\"' ).....
0700: 64 71 63 2b 2b 3b 0d 0a 09 09 65 6c 73 65 20 69  dqc++;....else i
0710: 66 28 20 2a 70 3d 3d 27 25 27 20 29 0d 0a 09 09  f( *p=='%' )....
0720: 09 70 2b 2b 3b 0d 0a 09 09 65 6c 73 65 20 69 66  .p++;....else if
0730: 28 20 28 2a 70 3d 3d 27 5c 74 27 20 7c 7c 20 2a  ( (*p=='\t' || *
0740: 70 3d 3d 27 20 27 20 7c 7c 20 2a 70 3d 3d 27 5c  p==' ' || *p=='\
0750: 72 27 20 7c 7c 20 2a 70 3d 3d 27 5c 6e 27 29 20  r' || *p=='\n') 
0760: 26 26 20 6b 6b 63 3d 3d 30 20 26 26 20 21 28 64  && kkc==0 && !(d
0770: 71 63 26 31 29 20 29 0d 0a 09 09 09 72 65 74 75  qc&1) ).....retu
0780: 72 6e 20 70 3b 0d 0a 09 09 70 2b 2b 3b 0d 0a 09  rn p;....p++;...
0790: 7d 0d 0a 09 72 65 74 75 72 6e 20 28 6b 6b 63 3d  }...return (kkc=
07a0: 3d 30 20 26 26 20 21 28 64 71 63 26 31 29 29 20  =0 && !(dqc&1)) 
07b0: 3f 20 70 20 3a 20 4e 55 4c 4c 3b 0d 0a 7d 0d 0a  ? p : NULL;..}..
07c0: 0d 0a 62 6f 6f 6c 20 6b 69 52 79 74 68 70 56 4d  ..bool kiRythpVM
07d0: 3a 3a 73 70 6c 69 74 28 20 63 68 61 72 2a 20 62  ::split( char* b
07e0: 75 66 2c 20 6b 69 41 72 72 61 79 3c 63 68 61 72  uf, kiArray<char
07f0: 2a 3e 26 20 61 72 67 76 2c 20 6b 69 41 72 72 61  *>& argv, kiArra
0800: 79 3c 62 6f 6f 6c 3e 26 20 61 72 67 62 2c 20 69  y<bool>& argb, i
0810: 6e 74 26 20 61 72 67 63 20 29 0d 0a 7b 0d 0a 09  nt& argc )..{...
0820: 61 72 67 76 2e 65 6d 70 74 79 28 29 2c 20 61 72  argv.empty(), ar
0830: 67 62 2e 65 6d 70 74 79 28 29 2c 20 61 72 67 63  gb.empty(), argc
0840: 3d 30 3b 0d 0a 0d 0a 09 66 6f 72 28 20 63 68 61  =0;.....for( cha
0850: 72 2a 20 70 3d 62 75 66 3b 20 70 3d 73 70 6c 69  r* p=buf; p=spli
0860: 74 5f 74 6f 6e 65 78 74 28 70 29 3b 20 70 2b 2b  t_tonext(p); p++
0870: 2c 61 72 67 63 2b 2b 20 29 0d 0a 09 7b 0d 0a 09  ,argc++ )...{...
0880: 09 61 72 67 76 2e 61 64 64 28 20 70 20 29 3b 0d  .argv.add( p );.
0890: 0a 09 09 61 72 67 62 2e 61 64 64 28 20 2a 70 3d  ...argb.add( *p=
08a0: 3d 27 28 27 20 29 3b 0d 0a 0d 0a 09 09 69 66 28  ='(' );......if(
08b0: 20 21 28 70 3d 73 70 6c 69 74 5f 74 6f 65 6e 64   !(p=split_toend
08c0: 28 70 29 29 20 29 0d 0a 09 09 09 72 65 74 75 72  (p)) ).....retur
08d0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 09 69 66  n false;......if
08e0: 28 20 61 72 67 76 5b 61 72 67 63 5d 5b 30 5d 3d  ( argv[argc][0]=
08f0: 3d 27 28 27 20 7c 7c 20 61 72 67 76 5b 61 72 67  ='(' || argv[arg
0900: 63 5d 5b 30 5d 3d 3d 27 22 27 20 29 0d 0a 09 09  c][0]=='"' )....
0910: 09 61 72 67 76 5b 61 72 67 63 5d 2b 2b 2c 20 2a  .argv[argc]++, *
0920: 28 70 2d 31 29 3d 27 5c 30 27 3b 0d 0a 09 09 69  (p-1)='\0';....i
0930: 66 28 20 2a 70 3d 3d 27 5c 30 27 20 29 0d 0a 09  f( *p=='\0' )...
0940: 09 7b 0d 0a 09 09 09 61 72 67 63 2b 2b 3b 0d 0a  .{.....argc++;..
0950: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 7d 0d 0a  ...break;....}..
0960: 09 09 2a 70 3d 27 5c 30 27 3b 0d 0a 09 7d 0d 0a  ..*p='\0';...}..
0970: 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d  .return true;..}
0980: 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ....//----------
0990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
09a0: 8e c0 8d 73 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...s -----------
09b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2f 2f  --------------//
09c0: 0d 0a 0d 0a 76 6f 69 64 20 6b 69 52 79 74 68 70  ....void kiRythp
09d0: 56 4d 3a 3a 65 76 61 6c 28 20 63 68 61 72 2a 20  VM::eval( char* 
09e0: 73 74 72 2c 20 6b 69 56 61 72 2a 20 61 6e 73 20  str, kiVar* ans 
09f0: 29 0d 0a 7b 0d 0a 09 2f 2f 20 95 d4 92 6c 82 f0  )..{...// ...l..
0a00: 83 4e 83 8a 83 41 82 b5 82 c4 82 a8 82 ad 0d 0a  .N...A..........
0a10: 09 6b 69 56 61 72 20 74 6d 70 2c 2a 61 61 61 3d  .kiVar tmp,*aaa=
0a20: 26 74 6d 70 3b 0d 0a 09 69 66 28 61 6e 73 29 0d  &tmp;...if(ans).
0a30: 0a 09 09 2a 61 6e 73 3d 22 22 2c 61 61 61 3d 61  ...*ans="",aaa=a
0a40: 6e 73 3b 0d 0a 0d 0a 09 2f 2f 20 22 66 75 6e 63  ns;.....// "func
0a50: 74 69 6f 6e 20 70 61 72 61 6d 31 20 70 61 72 61  tion param1 para
0a60: 6d 32 20 2e 2e 2e 22 20 8c 60 8e ae 82 cc 95 b6  m2 ..." .`......
0a70: 8e 9a 97 f1 82 f0 83 70 83 89 83 81 81 5b 83 5e  .......p.....[.^
0a80: 82 c9 95 aa 8a 84 0d 0a 09 6b 69 41 72 72 61 79  .........kiArray
0a90: 3c 63 68 61 72 2a 3e 20 61 76 3b 0d 0a 09 6b 69  <char*> av;...ki
0aa0: 41 72 72 61 79 3c 62 6f 6f 6c 3e 20 61 62 3b 0d  Array<bool> ab;.
0ab0: 0a 09 69 6e 74 20 61 63 3b 0d 0a 09 69 66 28 20  ..int ac;...if( 
0ac0: 73 70 6c 69 74 28 20 73 74 72 2c 61 76 2c 61 62  split( str,av,ab
0ad0: 2c 61 63 20 29 20 26 26 20 61 63 20 29 0d 0a 09  ,ac ) && ac )...
0ae0: 7b 0d 0a 09 09 2f 2f 20 66 75 6e 63 74 69 6f 6e  {....// function
0af0: 96 bc 8e e6 93 be 0d 0a 09 09 6b 69 56 61 72 20  ..........kiVar 
0b00: 6e 61 6d 65 3b 0d 0a 09 09 67 65 74 61 72 67 28  name;....getarg(
0b10: 20 61 76 5b 30 5d 2c 61 62 5b 30 5d 2c 26 6e 61   av[0],ab[0],&na
0b20: 6d 65 20 29 3b 0d 0a 0d 0a 09 09 2f 2f 20 66 75  me );......// fu
0b30: 6e 63 74 69 6f 6e 8e c0 8d 73 81 49 0d 0a 09 09  nction...s.I....
0b40: 65 78 65 63 5f 66 75 6e 63 74 69 6f 6e 28 20 6e  exec_function( n
0b50: 61 6d 65 2c 20 61 76 2c 20 61 62 2c 20 61 63 2c  ame, av, ab, ac,
0b60: 20 61 61 61 20 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a   aaa );...}..}..
0b70: 0d 0a 76 6f 69 64 20 6b 69 52 79 74 68 70 56 4d  ..void kiRythpVM
0b80: 3a 3a 67 65 74 61 72 67 28 20 63 68 61 72 2a 20  ::getarg( char* 
0b90: 61 2c 20 62 6f 6f 6c 20 62 2c 20 6b 69 56 61 72  a, bool b, kiVar
0ba0: 2a 20 61 72 67 20 29 0d 0a 7b 0d 0a 09 6b 69 56  * arg )..{...kiV
0bb0: 61 72 20 74 3b 0d 0a 09 63 6f 6e 73 74 20 63 68  ar t;...const ch
0bc0: 61 72 2a 20 70 3b 0d 0a 0d 0a 09 2f 2f 20 28 2e  ar* p;.....// (.
0bd0: 2e 2e 29 20 82 c8 82 e7 20 65 76 61 6c 20 82 b7  ..) .... eval ..
0be0: 82 e9 81 42 0d 0a 09 69 66 28 20 62 20 29 0d 0a  ...B...if( b )..
0bf0: 09 7b 0d 0a 09 09 65 76 61 6c 28 20 61 2c 20 26  .{....eval( a, &
0c00: 74 20 29 2c 20 2a 61 72 67 20 3d 20 74 3b 0d 0a  t ), *arg = t;..
0c10: 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09  .}...else...{...
0c20: 09 70 20 3d 20 61 3b 0d 0a 0d 0a 09 09 2f 2f 20  .p = a;......// 
0c30: 95 cf 90 94 92 75 82 ab 8a b7 82 a6 0d 0a 09 09  .....u..........
0c40: 2a 61 72 67 3d 22 22 3b 0d 0a 09 09 66 6f 72 28  *arg="";....for(
0c50: 20 3b 20 2a 70 3b 20 2a 70 20 26 26 20 70 2b 2b   ; *p; *p && p++
0c60: 20 29 0d 0a 09 09 09 69 66 28 20 2a 70 21 3d 27   ).....if( *p!='
0c70: 25 27 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09  %' ).....{......
0c80: 2a 61 72 67 20 2b 3d 20 2a 70 3b 0d 0a 09 09 09  *arg += *p;.....
0c90: 7d 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 7b  }.....else.....{
0ca0: 0d 0a 09 09 09 09 70 2b 2b 2c 20 2a 61 72 67 2b  ......p++, *arg+
0cb0: 3d 65 6c 65 5b 28 2a 70 29 26 30 78 66 66 5d 3b  =ele[(*p)&0xff];
0cc0: 0d 0a 09 09 09 7d 0d 0a 09 7d 0d 0a 7d 0d 0a 0d  .....}...}..}...
0cd0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .//-------------
0ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 4d 69 6e  ------------ Min
0cf0: 69 6d 75 6d 2d 52 79 74 68 70 8a c2 8b ab 20 2d  imum-Rythp.... -
0d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d10: 2d 2d 2d 2d 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 6e 61  --------//....na
0d20: 6d 65 73 70 61 63 65 20 7b 0d 0a 09 73 74 61 74  mespace {...stat
0d30: 69 63 20 62 6f 6f 6c 20 69 73 49 6e 74 53 74 72  ic bool isIntStr
0d40: 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 73 74  ( const char* st
0d50: 72 20 29 20 7b 0d 0a 09 09 66 6f 72 28 3b 2a 73  r ) {....for(;*s
0d60: 74 72 3b 2b 2b 73 74 72 29 0d 0a 09 09 09 69 66  tr;++str).....if
0d70: 28 20 21 28 27 30 27 3c 3d 2a 73 74 72 20 26 26  ( !('0'<=*str &&
0d80: 20 2a 73 74 72 3c 3d 27 39 27 20 7c 7c 20 2a 73   *str<='9' || *s
0d90: 74 72 3d 3d 27 2c 27 20 7c 7c 20 2a 73 74 72 3d  tr==',' || *str=
0da0: 3d 27 2d 27 29 20 29 0d 0a 09 09 09 09 72 65 74  ='-') )......ret
0db0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 09 72 65  urn false;....re
0dc0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 09 7d 0d 0a  turn true;...}..
0dd0: 7d 0d 0a 0d 0a 62 6f 6f 6c 20 6b 69 52 79 74 68  }....bool kiRyth
0de0: 70 56 4d 3a 3a 65 78 65 63 5f 66 75 6e 63 74 69  pVM::exec_functi
0df0: 6f 6e 28 20 63 6f 6e 73 74 20 6b 69 56 61 72 26  on( const kiVar&
0e00: 20 6e 61 6d 65 2c 0d 0a 09 09 63 6f 6e 73 74 20   name,....const 
0e10: 6b 69 41 72 72 61 79 3c 63 68 61 72 2a 3e 26 20  kiArray<char*>& 
0e20: 61 2c 20 63 6f 6e 73 74 20 6b 69 41 72 72 61 79  a, const kiArray
0e30: 3c 62 6f 6f 6c 3e 26 20 62 2c 69 6e 74 20 63 2c  <bool>& b,int c,
0e40: 20 6b 69 56 61 72 2a 20 72 20 29 0d 0a 7b 0d 0a   kiVar* r )..{..
0e50: 2f 2f 09 4d 69 6e 69 6d 75 6d 2d 52 79 74 68 70  //.Minimum-Rythp
0e60: 20 82 c5 97 98 97 70 82 c5 82 ab 82 e9 20 66 75   .....p...... fu
0e70: 6e 63 74 69 6f 6e 20 82 cd 88 c8 89 ba 82 cc 92  nction .........
0e80: ca 82 e8 81 42 0d 0a 2f 2f 09 09 65 78 65 63 2c  ....B..//..exec,
0e90: 20 77 68 69 6c 65 2c 20 69 66 2c 20 6c 65 74 2c   while, if, let,
0ea0: 20 2b 2c 20 2d 2c 20 2a 2c 20 2f 2c 20 3d 2c 20   +, -, *, /, =, 
0eb0: 21 2c 20 62 65 74 77 65 65 6e 2c 20 6d 6f 64 2c  !, between, mod,
0ec0: 20 3c 2c 20 3e 0d 0a 0d 0a 09 6b 69 56 61 72 20   <, >.....kiVar 
0ed0: 74 3b 0d 0a 09 69 6e 74 20 69 2c 41 2c 42 2c 43  t;...int i,A,B,C
0ee0: 3b 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d  ;....//----- ---
0ef0: 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20  - --- -- -  -   
0f00: 2d 0d 0a 2f 2f 2d 2d 20 28 65 78 65 63 20 8e c0  -..//-- (exec ..
0f10: 8d 73 95 b6 20 8e c0 8d 73 95 b6 20 2e 2e 2e 29  .s.. ...s.. ...)
0f20: 20 72 65 74 75 72 6e 73 20 6c 61 73 74 2d 72 65   returns last-re
0f30: 73 75 6c 74 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d  sult..//----- --
0f40: 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20  -- --- -- -  -  
0f50: 20 2d 0d 0a 09 69 66 28 20 6e 61 6d 65 3d 3d 22   -...if( name=="
0f60: 65 78 65 63 22 20 29 0d 0a 09 7b 0d 0a 09 09 66  exec" )...{....f
0f70: 6f 72 28 20 69 3d 31 3b 20 69 3c 63 3b 20 69 2b  or( i=1; i<c; i+
0f80: 2b 20 29 0d 0a 09 09 09 67 65 74 61 72 67 28 20  + ).....getarg( 
0f90: 61 5b 69 5d 2c 62 5b 69 5d 2c 72 20 29 3b 0d 0a  a[i],b[i],r );..
0fa0: 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d  .}..//----- ----
0fb0: 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d   --- -- -  -   -
0fc0: 0d 0a 2f 2f 2d 2d 20 28 77 68 69 6c 65 20 8f f0  ..//-- (while ..
0fd0: 8c 8f 20 8c 4a 82 e8 95 d4 82 b7 93 e0 97 65 29  .. .J.........e)
0fe0: 20 72 65 74 75 72 6e 73 20 6c 61 73 74 2d 72 65   returns last-re
0ff0: 73 75 6c 74 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d  sult..//----- --
1000: 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20  -- --- -- -  -  
1010: 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 61   -...else if( na
1020: 6d 65 3d 3d 22 77 68 69 6c 65 22 20 29 0d 0a 09  me=="while" )...
1030: 7b 0d 0a 09 09 69 66 28 20 63 3e 3d 33 20 29 0d  {....if( c>=3 ).
1040: 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 28 93 c1 8e  ...{.....// (...
1050: ea 8f 88 97 9d 29 95 a1 90 94 89 f1 8c c4 82 d4  .....)..........
1060: 83 52 81 5b 83 68 82 c8 82 cc 82 c5 83 52 83 73  .R.[.h.......R.s
1070: 82 e7 82 c8 82 ab 82 e1 91 ca 96 da 81 42 0d 0a  .............B..
1080: 09 09 09 69 6e 74 20 4c 31 3d 6b 69 5f 73 74 72  ...int L1=ki_str
1090: 6c 65 6e 28 61 5b 31 5d 29 2c 20 4c 32 3d 6b 69  len(a[1]), L2=ki
10a0: 5f 73 74 72 6c 65 6e 28 61 5b 32 5d 29 3b 0d 0a  _strlen(a[2]);..
10b0: 09 09 09 63 68 61 72 2a 20 74 6d 70 20 3d 20 6e  ...char* tmp = n
10c0: 65 77 20 63 68 61 72 5b 20 31 20 2b 20 28 4c 31  ew char[ 1 + (L1
10d0: 3e 4c 32 20 3f 20 4c 31 20 3a 20 4c 32 29 20 5d  >L2 ? L1 : L2) ]
10e0: 3b 0d 0a 09 09 09 77 68 69 6c 65 28 20 67 65 74  ;.....while( get
10f0: 61 72 67 28 20 6b 69 5f 73 74 72 63 70 79 28 74  arg( ki_strcpy(t
1100: 6d 70 2c 61 5b 31 5d 29 2c 20 62 5b 31 5d 2c 20  mp,a[1]), b[1], 
1110: 26 74 20 29 2c 20 74 2e 67 65 74 49 6e 74 28 29  &t ), t.getInt()
1120: 21 3d 30 20 29 0d 0a 09 09 09 09 67 65 74 61 72  !=0 )......getar
1130: 67 28 20 6b 69 5f 73 74 72 63 70 79 28 74 6d 70  g( ki_strcpy(tmp
1140: 2c 61 5b 32 5d 29 2c 20 62 5b 32 5d 2c 20 72 20  ,a[2]), b[2], r 
1150: 29 3b 0d 0a 09 09 09 64 65 6c 65 74 65 20 5b 5d  );.....delete []
1160: 20 74 6d 70 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a   tmp;....}...}..
1170: 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d  //----- ---- ---
1180: 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 2f 2f   -- -  -   -..//
1190: 2d 2d 20 28 69 66 20 8f f0 8c 8f 20 90 5e 82 c8  -- (if .... .^..
11a0: 82 e7 20 5b 8b 55 82 c8 82 e7 5d 29 20 72 65 74  .. [.U....]) ret
11b0: 75 72 6e 73 20 65 78 65 63 75 74 65 64 2d 72 65  urns executed-re
11c0: 73 75 6c 74 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d  sult..//----- --
11d0: 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20  -- --- -- -  -  
11e0: 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 61   -...else if( na
11f0: 6d 65 3d 3d 22 69 66 22 20 29 0d 0a 09 7b 0d 0a  me=="if" )...{..
1200: 09 09 69 66 28 20 63 3e 3d 33 20 29 0d 0a 09 09  ..if( c>=3 )....
1210: 7b 0d 0a 09 09 09 69 66 28 20 67 65 74 61 72 67  {.....if( getarg
1220: 28 20 61 5b 31 5d 2c 62 5b 31 5d 2c 26 74 20 29  ( a[1],b[1],&t )
1230: 2c 20 74 2e 67 65 74 49 6e 74 28 29 21 3d 30 20  , t.getInt()!=0 
1240: 29 0d 0a 09 09 09 09 67 65 74 61 72 67 28 20 61  )......getarg( a
1250: 5b 32 5d 2c 62 5b 32 5d 2c 72 20 29 3b 0d 0a 09  [2],b[2],r );...
1260: 09 09 65 6c 73 65 20 69 66 28 20 63 3e 3d 34 20  ..else if( c>=4 
1270: 29 0d 0a 09 09 09 09 67 65 74 61 72 67 28 20 61  )......getarg( a
1280: 5b 33 5d 2c 62 5b 33 5d 2c 72 20 29 3b 0d 0a 09  [3],b[3],r );...
1290: 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20  .}...}..//----- 
12a0: 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d  ---- --- -- -  -
12b0: 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 6c 65 74 20     -..//-- (let 
12c0: 95 cf 90 94 96 bc 20 92 6c 20 92 6c 20 2e 2e 2e  ...... .l .l ...
12d0: 29 20 72 65 74 75 72 6e 73 20 6e 65 77 2d 76 61  ) returns new-va
12e0: 6c 75 65 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d  lue..//----- ---
12f0: 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20  - --- -- -  -   
1300: 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 61 6d  -...else if( nam
1310: 65 3d 3d 22 6c 65 74 22 20 29 0d 0a 09 7b 0d 0a  e=="let" )...{..
1320: 09 09 69 66 28 20 63 3e 3d 32 20 29 0d 0a 09 09  ..if( c>=2 )....
1330: 7b 0d 0a 09 09 09 2a 72 20 3d 20 22 22 3b 0d 0a  {.....*r = "";..
1340: 09 09 09 66 6f 72 28 20 69 3d 32 3b 20 69 3c 63  ...for( i=2; i<c
1350: 3b 20 69 2b 2b 20 29 0d 0a 09 09 09 09 67 65 74  ; i++ )......get
1360: 61 72 67 28 20 61 5b 69 5d 2c 62 5b 69 5d 2c 26  arg( a[i],b[i],&
1370: 74 20 29 2c 20 2a 72 2b 3d 74 3b 0d 0a 09 09 09  t ), *r+=t;.....
1380: 65 6c 65 5b 61 5b 31 5d 5b 30 5d 26 30 78 66 66  ele[a[1][0]&0xff
1390: 5d 20 3d 20 2a 72 3b 0d 0a 09 09 7d 0d 0a 09 7d  ] = *r;....}...}
13a0: 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d  ..//----- ---- -
13b0: 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a  -- -- -  -   -..
13c0: 2f 2f 2d 2d 20 28 3d 20 92 6c 41 20 92 6c 42 29  //-- (= .lA .lB)
13d0: 20 72 65 74 75 72 6e 73 20 41 3d 3d 42 20 3f 0d   returns A==B ?.
13e0: 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d  .//----- ---- --
13f0: 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 09  - -- -  -   -...
1400: 65 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d 3d 22  else if( name=="
1410: 3d 22 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20  =" )...{....if( 
1420: 63 3e 3d 33 20 29 0d 0a 09 09 7b 0d 0a 09 09 09  c>=3 )....{.....
1430: 6b 69 56 61 72 20 74 32 3b 0d 0a 09 09 09 67 65  kiVar t2;.....ge
1440: 74 61 72 67 28 61 5b 31 5d 2c 62 5b 31 5d 2c 26  targ(a[1],b[1],&
1450: 74 29 2c 20 20 41 3d 74 2e 67 65 74 49 6e 74 28  t),  A=t.getInt(
1460: 29 3b 0d 0a 09 09 09 67 65 74 61 72 67 28 61 5b  );.....getarg(a[
1470: 32 5d 2c 62 5b 32 5d 2c 26 74 32 29 2c 20 42 3d  2],b[2],&t2), B=
1480: 74 32 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09 09  t2.getInt();....
1490: 09 69 66 28 20 69 73 49 6e 74 53 74 72 28 74 29  .if( isIntStr(t)
14a0: 20 26 26 20 69 73 49 6e 74 53 74 72 28 74 32 29   && isIntStr(t2)
14b0: 20 29 0d 0a 09 09 09 09 2a 72 20 3d 20 41 3d 3d   )......*r = A==
14c0: 42 20 3f 20 22 31 22 20 3a 20 22 30 22 3b 0d 0a  B ? "1" : "0";..
14d0: 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 2a 72 20  ...else......*r 
14e0: 3d 20 74 3d 3d 74 32 20 3f 20 22 31 22 20 3a 20  = t==t2 ? "1" : 
14f0: 22 30 22 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 2f  "0";....}...}../
1500: 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20  /----- ---- --- 
1510: 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 2f 2f 2d  -- -  -   -..//-
1520: 2d 20 28 62 65 74 77 65 65 6e 20 92 6c 41 20 92  - (between .lA .
1530: 6c 42 20 92 6c 43 29 20 72 65 74 75 72 6e 73 20  lB .lC) returns 
1540: 41 20 3c 3d 20 42 20 3c 3d 20 43 20 3f 0d 0a 2f  A <= B <= C ?../
1550: 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20  /----- ---- --- 
1560: 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 09 65 6c  -- -  -   -...el
1570: 73 65 20 69 66 28 20 6e 61 6d 65 3d 3d 22 62 65  se if( name=="be
1580: 74 77 65 65 6e 22 20 29 0d 0a 09 7b 0d 0a 09 09  tween" )...{....
1590: 69 66 28 20 63 3e 3d 34 20 29 0d 0a 09 09 7b 0d  if( c>=4 )....{.
15a0: 0a 09 09 09 67 65 74 61 72 67 28 61 5b 31 5d 2c  ....getarg(a[1],
15b0: 62 5b 31 5d 2c 26 74 29 2c 20 41 3d 74 2e 67 65  b[1],&t), A=t.ge
15c0: 74 49 6e 74 28 29 3b 0d 0a 09 09 09 67 65 74 61  tInt();.....geta
15d0: 72 67 28 61 5b 32 5d 2c 62 5b 32 5d 2c 26 74 29  rg(a[2],b[2],&t)
15e0: 2c 20 42 3d 74 2e 67 65 74 49 6e 74 28 29 3b 0d  , B=t.getInt();.
15f0: 0a 09 09 09 67 65 74 61 72 67 28 61 5b 33 5d 2c  ....getarg(a[3],
1600: 62 5b 33 5d 2c 26 74 29 2c 20 43 3d 74 2e 67 65  b[3],&t), C=t.ge
1610: 74 49 6e 74 28 29 3b 0d 0a 09 09 09 2a 72 20 3d  tInt();.....*r =
1620: 20 28 41 3c 3d 42 20 26 26 20 42 3c 3d 43 29 20   (A<=B && B<=C) 
1630: 3f 20 22 31 22 20 3a 20 22 30 22 3b 0d 0a 09 09  ? "1" : "0";....
1640: 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d  }...}..//----- -
1650: 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20  --- --- -- -  - 
1660: 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 3c 20 92 6c 41    -..//-- (< .lA
1670: 20 92 6c 42 29 20 72 65 74 75 72 6e 73 20 41 20   .lB) returns A 
1680: 3c 20 42 20 3f 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d  < B ?..//----- -
1690: 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20  --- --- -- -  - 
16a0: 20 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e    -...else if( n
16b0: 61 6d 65 3d 3d 22 3c 22 20 29 0d 0a 09 7b 0d 0a  ame=="<" )...{..
16c0: 09 09 69 66 28 20 63 3e 3d 33 20 29 0d 0a 09 09  ..if( c>=3 )....
16d0: 7b 0d 0a 09 09 09 67 65 74 61 72 67 28 61 5b 31  {.....getarg(a[1
16e0: 5d 2c 62 5b 31 5d 2c 26 74 29 2c 20 41 3d 74 2e  ],b[1],&t), A=t.
16f0: 67 65 74 49 6e 74 28 29 3b 0d 0a 09 09 09 67 65  getInt();.....ge
1700: 74 61 72 67 28 61 5b 32 5d 2c 62 5b 32 5d 2c 26  targ(a[2],b[2],&
1710: 74 29 2c 20 42 3d 74 2e 67 65 74 49 6e 74 28 29  t), B=t.getInt()
1720: 3b 0d 0a 09 09 09 2a 72 20 3d 20 28 41 3c 42 29  ;.....*r = (A<B)
1730: 20 3f 20 22 31 22 20 3a 20 22 30 22 3b 0d 0a 09   ? "1" : "0";...
1740: 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20  .}...}..//----- 
1750: 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d  ---- --- -- -  -
1760: 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 3e 20 92 6c     -..//-- (> .l
1770: 41 20 92 6c 42 29 20 72 65 74 75 72 6e 73 20 41  A .lB) returns A
1780: 20 3e 20 42 20 3f 0d 0a 2f 2f 2d 2d 2d 2d 2d 20   > B ?..//----- 
1790: 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d  ---- --- -- -  -
17a0: 20 20 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20     -...else if( 
17b0: 6e 61 6d 65 3d 3d 22 3e 22 20 29 0d 0a 09 7b 0d  name==">" )...{.
17c0: 0a 09 09 69 66 28 20 63 3e 3d 33 20 29 0d 0a 09  ...if( c>=3 )...
17d0: 09 7b 0d 0a 09 09 09 67 65 74 61 72 67 28 61 5b  .{.....getarg(a[
17e0: 31 5d 2c 62 5b 31 5d 2c 26 74 29 2c 20 41 3d 74  1],b[1],&t), A=t
17f0: 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09 09 09 67  .getInt();.....g
1800: 65 74 61 72 67 28 61 5b 32 5d 2c 62 5b 32 5d 2c  etarg(a[2],b[2],
1810: 26 74 29 2c 20 42 3d 74 2e 67 65 74 49 6e 74 28  &t), B=t.getInt(
1820: 29 3b 0d 0a 09 09 09 2a 72 20 3d 20 28 41 3e 42  );.....*r = (A>B
1830: 29 20 3f 20 22 31 22 20 3a 20 22 30 22 3b 0d 0a  ) ? "1" : "0";..
1840: 09 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d  ..}...}..//-----
1850: 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20   ---- --- -- -  
1860: 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 21 20 92  -   -..//-- (! .
1870: 6c 41 20 5b 92 6c 42 5d 29 20 72 65 74 75 72 6e  lA [.lB]) return
1880: 73 20 41 21 3d 42 20 3f 20 6f 72 20 21 41 0d 0a  s A!=B ? or !A..
1890: 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d  //----- ---- ---
18a0: 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 09 65   -- -  -   -...e
18b0: 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d 3d 22 21  lse if( name=="!
18c0: 22 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 63  " )...{....if( c
18d0: 3e 3d 32 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 67  >=2 )....{.....g
18e0: 65 74 61 72 67 28 61 5b 31 5d 2c 62 5b 31 5d 2c  etarg(a[1],b[1],
18f0: 26 74 29 2c 20 41 3d 74 2e 67 65 74 49 6e 74 28  &t), A=t.getInt(
1900: 29 3b 0d 0a 09 09 09 69 66 28 20 63 3d 3d 32 20  );.....if( c==2 
1910: 29 0d 0a 09 09 09 09 2a 72 20 3d 20 41 3d 3d 30  )......*r = A==0
1920: 20 3f 20 22 31 22 20 3a 20 22 30 22 3b 0d 0a 09   ? "1" : "0";...
1930: 09 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09  ..else.....{....
1940: 09 09 6b 69 56 61 72 20 74 32 3b 0d 0a 09 09 09  ..kiVar t2;.....
1950: 09 67 65 74 61 72 67 28 61 5b 31 5d 2c 62 5b 31  .getarg(a[1],b[1
1960: 5d 2c 26 74 29 2c 20 20 41 3d 74 2e 67 65 74 49  ],&t),  A=t.getI
1970: 6e 74 28 29 3b 0d 0a 09 09 09 09 67 65 74 61 72  nt();......getar
1980: 67 28 61 5b 32 5d 2c 62 5b 32 5d 2c 26 74 32 29  g(a[2],b[2],&t2)
1990: 2c 20 42 3d 74 32 2e 67 65 74 49 6e 74 28 29 3b  , B=t2.getInt();
19a0: 0d 0a 09 09 09 09 69 66 28 20 69 73 49 6e 74 53  ......if( isIntS
19b0: 74 72 28 74 29 20 26 26 20 69 73 49 6e 74 53 74  tr(t) && isIntSt
19c0: 72 28 74 32 29 20 29 0d 0a 09 09 09 09 09 2a 72  r(t2) ).......*r
19d0: 20 3d 20 41 21 3d 42 20 3f 20 22 31 22 20 3a 20   = A!=B ? "1" : 
19e0: 22 30 22 3b 0d 0a 09 09 09 09 65 6c 73 65 0d 0a  "0";......else..
19f0: 09 09 09 09 09 2a 72 20 3d 20 74 21 3d 74 32 20  .....*r = t!=t2 
1a00: 3f 20 22 31 22 20 3a 20 22 30 22 3b 0d 0a 09 09  ? "1" : "0";....
1a10: 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d  .}....}...}..//-
1a20: 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d  ---- ---- --- --
1a30: 20 2d 20 20 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20   -  -   -..//-- 
1a40: 28 2b 20 92 6c 41 20 92 6c 42 29 20 72 65 74 75  (+ .lA .lB) retu
1a50: 72 6e 73 20 41 2b 42 0d 0a 2f 2f 2d 2d 2d 2d 2d  rns A+B..//-----
1a60: 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20   ---- --- -- -  
1a70: 2d 20 20 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28  -   -...else if(
1a80: 20 6e 61 6d 65 3d 3d 22 2b 22 20 29 0d 0a 09 7b   name=="+" )...{
1a90: 0d 0a 09 09 69 6e 74 20 41 20 3d 20 30 3b 0d 0a  ....int A = 0;..
1aa0: 09 09 66 6f 72 28 20 69 3d 31 3b 20 69 3c 63 3b  ..for( i=1; i<c;
1ab0: 20 69 2b 2b 20 29 0d 0a 09 09 09 41 20 2b 3d 20   i++ ).....A += 
1ac0: 28 67 65 74 61 72 67 28 61 5b 69 5d 2c 62 5b 69  (getarg(a[i],b[i
1ad0: 5d 2c 26 74 29 2c 20 74 2e 67 65 74 49 6e 74 28  ],&t), t.getInt(
1ae0: 29 29 3b 0d 0a 09 09 72 2d 3e 73 65 74 49 6e 74  ));....r->setInt
1af0: 28 41 29 3b 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d  (A);...}..//----
1b00: 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20  - ---- --- -- - 
1b10: 20 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 2d 20   -   -..//-- (- 
1b20: 92 6c 41 20 92 6c 42 29 20 72 65 74 75 72 6e 73  .lA .lB) returns
1b30: 20 41 2d 42 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d   A-B..//----- --
1b40: 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20  -- --- -- -  -  
1b50: 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 61   -...else if( na
1b60: 6d 65 3d 3d 22 2d 22 20 29 0d 0a 09 7b 0d 0a 09  me=="-" )...{...
1b70: 09 69 66 28 20 63 20 3e 3d 20 32 20 29 0d 0a 09  .if( c >= 2 )...
1b80: 09 7b 0d 0a 09 09 09 67 65 74 61 72 67 28 61 5b  .{.....getarg(a[
1b90: 31 5d 2c 62 5b 31 5d 2c 26 74 29 3b 0d 0a 09 09  1],b[1],&t);....
1ba0: 09 69 6e 74 20 41 20 3d 20 74 2e 67 65 74 49 6e  .int A = t.getIn
1bb0: 74 28 29 3b 0d 0a 09 09 09 69 66 28 20 63 3d 3d  t();.....if( c==
1bc0: 32 20 29 0d 0a 09 09 09 09 41 20 3d 20 2d 41 3b  2 )......A = -A;
1bd0: 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 66  .....else......f
1be0: 6f 72 28 20 69 3d 32 3b 20 69 3c 63 3b 20 2b 2b  or( i=2; i<c; ++
1bf0: 69 20 29 0d 0a 09 09 09 09 09 20 41 20 2d 3d 20  i )....... A -= 
1c00: 28 67 65 74 61 72 67 28 61 5b 69 5d 2c 62 5b 69  (getarg(a[i],b[i
1c10: 5d 2c 26 74 29 2c 20 74 2e 67 65 74 49 6e 74 28  ],&t), t.getInt(
1c20: 29 29 3b 0d 0a 09 09 09 72 2d 3e 73 65 74 49 6e  ));.....r->setIn
1c30: 74 28 41 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c  t(A);....}....el
1c40: 73 65 0d 0a 09 09 09 72 2d 3e 73 65 74 49 6e 74  se.....r->setInt
1c50: 28 30 29 3b 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d  (0);...}..//----
1c60: 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20  - ---- --- -- - 
1c70: 20 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 2a 20   -   -..//-- (* 
1c80: 92 6c 41 20 92 6c 42 29 20 72 65 74 75 72 6e 73  .lA .lB) returns
1c90: 20 41 2a 42 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d   A*B..//----- --
1ca0: 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20  -- --- -- -  -  
1cb0: 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 61   -...else if( na
1cc0: 6d 65 3d 3d 22 2a 22 20 29 0d 0a 09 7b 0d 0a 09  me=="*" )...{...
1cd0: 09 69 6e 74 20 41 20 3d 20 31 3b 0d 0a 09 09 66  .int A = 1;....f
1ce0: 6f 72 28 20 69 3d 31 3b 20 69 3c 63 3b 20 69 2b  or( i=1; i<c; i+
1cf0: 2b 20 29 0d 0a 09 09 09 41 20 2a 3d 20 28 67 65  + ).....A *= (ge
1d00: 74 61 72 67 28 61 5b 69 5d 2c 62 5b 69 5d 2c 26  targ(a[i],b[i],&
1d10: 74 29 2c 20 74 2e 67 65 74 49 6e 74 28 29 29 3b  t), t.getInt());
1d20: 0d 0a 09 09 72 2d 3e 73 65 74 49 6e 74 28 41 29  ....r->setInt(A)
1d30: 3b 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d  ;...}..//----- -
1d40: 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20  --- --- -- -  - 
1d50: 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 2f 20 92 6c 41    -..//-- (/ .lA
1d60: 20 92 6c 42 29 20 72 65 74 75 72 6e 73 20 41 2f   .lB) returns A/
1d70: 42 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20  B..//----- ---- 
1d80: 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d  --- -- -  -   -.
1d90: 0a 09 65 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d  ..else if( name=
1da0: 3d 22 2f 22 20 29 0d 0a 09 7b 0d 0a 09 09 69 66  ="/" )...{....if
1db0: 28 20 63 3e 3d 33 20 29 0d 0a 09 09 7b 0d 0a 09  ( c>=3 )....{...
1dc0: 09 09 67 65 74 61 72 67 28 61 5b 31 5d 2c 62 5b  ..getarg(a[1],b[
1dd0: 31 5d 2c 26 74 29 2c 20 41 3d 74 2e 67 65 74 49  1],&t), A=t.getI
1de0: 6e 74 28 29 3b 0d 0a 09 09 09 67 65 74 61 72 67  nt();.....getarg
1df0: 28 61 5b 32 5d 2c 62 5b 32 5d 2c 26 74 29 2c 20  (a[2],b[2],&t), 
1e00: 42 3d 74 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09  B=t.getInt();...
1e10: 09 09 72 2d 3e 73 65 74 49 6e 74 28 20 42 20 3f  ..r->setInt( B ?
1e20: 20 41 2f 42 20 3a 20 41 20 29 3b 0d 0a 09 09 7d   A/B : A );....}
1e30: 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d  ...}..//----- --
1e40: 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20  -- --- -- -  -  
1e50: 20 2d 0d 0a 2f 2f 2d 2d 20 28 6d 6f 64 20 92 6c   -..//-- (mod .l
1e60: 41 20 92 6c 42 29 20 72 65 74 75 72 6e 73 20 41  A .lB) returns A
1e70: 25 42 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d  %B..//----- ----
1e80: 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d   --- -- -  -   -
1e90: 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 61 6d 65  ...else if( name
1ea0: 3d 3d 22 6d 6f 64 22 20 29 0d 0a 09 7b 0d 0a 09  =="mod" )...{...
1eb0: 09 69 66 28 20 63 3e 3d 33 20 29 0d 0a 09 09 7b  .if( c>=3 )....{
1ec0: 0d 0a 09 09 09 67 65 74 61 72 67 28 61 5b 31 5d  .....getarg(a[1]
1ed0: 2c 62 5b 31 5d 2c 26 74 29 2c 20 41 3d 74 2e 67  ,b[1],&t), A=t.g
1ee0: 65 74 49 6e 74 28 29 3b 0d 0a 09 09 09 67 65 74  etInt();.....get
1ef0: 61 72 67 28 61 5b 32 5d 2c 62 5b 32 5d 2c 26 74  arg(a[2],b[2],&t
1f00: 29 2c 20 42 3d 74 2e 67 65 74 49 6e 74 28 29 3b  ), B=t.getInt();
1f10: 0d 0a 09 09 09 72 2d 3e 73 65 74 49 6e 74 28 20  .....r->setInt( 
1f20: 42 20 3f 20 41 25 42 20 3a 20 30 20 29 3b 0d 0a  B ? A%B : 0 );..
1f30: 09 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d  ..}...}..//-----
1f40: 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20   ---- --- -- -  
1f50: 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 73 6c 61  -   -..//-- (sla
1f60: 73 68 20 92 6c 41 29 20 72 65 74 75 72 6e 73 20  sh .lA) returns 
1f70: 41 2e 72 65 70 6c 61 63 65 41 6c 6c 28 22 5c 5c  A.replaceAll("\\
1f80: 22 2c 20 22 2f 22 29 0d 0a 2f 2f 2d 2d 2d 2d 2d  ", "/")..//-----
1f90: 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20   ---- --- -- -  
1fa0: 2d 20 20 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28  -   -...else if(
1fb0: 20 6e 61 6d 65 3d 3d 22 73 6c 61 73 68 22 20 29   name=="slash" )
1fc0: 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 63 3e 3d 32  ...{....if( c>=2
1fd0: 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 67 65 74 61   )....{.....geta
1fe0: 72 67 28 61 5b 31 5d 2c 62 5b 31 5d 2c 26 74 29  rg(a[1],b[1],&t)
1ff0: 3b 0d 0a 09 09 09 2a 72 20 3d 20 28 63 6f 6e 73  ;.....*r = (cons
2000: 74 20 63 68 61 72 2a 29 74 3b 0d 0a 09 09 09 72  t char*)t;.....r
2010: 2d 3e 72 65 70 6c 61 63 65 54 6f 53 6c 61 73 68  ->replaceToSlash
2020: 28 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 65  ();....}...}...e
2030: 6c 73 65 0d 0a 09 09 72 65 74 75 72 6e 20 66 61  lse....return fa
2040: 6c 73 65 3b 0d 0a 09 72 65 74 75 72 6e 20 74 72  lse;...return tr
2050: 75 65 3b 0d 0a 7d 0d 0a 0d 0a                    ue;..}....