Hex Artifact Content

Not logged in

Artifact aff058b39f0d5658e7548e108d9a70a37eda07b3:


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 76 6f 69 64 20 6b 69 56 61 72 3a 3a 71 75  ..void kiVar::qu
01c0: 6f 74 65 28 29 0d 0a 7b 0d 0a 09 69 66 28 20 6d  ote()..{...if( m
01d0: 5f 70 42 75 66 5b 30 5d 3d 3d 27 5c 22 27 20 29  _pBuf[0]=='\"' )
01e0: 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 66 6f  ....return;...fo
01f0: 72 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 70  r( const char* p
0200: 3d 6d 5f 70 42 75 66 3b 20 2a 70 3b 20 70 3d 6e  =m_pBuf; *p; p=n
0210: 65 78 74 28 70 29 20 29 0d 0a 09 09 69 66 28 20  ext(p) )....if( 
0220: 2a 70 3d 3d 27 20 27 20 29 0d 0a 09 09 09 62 72  *p==' ' ).....br
0230: 65 61 6b 3b 0d 0a 09 69 66 28 20 21 28 2a 70 29  eak;...if( !(*p)
0240: 20 29 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 0d   )....return;...
0250: 0a 09 69 6e 74 20 6c 6e 3d 6c 65 6e 28 29 2b 31  ..int ln=len()+1
0260: 3b 0d 0a 09 69 66 28 20 6d 5f 41 4c 65 6e 3c 6c  ;...if( m_ALen<l
0270: 6e 2b 32 20 29 0d 0a 09 7b 0d 0a 09 09 63 68 61  n+2 )...{....cha
0280: 72 2a 20 74 6d 70 20 3d 20 6e 65 77 20 63 68 61  r* tmp = new cha
0290: 72 5b 6d 5f 41 4c 65 6e 3d 6c 6e 2b 32 5d 3b 0d  r[m_ALen=ln+2];.
02a0: 0a 09 09 6b 69 5f 6d 65 6d 63 70 79 28 20 74 6d  ...ki_memcpy( tm
02b0: 70 2b 31 2c 6d 5f 70 42 75 66 2c 6c 6e 20 29 3b  p+1,m_pBuf,ln );
02c0: 0d 0a 09 09 64 65 6c 65 74 65 20 5b 5d 20 6d 5f  ....delete [] m_
02d0: 70 42 75 66 3b 0d 0a 09 09 6d 5f 70 42 75 66 20  pBuf;....m_pBuf 
02e0: 3d 20 74 6d 70 3b 0d 0a 09 7d 0d 0a 09 65 6c 73  = tmp;...}...els
02f0: 65 0d 0a 09 09 6b 69 5f 6d 65 6d 6d 6f 76 28 20  e....ki_memmov( 
0300: 6d 5f 70 42 75 66 2b 31 2c 6d 5f 70 42 75 66 2c  m_pBuf+1,m_pBuf,
0310: 6c 6e 20 29 3b 0d 0a 09 6d 5f 70 42 75 66 5b 30  ln );...m_pBuf[0
0320: 5d 3d 6d 5f 70 42 75 66 5b 6c 6e 5d 3d 27 5c 22  ]=m_pBuf[ln]='\"
0330: 27 2c 20 6d 5f 70 42 75 66 5b 6c 6e 2b 31 5d 3d  ', m_pBuf[ln+1]=
0340: 27 5c 30 27 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d  '\0';..}....//--
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0360: 2d 2d 2d 2d 20 8f 89 8a fa 89 bb 81 45 94 6a 8a  ---- .......E.j.
0370: fc 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . --------------
0380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2f 2f  --------------//
0390: 0d 0a 0d 0a 6b 69 52 79 74 68 70 56 4d 3a 3a 6b  ....kiRythpVM::k
03a0: 69 52 79 74 68 70 56 4d 28 29 0d 0a 7b 0d 0a 09  iRythpVM()..{...
03b0: 65 6c 65 5b 27 25 27 5d 20 3d 20 22 25 22 3b 0d  ele['%'] = "%";.
03c0: 0a 09 65 6c 65 5b 27 28 27 5d 20 3d 20 22 28 22  ..ele['('] = "("
03d0: 3b 0d 0a 09 65 6c 65 5b 27 29 27 5d 20 3d 20 22  ;...ele[')'] = "
03e0: 29 22 3b 0d 0a 09 65 6c 65 5b 27 22 27 5d 20 3d  )";...ele['"'] =
03f0: 20 22 5c 22 22 3b 0d 0a 09 65 6c 65 5b 27 2f 27   "\"";...ele['/'
0400: 5d 20 3d 20 22 5c 6e 22 3b 0d 0a 7d 0d 0a 0d 0a  ] = "\n";..}....
0410: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
0420: 2d 2d 2d 2d 2d 2d 2d 2d 20 83 70 83 89 83 81 81  -------- .p.....
0430: 5b 83 5e 96 88 82 c9 95 aa 8a 84 20 2d 2d 2d 2d  [.^........ ----
0440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0450: 2d 2d 2f 2f 0d 0a 0d 0a 63 68 61 72 2a 20 6b 69  --//....char* ki
0460: 52 79 74 68 70 56 4d 3a 3a 73 70 6c 69 74 5f 74  RythpVM::split_t
0470: 6f 6e 65 78 74 28 20 63 68 61 72 2a 20 70 20 29  onext( char* p )
0480: 0d 0a 7b 0d 0a 09 77 68 69 6c 65 28 20 2a 70 21  ..{...while( *p!
0490: 3d 27 5c 30 27 20 26 26 20 28 20 2a 70 3d 3d 27  ='\0' && ( *p=='
04a0: 5c 74 27 20 7c 7c 20 2a 70 3d 3d 27 20 27 20 7c  \t' || *p==' ' |
04b0: 7c 20 2a 70 3d 3d 27 5c 72 27 20 7c 7c 20 2a 70  | *p=='\r' || *p
04c0: 3d 3d 27 5c 6e 27 20 29 20 29 0d 0a 09 09 70 2b  =='\n' ) )....p+
04d0: 2b 3b 0d 0a 09 72 65 74 75 72 6e 20 28 2a 70 3d  +;...return (*p=
04e0: 3d 27 5c 30 27 20 3f 20 4e 55 4c 4c 20 3a 20 70  ='\0' ? NULL : p
04f0: 29 3b 0d 0a 7d 0d 0a 0d 0a 63 68 61 72 2a 20 6b  );..}....char* k
0500: 69 52 79 74 68 70 56 4d 3a 3a 73 70 6c 69 74 5f  iRythpVM::split_
0510: 74 6f 65 6e 64 28 20 63 68 61 72 2a 20 70 20 29  toend( char* p )
0520: 0d 0a 7b 0d 0a 09 69 6e 74 20 6b 6b 63 3d 30 2c  ..{...int kkc=0,
0530: 20 64 71 63 3d 30 3b 0d 0a 09 77 68 69 6c 65 28   dqc=0;...while(
0540: 20 2a 70 21 3d 27 5c 30 27 20 26 26 20 6b 6b 63   *p!='\0' && kkc
0550: 3e 3d 30 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28  >=0 )...{....if(
0560: 20 2a 70 3d 3d 27 28 27 20 26 26 20 21 28 64 71   *p=='(' && !(dq
0570: 63 26 31 29 20 29 0d 0a 09 09 09 6b 6b 63 2b 2b  c&1) ).....kkc++
0580: 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28 20 2a 70  ;....else if( *p
0590: 3d 3d 27 29 27 20 26 26 20 21 28 64 71 63 26 31  ==')' && !(dqc&1
05a0: 29 20 29 0d 0a 09 09 09 6b 6b 63 2d 2d 3b 0d 0a  ) ).....kkc--;..
05b0: 09 09 65 6c 73 65 20 69 66 28 20 2a 70 3d 3d 27  ..else if( *p=='
05c0: 5c 22 27 20 29 0d 0a 09 09 09 64 71 63 2b 2b 3b  \"' ).....dqc++;
05d0: 0d 0a 09 09 65 6c 73 65 20 69 66 28 20 2a 70 3d  ....else if( *p=
05e0: 3d 27 25 27 20 29 0d 0a 09 09 09 70 2b 2b 3b 0d  ='%' ).....p++;.
05f0: 0a 09 09 65 6c 73 65 20 69 66 28 20 28 2a 70 3d  ...else if( (*p=
0600: 3d 27 5c 74 27 20 7c 7c 20 2a 70 3d 3d 27 20 27  ='\t' || *p==' '
0610: 20 7c 7c 20 2a 70 3d 3d 27 5c 72 27 20 7c 7c 20   || *p=='\r' || 
0620: 2a 70 3d 3d 27 5c 6e 27 29 20 26 26 20 6b 6b 63  *p=='\n') && kkc
0630: 3d 3d 30 20 26 26 20 21 28 64 71 63 26 31 29 20  ==0 && !(dqc&1) 
0640: 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 70 3b 0d  ).....return p;.
0650: 0a 09 09 70 2b 2b 3b 0d 0a 09 7d 0d 0a 09 72 65  ...p++;...}...re
0660: 74 75 72 6e 20 28 6b 6b 63 3d 3d 30 20 26 26 20  turn (kkc==0 && 
0670: 21 28 64 71 63 26 31 29 29 20 3f 20 70 20 3a 20  !(dqc&1)) ? p : 
0680: 4e 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c  NULL;..}....bool
0690: 20 6b 69 52 79 74 68 70 56 4d 3a 3a 73 70 6c 69   kiRythpVM::spli
06a0: 74 28 20 63 68 61 72 2a 20 62 75 66 2c 20 6b 69  t( char* buf, ki
06b0: 41 72 72 61 79 3c 63 68 61 72 2a 3e 26 20 61 72  Array<char*>& ar
06c0: 67 76 2c 20 6b 69 41 72 72 61 79 3c 62 6f 6f 6c  gv, kiArray<bool
06d0: 3e 26 20 61 72 67 62 2c 20 69 6e 74 26 20 61 72  >& argb, int& ar
06e0: 67 63 20 29 0d 0a 7b 0d 0a 09 61 72 67 76 2e 65  gc )..{...argv.e
06f0: 6d 70 74 79 28 29 2c 20 61 72 67 62 2e 65 6d 70  mpty(), argb.emp
0700: 74 79 28 29 2c 20 61 72 67 63 3d 30 3b 0d 0a 0d  ty(), argc=0;...
0710: 0a 09 66 6f 72 28 20 63 68 61 72 2a 20 70 3d 62  ..for( char* p=b
0720: 75 66 3b 20 70 3d 73 70 6c 69 74 5f 74 6f 6e 65  uf; p=split_tone
0730: 78 74 28 70 29 3b 20 70 2b 2b 2c 61 72 67 63 2b  xt(p); p++,argc+
0740: 2b 20 29 0d 0a 09 7b 0d 0a 09 09 61 72 67 76 2e  + )...{....argv.
0750: 61 64 64 28 20 70 20 29 3b 0d 0a 09 09 61 72 67  add( p );....arg
0760: 62 2e 61 64 64 28 20 2a 70 3d 3d 27 28 27 20 29  b.add( *p=='(' )
0770: 3b 0d 0a 0d 0a 09 09 69 66 28 20 21 28 70 3d 73  ;......if( !(p=s
0780: 70 6c 69 74 5f 74 6f 65 6e 64 28 70 29 29 20 29  plit_toend(p)) )
0790: 0d 0a 09 09 09 72 65 74 75 72 6e 20 66 61 6c 73  .....return fals
07a0: 65 3b 0d 0a 0d 0a 09 09 69 66 28 20 61 72 67 76  e;......if( argv
07b0: 5b 61 72 67 63 5d 5b 30 5d 3d 3d 27 28 27 20 7c  [argc][0]=='(' |
07c0: 7c 20 61 72 67 76 5b 61 72 67 63 5d 5b 30 5d 3d  | argv[argc][0]=
07d0: 3d 27 22 27 20 29 0d 0a 09 09 09 61 72 67 76 5b  ='"' ).....argv[
07e0: 61 72 67 63 5d 2b 2b 2c 20 2a 28 70 2d 31 29 3d  argc]++, *(p-1)=
07f0: 27 5c 30 27 3b 0d 0a 09 09 69 66 28 20 2a 70 3d  '\0';....if( *p=
0800: 3d 27 5c 30 27 20 29 0d 0a 09 09 7b 0d 0a 09 09  ='\0' )....{....
0810: 09 61 72 67 63 2b 2b 3b 0d 0a 09 09 09 62 72 65  .argc++;.....bre
0820: 61 6b 3b 0d 0a 09 09 7d 0d 0a 09 09 2a 70 3d 27  ak;....}....*p='
0830: 5c 30 27 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 72  \0';...}...retur
0840: 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f  n true;..}....//
0850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 8e c0 8d 73 20 2d  --------- ...s -
0870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0880: 2d 2d 2d 2d 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 76 6f  --------//....vo
0890: 69 64 20 6b 69 52 79 74 68 70 56 4d 3a 3a 65 76  id kiRythpVM::ev
08a0: 61 6c 28 20 63 68 61 72 2a 20 73 74 72 2c 20 6b  al( char* str, k
08b0: 69 56 61 72 2a 20 61 6e 73 20 29 0d 0a 7b 0d 0a  iVar* ans )..{..
08c0: 09 2f 2f 20 95 d4 92 6c 82 f0 83 4e 83 8a 83 41  .// ...l...N...A
08d0: 82 b5 82 c4 82 a8 82 ad 0d 0a 09 6b 69 56 61 72  ...........kiVar
08e0: 20 74 6d 70 2c 2a 61 61 61 3d 26 74 6d 70 3b 0d   tmp,*aaa=&tmp;.
08f0: 0a 09 69 66 28 61 6e 73 29 0d 0a 09 09 2a 61 6e  ..if(ans)....*an
0900: 73 3d 22 22 2c 61 61 61 3d 61 6e 73 3b 0d 0a 0d  s="",aaa=ans;...
0910: 0a 09 2f 2f 20 22 66 75 6e 63 74 69 6f 6e 20 70  ..// "function p
0920: 61 72 61 6d 31 20 70 61 72 61 6d 32 20 2e 2e 2e  aram1 param2 ...
0930: 22 20 8c 60 8e ae 82 cc 95 b6 8e 9a 97 f1 82 f0  " .`............
0940: 83 70 83 89 83 81 81 5b 83 5e 82 c9 95 aa 8a 84  .p.....[.^......
0950: 0d 0a 09 6b 69 41 72 72 61 79 3c 63 68 61 72 2a  ...kiArray<char*
0960: 3e 20 61 76 3b 0d 0a 09 6b 69 41 72 72 61 79 3c  > av;...kiArray<
0970: 62 6f 6f 6c 3e 20 61 62 3b 0d 0a 09 69 6e 74 20  bool> ab;...int 
0980: 61 63 3b 0d 0a 09 69 66 28 20 73 70 6c 69 74 28  ac;...if( split(
0990: 20 73 74 72 2c 61 76 2c 61 62 2c 61 63 20 29 20   str,av,ab,ac ) 
09a0: 26 26 20 61 63 20 29 0d 0a 09 7b 0d 0a 09 09 2f  && ac )...{..../
09b0: 2f 20 66 75 6e 63 74 69 6f 6e 96 bc 8e e6 93 be  / function......
09c0: 0d 0a 09 09 6b 69 56 61 72 20 6e 61 6d 65 3b 0d  ....kiVar name;.
09d0: 0a 09 09 67 65 74 61 72 67 28 20 61 76 5b 30 5d  ...getarg( av[0]
09e0: 2c 61 62 5b 30 5d 2c 26 6e 61 6d 65 20 29 3b 0d  ,ab[0],&name );.
09f0: 0a 0d 0a 09 09 2f 2f 20 66 75 6e 63 74 69 6f 6e  .....// function
0a00: 8e c0 8d 73 81 49 0d 0a 09 09 65 78 65 63 5f 66  ...s.I....exec_f
0a10: 75 6e 63 74 69 6f 6e 28 20 6e 61 6d 65 2c 20 61  unction( name, a
0a20: 76 2c 20 61 62 2c 20 61 63 2c 20 61 61 61 20 29  v, ab, ac, aaa )
0a30: 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64  ;...}..}....void
0a40: 20 6b 69 52 79 74 68 70 56 4d 3a 3a 67 65 74 61   kiRythpVM::geta
0a50: 72 67 28 20 63 68 61 72 2a 20 61 2c 20 62 6f 6f  rg( char* a, boo
0a60: 6c 20 62 2c 20 6b 69 56 61 72 2a 20 61 72 67 20  l b, kiVar* arg 
0a70: 29 0d 0a 7b 0d 0a 09 6b 69 56 61 72 20 74 3b 0d  )..{...kiVar t;.
0a80: 0a 09 63 6f 6e 73 74 20 63 68 61 72 2a 20 70 3b  ..const char* p;
0a90: 0d 0a 0d 0a 09 2f 2f 20 28 2e 2e 2e 29 20 82 c8  .....// (...) ..
0aa0: 82 e7 20 65 76 61 6c 20 82 b7 82 e9 81 42 0d 0a  .. eval .....B..
0ab0: 09 69 66 28 20 62 20 29 0d 0a 09 09 65 76 61 6c  .if( b )....eval
0ac0: 28 20 61 2c 26 74 20 29 2c 20 70 20 3d 20 74 3b  ( a,&t ), p = t;
0ad0: 0d 0a 09 65 6c 73 65 0d 0a 09 09 70 20 3d 20 61  ...else....p = a
0ae0: 3b 0d 0a 0d 0a 09 2f 2f 20 95 cf 90 94 92 75 82  ;.....// .....u.
0af0: ab 8a b7 82 a6 0d 0a 09 2a 61 72 67 3d 22 22 3b  ........*arg="";
0b00: 0d 0a 09 66 6f 72 28 20 3b 20 2a 70 3b 20 2a 70  ...for( ; *p; *p
0b10: 20 26 26 20 70 2b 2b 20 29 0d 0a 09 09 69 66 28   && p++ )....if(
0b20: 20 2a 70 21 3d 27 25 27 20 29 0d 0a 09 09 7b 0d   *p!='%' )....{.
0b30: 0a 09 09 09 2a 61 72 67 20 2b 3d 20 2a 70 3b 0d  ....*arg += *p;.
0b40: 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a 09 09  ...}....else....
0b50: 7b 0d 0a 09 09 09 70 2b 2b 2c 20 2a 61 72 67 2b  {.....p++, *arg+
0b60: 3d 65 6c 65 5b 28 2a 70 29 26 30 78 66 66 5d 3b  =ele[(*p)&0xff];
0b70: 0d 0a 09 09 7d 0d 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d  ....}..}....//--
0b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b90: 2d 2d 2d 2d 2d 2d 2d 20 4d 69 6e 69 6d 75 6d 2d  ------- Minimum-
0ba0: 52 79 74 68 70 8a c2 8b ab 20 2d 2d 2d 2d 2d 2d  Rythp.... ------
0bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0bc0: 2d 2d 2d 2f 2f 0d 0a 0d 0a 62 6f 6f 6c 20 6b 69  ---//....bool ki
0bd0: 52 79 74 68 70 56 4d 3a 3a 65 78 65 63 5f 66 75  RythpVM::exec_fu
0be0: 6e 63 74 69 6f 6e 28 20 63 6f 6e 73 74 20 6b 69  nction( const ki
0bf0: 56 61 72 26 20 6e 61 6d 65 2c 0d 0a 09 09 63 6f  Var& name,....co
0c00: 6e 73 74 20 6b 69 41 72 72 61 79 3c 63 68 61 72  nst kiArray<char
0c10: 2a 3e 26 20 61 2c 20 63 6f 6e 73 74 20 6b 69 41  *>& a, const kiA
0c20: 72 72 61 79 3c 62 6f 6f 6c 3e 26 20 62 2c 69 6e  rray<bool>& b,in
0c30: 74 20 63 2c 20 6b 69 56 61 72 2a 20 72 20 29 0d  t c, kiVar* r ).
0c40: 0a 7b 0d 0a 2f 2f 09 4d 69 6e 69 6d 75 6d 2d 52  .{..//.Minimum-R
0c50: 79 74 68 70 20 82 c5 97 98 97 70 82 c5 82 ab 82  ythp .....p.....
0c60: e9 20 66 75 6e 63 74 69 6f 6e 20 82 cd 88 c8 89  . function .....
0c70: ba 82 cc 92 ca 82 e8 81 42 0d 0a 2f 2f 09 09 65  ........B..//..e
0c80: 78 65 63 2c 20 77 68 69 6c 65 2c 20 69 66 2c 20  xec, while, if, 
0c90: 6c 65 74 2c 20 2b 2c 20 2d 2c 20 2a 2c 20 2f 2c  let, +, -, *, /,
0ca0: 20 3d 2c 20 21 2c 20 62 65 74 77 65 65 6e 2c 20   =, !, between, 
0cb0: 6d 6f 64 0d 0a 0d 0a 09 6b 69 56 61 72 20 74 3b  mod.....kiVar t;
0cc0: 0d 0a 09 69 6e 74 20 69 2c 41 2c 42 2c 43 3b 0d  ...int i,A,B,C;.
0cd0: 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20  ...//----- ---- 
0ce0: 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d  --- -- -  -   -.
0cf0: 0a 2f 2f 2d 2d 20 28 65 78 65 63 20 8e c0 8d 73  .//-- (exec ...s
0d00: 95 b6 20 8e c0 8d 73 95 b6 20 2e 2e 2e 29 20 72  .. ...s.. ...) r
0d10: 65 74 75 72 6e 73 20 6c 61 73 74 2d 72 65 73 75  eturns last-resu
0d20: 6c 74 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d  lt..//----- ----
0d30: 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d   --- -- -  -   -
0d40: 0d 0a 09 69 66 28 20 6e 61 6d 65 3d 3d 22 65 78  ...if( name=="ex
0d50: 65 63 22 20 29 0d 0a 09 7b 0d 0a 09 09 66 6f 72  ec" )...{....for
0d60: 28 20 69 3d 31 3b 20 69 3c 63 3b 20 69 2b 2b 20  ( i=1; i<c; i++ 
0d70: 29 0d 0a 09 09 09 67 65 74 61 72 67 28 20 61 5b  ).....getarg( a[
0d80: 69 5d 2c 62 5b 69 5d 2c 72 20 29 3b 0d 0a 09 7d  i],b[i],r );...}
0d90: 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d  ..//----- ---- -
0da0: 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a  -- -- -  -   -..
0db0: 2f 2f 2d 2d 20 28 77 68 69 6c 65 20 8f f0 8c 8f  //-- (while ....
0dc0: 20 8c 4a 82 e8 95 d4 82 b7 93 e0 97 65 29 20 72   .J.........e) r
0dd0: 65 74 75 72 6e 73 20 6c 61 73 74 2d 72 65 73 75  eturns last-resu
0de0: 6c 74 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d  lt..//----- ----
0df0: 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d   --- -- -  -   -
0e00: 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 61 6d 65  ...else if( name
0e10: 3d 3d 22 77 68 69 6c 65 22 20 29 0d 0a 09 7b 0d  =="while" )...{.
0e20: 0a 09 09 69 66 28 20 63 3e 3d 33 20 29 0d 0a 09  ...if( c>=3 )...
0e30: 09 7b 0d 0a 09 09 09 2f 2f 20 28 93 c1 8e ea 8f  .{.....// (.....
0e40: 88 97 9d 29 95 a1 90 94 89 f1 8c c4 82 d4 83 52  ...)...........R
0e50: 81 5b 83 68 82 c8 82 cc 82 c5 83 52 83 73 82 e7  .[.h.......R.s..
0e60: 82 c8 82 ab 82 e1 91 ca 96 da 81 42 0d 0a 09 09  ...........B....
0e70: 09 69 6e 74 20 4c 31 3d 6b 69 5f 73 74 72 6c 65  .int L1=ki_strle
0e80: 6e 28 61 5b 31 5d 29 2c 20 4c 32 3d 6b 69 5f 73  n(a[1]), L2=ki_s
0e90: 74 72 6c 65 6e 28 61 5b 32 5d 29 3b 0d 0a 09 09  trlen(a[2]);....
0ea0: 09 63 68 61 72 2a 20 74 6d 70 20 3d 20 6e 65 77  .char* tmp = new
0eb0: 20 63 68 61 72 5b 20 31 20 2b 20 28 4c 31 3e 4c   char[ 1 + (L1>L
0ec0: 32 20 3f 20 4c 31 20 3a 20 4c 32 29 20 5d 3b 0d  2 ? L1 : L2) ];.
0ed0: 0a 09 09 09 77 68 69 6c 65 28 20 67 65 74 61 72  ....while( getar
0ee0: 67 28 20 6b 69 5f 73 74 72 63 70 79 28 74 6d 70  g( ki_strcpy(tmp
0ef0: 2c 61 5b 31 5d 29 2c 20 62 5b 31 5d 2c 20 26 74  ,a[1]), b[1], &t
0f00: 20 29 2c 20 74 2e 6c 65 6e 28 29 20 29 0d 0a 09   ), t.len() )...
0f10: 09 09 09 67 65 74 61 72 67 28 20 6b 69 5f 73 74  ...getarg( ki_st
0f20: 72 63 70 79 28 74 6d 70 2c 61 5b 32 5d 29 2c 20  rcpy(tmp,a[2]), 
0f30: 62 5b 32 5d 2c 20 72 20 29 3b 0d 0a 09 09 09 64  b[2], r );.....d
0f40: 65 6c 65 74 65 20 5b 5d 20 74 6d 70 3b 0d 0a 09  elete [] tmp;...
0f50: 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20  .}...}..//----- 
0f60: 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d  ---- --- -- -  -
0f70: 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 69 66 20 8f     -..//-- (if .
0f80: f0 8c 8f 20 90 5e 82 c8 82 e7 20 5b 8b 55 82 c8  ... .^.... [.U..
0f90: 82 e7 5d 29 20 72 65 74 75 72 6e 73 20 65 78 65  ..]) returns exe
0fa0: 63 75 74 65 64 2d 72 65 73 75 6c 74 0d 0a 2f 2f  cuted-result..//
0fb0: 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d  ----- ---- --- -
0fc0: 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 09 65 6c 73  - -  -   -...els
0fd0: 65 20 69 66 28 20 6e 61 6d 65 3d 3d 22 69 66 22  e if( name=="if"
0fe0: 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 63 3e   )...{....if( c>
0ff0: 3d 33 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66  =3 )....{.....if
1000: 28 20 67 65 74 61 72 67 28 20 61 5b 31 5d 2c 62  ( getarg( a[1],b
1010: 5b 31 5d 2c 26 74 20 29 2c 20 74 2e 6c 65 6e 28  [1],&t ), t.len(
1020: 29 20 29 0d 0a 09 09 09 09 67 65 74 61 72 67 28  ) )......getarg(
1030: 20 61 5b 32 5d 2c 62 5b 32 5d 2c 72 20 29 3b 0d   a[2],b[2],r );.
1040: 0a 09 09 09 65 6c 73 65 20 69 66 28 20 63 3e 3d  ....else if( c>=
1050: 34 20 29 0d 0a 09 09 09 09 67 65 74 61 72 67 28  4 )......getarg(
1060: 20 61 5b 33 5d 2c 62 5b 33 5d 2c 72 20 29 3b 0d   a[3],b[3],r );.
1070: 0a 09 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d  ...}...}..//----
1080: 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20  - ---- --- -- - 
1090: 20 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 6c 65   -   -..//-- (le
10a0: 74 20 95 cf 90 94 96 bc 20 92 6c 20 92 6c 20 2e  t ...... .l .l .
10b0: 2e 2e 29 20 72 65 74 75 72 6e 73 20 6e 65 77 2d  ..) returns new-
10c0: 76 61 6c 75 65 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d  value..//----- -
10d0: 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20  --- --- -- -  - 
10e0: 20 20 2d 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e    -...else if( n
10f0: 61 6d 65 3d 3d 22 6c 65 74 22 20 29 0d 0a 09 7b  ame=="let" )...{
1100: 0d 0a 09 09 69 66 28 20 63 3e 3d 32 20 29 0d 0a  ....if( c>=2 )..
1110: 09 09 7b 0d 0a 09 09 09 2a 72 20 3d 20 22 22 3b  ..{.....*r = "";
1120: 0d 0a 09 09 09 66 6f 72 28 20 69 3d 32 3b 20 69  .....for( i=2; i
1130: 3c 63 3b 20 69 2b 2b 20 29 0d 0a 09 09 09 09 67  <c; i++ )......g
1140: 65 74 61 72 67 28 20 61 5b 69 5d 2c 62 5b 69 5d  etarg( a[i],b[i]
1150: 2c 26 74 20 29 2c 20 2a 72 2b 3d 74 3b 0d 0a 09  ,&t ), *r+=t;...
1160: 09 09 65 6c 65 5b 61 5b 31 5d 5b 30 5d 26 30 78  ..ele[a[1][0]&0x
1170: 66 66 5d 20 3d 20 2a 72 3b 0d 0a 09 09 7d 0d 0a  ff] = *r;....}..
1180: 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d  .}..//----- ----
1190: 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d   --- -- -  -   -
11a0: 0d 0a 2f 2f 2d 2d 20 28 3d 20 92 6c 41 20 92 6c  ..//-- (= .lA .l
11b0: 42 29 20 72 65 74 75 72 6e 73 20 41 3d 3d 42 20  B) returns A==B 
11c0: 3f 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20  ?..//----- ---- 
11d0: 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d  --- -- -  -   -.
11e0: 0a 09 65 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d  ..else if( name=
11f0: 3d 22 3d 22 20 29 0d 0a 09 7b 0d 0a 09 09 69 66  ="=" )...{....if
1200: 28 20 63 3e 3d 33 20 29 0d 0a 09 09 7b 0d 0a 09  ( c>=3 )....{...
1210: 09 09 67 65 74 61 72 67 28 61 5b 31 5d 2c 62 5b  ..getarg(a[1],b[
1220: 31 5d 2c 26 74 29 2c 20 41 3d 74 2e 67 65 74 49  1],&t), A=t.getI
1230: 6e 74 28 29 3b 0d 0a 09 09 09 67 65 74 61 72 67  nt();.....getarg
1240: 28 61 5b 32 5d 2c 62 5b 32 5d 2c 26 74 29 2c 20  (a[2],b[2],&t), 
1250: 42 3d 74 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09  B=t.getInt();...
1260: 09 09 2a 72 20 3d 20 41 3d 3d 42 20 3f 20 22 31  ..*r = A==B ? "1
1270: 22 20 3a 20 22 22 3b 0d 0a 09 09 7d 0d 0a 09 7d  " : "";....}...}
1280: 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d  ..//----- ---- -
1290: 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a  -- -- -  -   -..
12a0: 2f 2f 2d 2d 20 28 62 65 74 77 65 65 6e 20 92 6c  //-- (between .l
12b0: 41 20 92 6c 42 20 92 6c 43 29 20 72 65 74 75 72  A .lB .lC) retur
12c0: 6e 73 20 41 20 3c 3d 20 42 20 3c 3d 20 43 20 3f  ns A <= B <= C ?
12d0: 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d  ..//----- ---- -
12e0: 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a  -- -- -  -   -..
12f0: 09 65 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d 3d  .else if( name==
1300: 22 62 65 74 77 65 65 6e 22 20 29 0d 0a 09 7b 0d  "between" )...{.
1310: 0a 09 09 69 66 28 20 63 3e 3d 34 20 29 0d 0a 09  ...if( c>=4 )...
1320: 09 7b 0d 0a 09 09 09 67 65 74 61 72 67 28 61 5b  .{.....getarg(a[
1330: 31 5d 2c 62 5b 31 5d 2c 26 74 29 2c 20 41 3d 74  1],b[1],&t), A=t
1340: 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09 09 09 67  .getInt();.....g
1350: 65 74 61 72 67 28 61 5b 32 5d 2c 62 5b 32 5d 2c  etarg(a[2],b[2],
1360: 26 74 29 2c 20 42 3d 74 2e 67 65 74 49 6e 74 28  &t), B=t.getInt(
1370: 29 3b 0d 0a 09 09 09 67 65 74 61 72 67 28 61 5b  );.....getarg(a[
1380: 33 5d 2c 62 5b 33 5d 2c 26 74 29 2c 20 43 3d 74  3],b[3],&t), C=t
1390: 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09 09 09 2a  .getInt();.....*
13a0: 72 20 3d 20 28 41 3c 3d 42 20 26 26 20 42 3c 3d  r = (A<=B && B<=
13b0: 43 29 20 3f 20 22 31 22 20 3a 20 22 22 3b 0d 0a  C) ? "1" : "";..
13c0: 09 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d  ..}...}..//-----
13d0: 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20   ---- --- -- -  
13e0: 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 21 20 92  -   -..//-- (! .
13f0: 6c 41 20 5b 92 6c 42 5d 29 20 72 65 74 75 72 6e  lA [.lB]) return
1400: 73 20 41 21 3d 42 20 3f 20 6f 72 20 21 41 0d 0a  s A!=B ? or !A..
1410: 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d  //----- ---- ---
1420: 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 09 65   -- -  -   -...e
1430: 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d 3d 22 21  lse if( name=="!
1440: 22 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 63  " )...{....if( c
1450: 3e 3d 32 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 67  >=2 )....{.....g
1460: 65 74 61 72 67 28 61 5b 31 5d 2c 62 5b 31 5d 2c  etarg(a[1],b[1],
1470: 26 74 29 2c 20 41 3d 74 2e 67 65 74 49 6e 74 28  &t), A=t.getInt(
1480: 29 3b 0d 0a 09 09 09 69 66 28 20 63 3d 3d 32 20  );.....if( c==2 
1490: 29 0d 0a 09 09 09 09 2a 72 20 3d 20 41 3d 3d 30  )......*r = A==0
14a0: 20 3f 20 22 31 22 20 3a 20 22 22 3b 0d 0a 09 09   ? "1" : "";....
14b0: 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09  .else.....{.....
14c0: 09 67 65 74 61 72 67 28 61 5b 32 5d 2c 62 5b 32  .getarg(a[2],b[2
14d0: 5d 2c 26 74 29 2c 20 42 3d 74 2e 67 65 74 49 6e  ],&t), B=t.getIn
14e0: 74 28 29 3b 0d 0a 09 09 09 09 2a 72 20 3d 20 41  t();......*r = A
14f0: 21 3d 42 20 3f 20 22 31 22 20 3a 20 22 22 3b 0d  !=B ? "1" : "";.
1500: 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a  ....}....}...}..
1510: 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d  //----- ---- ---
1520: 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 2f 2f   -- -  -   -..//
1530: 2d 2d 20 28 2b 20 92 6c 41 20 92 6c 42 29 20 72  -- (+ .lA .lB) r
1540: 65 74 75 72 6e 73 20 41 2b 42 0d 0a 2f 2f 2d 2d  eturns A+B..//--
1550: 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20  --- ---- --- -- 
1560: 2d 20 20 2d 20 20 20 2d 0d 0a 09 65 6c 73 65 20  -  -   -...else 
1570: 69 66 28 20 6e 61 6d 65 3d 3d 22 2b 22 20 29 0d  if( name=="+" ).
1580: 0a 09 7b 0d 0a 09 09 69 66 28 20 63 3e 3d 33 20  ..{....if( c>=3 
1590: 29 0d 0a 09 09 7b 0d 0a 09 09 09 67 65 74 61 72  )....{.....getar
15a0: 67 28 61 5b 31 5d 2c 62 5b 31 5d 2c 26 74 29 2c  g(a[1],b[1],&t),
15b0: 20 41 3d 74 2e 67 65 74 49 6e 74 28 29 3b 0d 0a   A=t.getInt();..
15c0: 09 09 09 67 65 74 61 72 67 28 61 5b 32 5d 2c 62  ...getarg(a[2],b
15d0: 5b 32 5d 2c 26 74 29 2c 20 42 3d 74 2e 67 65 74  [2],&t), B=t.get
15e0: 49 6e 74 28 29 3b 0d 0a 09 09 09 72 2d 3e 73 65  Int();.....r->se
15f0: 74 49 6e 74 28 20 41 2b 42 20 29 3b 0d 0a 09 09  tInt( A+B );....
1600: 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d  }...}..//----- -
1610: 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20  --- --- -- -  - 
1620: 20 20 2d 0d 0a 2f 2f 2d 2d 20 28 2d 20 92 6c 41    -..//-- (- .lA
1630: 20 92 6c 42 29 20 72 65 74 75 72 6e 73 20 41 2d   .lB) returns A-
1640: 42 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20  B..//----- ---- 
1650: 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d  --- -- -  -   -.
1660: 0a 09 65 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d  ..else if( name=
1670: 3d 22 2d 22 20 29 0d 0a 09 7b 0d 0a 09 09 69 66  ="-" )...{....if
1680: 28 20 63 3e 3d 33 20 29 0d 0a 09 09 7b 0d 0a 09  ( c>=3 )....{...
1690: 09 09 67 65 74 61 72 67 28 61 5b 31 5d 2c 62 5b  ..getarg(a[1],b[
16a0: 31 5d 2c 26 74 29 2c 20 41 3d 74 2e 67 65 74 49  1],&t), A=t.getI
16b0: 6e 74 28 29 3b 0d 0a 09 09 09 67 65 74 61 72 67  nt();.....getarg
16c0: 28 61 5b 32 5d 2c 62 5b 32 5d 2c 26 74 29 2c 20  (a[2],b[2],&t), 
16d0: 42 3d 74 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09  B=t.getInt();...
16e0: 09 09 72 2d 3e 73 65 74 49 6e 74 28 20 41 2d 42  ..r->setInt( A-B
16f0: 20 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 2f 2f   );....}...}..//
1700: 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d  ----- ---- --- -
1710: 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d  - -  -   -..//--
1720: 20 28 2a 20 92 6c 41 20 92 6c 42 29 20 72 65 74   (* .lA .lB) ret
1730: 75 72 6e 73 20 41 2a 42 0d 0a 2f 2f 2d 2d 2d 2d  urns A*B..//----
1740: 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20  - ---- --- -- - 
1750: 20 2d 20 20 20 2d 0d 0a 09 65 6c 73 65 20 69 66   -   -...else if
1760: 28 20 6e 61 6d 65 3d 3d 22 2a 22 20 29 0d 0a 09  ( name=="*" )...
1770: 7b 0d 0a 09 09 69 66 28 20 63 3e 3d 33 20 29 0d  {....if( c>=3 ).
1780: 0a 09 09 7b 0d 0a 09 09 09 67 65 74 61 72 67 28  ...{.....getarg(
1790: 61 5b 31 5d 2c 62 5b 31 5d 2c 26 74 29 2c 20 41  a[1],b[1],&t), A
17a0: 3d 74 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09 09  =t.getInt();....
17b0: 09 67 65 74 61 72 67 28 61 5b 32 5d 2c 62 5b 32  .getarg(a[2],b[2
17c0: 5d 2c 26 74 29 2c 20 42 3d 74 2e 67 65 74 49 6e  ],&t), B=t.getIn
17d0: 74 28 29 3b 0d 0a 09 09 09 72 2d 3e 73 65 74 49  t();.....r->setI
17e0: 6e 74 28 20 41 2a 42 20 29 3b 0d 0a 09 09 7d 0d  nt( A*B );....}.
17f0: 0a 09 7d 0d 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d  ..}..//----- ---
1800: 2d 20 2d 2d 2d 20 2d 2d 20 2d 20 20 2d 20 20 20  - --- -- -  -   
1810: 2d 0d 0a 2f 2f 2d 2d 20 28 2f 20 92 6c 41 20 92  -..//-- (/ .lA .
1820: 6c 42 29 20 72 65 74 75 72 6e 73 20 41 2f 42 0d  lB) returns A/B.
1830: 0a 2f 2f 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d  .//----- ---- --
1840: 2d 20 2d 2d 20 2d 20 20 2d 20 20 20 2d 0d 0a 09  - -- -  -   -...
1850: 65 6c 73 65 20 69 66 28 20 6e 61 6d 65 3d 3d 22  else if( name=="
1860: 2f 22 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20  /" )...{....if( 
1870: 63 3e 3d 33 20 29 0d 0a 09 09 7b 0d 0a 09 09 09  c>=3 )....{.....
1880: 67 65 74 61 72 67 28 61 5b 31 5d 2c 62 5b 31 5d  getarg(a[1],b[1]
1890: 2c 26 74 29 2c 20 41 3d 74 2e 67 65 74 49 6e 74  ,&t), A=t.getInt
18a0: 28 29 3b 0d 0a 09 09 09 67 65 74 61 72 67 28 61  ();.....getarg(a
18b0: 5b 32 5d 2c 62 5b 32 5d 2c 26 74 29 2c 20 42 3d  [2],b[2],&t), B=
18c0: 74 2e 67 65 74 49 6e 74 28 29 3b 0d 0a 09 09 09  t.getInt();.....
18d0: 72 2d 3e 73 65 74 49 6e 74 28 20 41 2f 42 20 29  r->setInt( A/B )
18e0: 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 2f 2f 2d 2d  ;....}...}..//--
18f0: 2d 2d 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20  --- ---- --- -- 
1900: 2d 20 20 2d 20 20 20 2d 0d 0a 2f 2f 2d 2d 20 28  -  -   -..//-- (
1910: 6d 6f 64 20 92 6c 41 20 92 6c 42 29 20 72 65 74  mod .lA .lB) ret
1920: 75 72 6e 73 20 41 25 42 0d 0a 2f 2f 2d 2d 2d 2d  urns A%B..//----
1930: 2d 20 2d 2d 2d 2d 20 2d 2d 2d 20 2d 2d 20 2d 20  - ---- --- -- - 
1940: 20 2d 20 20 20 2d 0d 0a 09 65 6c 73 65 20 69 66   -   -...else if
1950: 28 20 6e 61 6d 65 3d 3d 22 6d 6f 64 22 20 29 0d  ( name=="mod" ).
1960: 0a 09 7b 0d 0a 09 09 69 66 28 20 63 3e 3d 33 20  ..{....if( c>=3 
1970: 29 0d 0a 09 09 7b 0d 0a 09 09 09 67 65 74 61 72  )....{.....getar
1980: 67 28 61 5b 31 5d 2c 62 5b 31 5d 2c 26 74 29 2c  g(a[1],b[1],&t),
1990: 20 41 3d 74 2e 67 65 74 49 6e 74 28 29 3b 0d 0a   A=t.getInt();..
19a0: 09 09 09 67 65 74 61 72 67 28 61 5b 32 5d 2c 62  ...getarg(a[2],b
19b0: 5b 32 5d 2c 26 74 29 2c 20 42 3d 74 2e 67 65 74  [2],&t), B=t.get
19c0: 49 6e 74 28 29 3b 0d 0a 09 09 09 72 2d 3e 73 65  Int();.....r->se
19d0: 74 49 6e 74 28 20 41 25 42 20 29 3b 0d 0a 09 09  tInt( A%B );....
19e0: 7d 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 09  }...}...else....
19f0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09  return false;...
1a00: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d  return true;..}.
1a10: 0a 0d 0a                                         ...