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;..}....