FX 02.45.1601

This commit is contained in:
CalcLoverHK 2024-01-25 03:11:21 +08:00
parent 5718339940
commit 5c72ead309
16 changed files with 284 additions and 126 deletions

View File

@ -5,7 +5,7 @@
[BINDATA] : "FXADDINror.bin"
[DISPNAME] : "CBASIC"
[APPNAME] : "@CBASIC"
[VERSION] : "02.45.1502"
[VERSION] : "02.45.1600"
[APL_ICON] : "MainIcon.bmp"
[MODULE_NUM] : 0
[MOD1_TITLE] : "CBASIC"

View File

@ -1,6 +1,6 @@
[DLSimProject]
Name=CBASIC
Version=02.45.1502
Version=02.45.1600
Model=:fx-9860G.dlm
SourcePath=.
MemoryPath=INIT

View File

@ -914,6 +914,19 @@ complex Cplx_Evalsub1(char *SRC) { // 1st Priority
case 0x5B : // MatBase( Mat A )
return Int2Cplx( CB_MatBase( SRC ) );
case 0x5D : // GetRGB() ->ListAns
return Int2Cplx(CB_GetRGB( SRC , 0 ) );
case 0x5E : // RGB(
return Int2Cplx(CB_RGB( SRC , 0 ) );
case 0x70 : // GetHSV() ->ListAns
return Int2Cplx(CB_GetRGB( SRC , 0x11 ) );
case 0x71 : // HSV(
return Int2Cplx(CB_RGB( SRC , 1) );
case 0x72 : // GetHSL() ->ListAns
return Int2Cplx(CB_GetRGB( SRC , 0x12 ) );
case 0x73 : // HSL(
return Int2Cplx(CB_RGB( SRC , 2 ) );
case 0x5C : // ListCmp( List 1, List 2)
return Int2Cplx( CB_ListCmp( SRC ) );
@ -1288,7 +1301,7 @@ complex Cplx_Evalsub5(char *SRC) { // 5th Priority abbreviated multiplication
result = Cplx_fMUL( result, Cplx_Evalsub4( SRC ) );
} else if ( c == 0x7F ) { // 7F..
c = SRC[ExecPtr+1];
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) ) goto exitj; // And Or Not xor
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) && ( c != 0xFFFFFFB3 ) ) goto exitj; // And Or xor
result = Cplx_fMUL( result, Cplx_Evalsub4( SRC ) );
} else if ( c == 0xFFFFFFF7 ) { // F7..
c = SRC[ExecPtr+1];
@ -1303,6 +1316,7 @@ complex Cplx_Evalsub5(char *SRC) { // 5th Priority abbreviated multiplication
} else if ( c == 0xFFFFFFF9 ) { // F9..
c = SRC[ExecPtr+1];
switch ( c ) {
case 0x1B: // fn
case 0x21: // Xdot
case 0x31: // StrLen(
case 0x32: // StrCmp(

View File

@ -376,6 +376,19 @@ complex Cplx_ListEvalsub1(char *SRC) { // 1st Priority
case 0x5B : // MatBase( Mat A )
return Int2Cplx( CB_MatBase( SRC ) );
case 0x5D : // GetRGB() ->ListAns
return Int2Cplx(CB_GetRGB( SRC , 0 ) );
case 0x5E : // RGB(
return Int2Cplx(CB_RGB( SRC , 0 ) );
case 0x70 : // GetHSV() ->ListAns
return Int2Cplx(CB_GetRGB( SRC , 0x11 ) );
case 0x71 : // HSV(
return Int2Cplx(CB_RGB( SRC , 1) );
case 0x72 : // GetHSL() ->ListAns
return Int2Cplx(CB_GetRGB( SRC , 0x12 ) );
case 0x73 : // HSL(
return Int2Cplx(CB_RGB( SRC , 2 ) );
case 0x5C : // ListCmp( List 1, List 2)
return Int2Cplx( CB_ListCmp( SRC ) );
@ -785,7 +798,7 @@ complex Cplx_ListEvalsub5(char *SRC) { // 5th Priority abbreviated multiplicati
result = Cplx_EvalFxDbl2( &Cplx_fMUL, &resultflag, &resultreg, result, Cplx_ListEvalsub4( SRC ) ) ;
} else if ( c == 0x7F ) { // 7F..
c = SRC[ExecPtr+1];
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) ) goto exitj; // And Or Not xor
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) && ( c != 0xFFFFFFB3 ) ) goto exitj; // And Or xor
result = Cplx_EvalFxDbl2( &Cplx_fMUL, &resultflag, &resultreg, result, Cplx_ListEvalsub4( SRC ) ) ;
} else if ( c == 0xFFFFFFF7 ) { // F7..
c = SRC[ExecPtr+1];
@ -800,6 +813,7 @@ complex Cplx_ListEvalsub5(char *SRC) { // 5th Priority abbreviated multiplicati
} else if ( c == 0xFFFFFFF9 ) { // F9..
c = SRC[ExecPtr+1];
switch ( c ) {
case 0x1B: // fn
case 0x21: // Xdot
case 0x31: // StrLen(
case 0x32: // StrCmp(

View File

@ -617,6 +617,10 @@ int EvalIntsub1(char *SRC) { // 1st Priority
}
return ReadMatrixInt( reg, dimA, dimB);
case 0x50 : // i
CB_Error(NonRealERR);
return result;
case 0x3A : // MOD(a,b)
Get2EvalInt( SRC, &tmp, &tmp2);
return fMODint(tmp,tmp2);
@ -657,6 +661,15 @@ int EvalIntsub1(char *SRC) { // 1st Priority
case 0x5F : // 1/128 Ticks
return CB_Ticks( SRC ); //
case 0xFFFFFF86 : // RndFix(n,digit)
tmp=(EvalIntsubTop( SRC ));
if ( SRC[ExecPtr] != ',' ) CB_Error(SyntaxERR) ; // Syntax error
if ( SRC[++ExecPtr] == 0xFFFFFFE4 ) { ExecPtr++; i=Sci; } else i=Fix;
tmp2 = EvalIntsubTop( SRC );
if ( SRC[ExecPtr] == ')' ) ExecPtr++;
result=Round( tmp, i, tmp2) ;
return result ;
case 0xFFFFFFF0 : // GraphY str
case 0xFFFFFFF1: // Graphr
case 0xFFFFFFF2: // GraphXt
@ -739,6 +752,19 @@ int EvalIntsub1(char *SRC) { // 1st Priority
case 0x5B : // MatBase( Mat A )
return CB_MatBase( SRC );
case 0x5D : // GetRGB() ->ListAns
return CB_GetRGB( SRC, 0 );
case 0x5E : // RGB(
return CB_RGB( SRC, 0 );
case 0x70 : // GetHSV() ->ListAns
return CB_GetRGB( SRC, 1 );
case 0x71 : // HSV(
return CB_RGB( SRC, 1 );
case 0x72 : // GetHSL() ->ListAns
return CB_GetRGB( SRC, 2 );
case 0x73 : // HSL(
return CB_RGB( SRC, 2 );
case 0x5C : // ListCmp( List 1, List 2)
return CB_ListCmp( SRC );
@ -991,7 +1017,7 @@ int EvalIntsub5(char *SRC) { // 5th Priority abbreviated multiplication
result *= EvalIntsub4( SRC ) ;
} else if ( c == 0x7F ) { // 7F..
c = SRC[ExecPtr+1];
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) ) goto exitj; // And Or Not xor
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) && ( c != 0xFFFFFFB3 ) ) goto exitj; // And Or xor
result *= EvalIntsub4( SRC ) ;
} else if ( c == 0xFFFFFFF7 ) { // F7..
c = SRC[ExecPtr+1];
@ -1006,6 +1032,7 @@ int EvalIntsub5(char *SRC) { // 5th Priority abbreviated multiplication
} else if ( c == 0xFFFFFFF9 ) { // F9..
c = SRC[ExecPtr+1];
switch ( c ) {
case 0x1B: // fn
case 0x21: // Xdot
case 0x31: // StrLen(
case 0x32: // StrCmp(
@ -1254,7 +1281,7 @@ int Hitickstmp=0;
#define P7305_EXTRA_TMU5_COUNT 0xA44D00D8
unsigned int GetTicks32768(){
if ( IsSH3 ) return RTC_GetTicks()<<8;
if ( IsSH3 ) return -(RTC_GetTicks()<<8);
return *(unsigned int*)P7305_EXTRA_TMU5_COUNT;
}
@ -1267,7 +1294,7 @@ void CB_StoreTicks( char *SRC, int value ) {
if ( IsSH3 == 0 ) high=1;
}
if ( high ) {
t=(int)GetTicks32768();
t=-(int)GetTicks32768();
CB_HiTicksAdjust=t-value;
} else {
t=RTC_GetTicks();
@ -1277,7 +1304,7 @@ void CB_StoreTicks( char *SRC, int value ) {
}
int CB_RTC_GetTicks( int high ) {
if ( high ) return CB_HiTicksAdjust-(int)GetTicks32768() ;
if ( high ) return -(int)GetTicks32768()-CB_HiTicksAdjust ;
return RTC_GetTicks()-CB_TicksAdjust ;
}
int CB_Ticks( char *SRC ) {
@ -1286,7 +1313,7 @@ int CB_Ticks( char *SRC ) {
int t;
if ( SRC[ExecPtr] == '%' ) { // hi-res timer
ExecPtr++;
if ( IsSH3 == 0 ) high=1;
high=1;
}
t=CB_RTC_GetTicks(high);
if ( SRC[ExecPtr]==0xFFFFFFF9 ) {

View File

@ -183,6 +183,10 @@ int ListEvalIntsub1(char *SRC) { // 1st Priority
}
return ReadMatrixInt( reg, dimA, dimB);
case 0x50 : // i
CB_Error(NonRealERR);
return result;
case 0x3A : // MOD(a,b)
result = ListEvalIntsubTop( SRC );
resultflag=dspflag; // 2:result 3:Listresult
@ -252,6 +256,15 @@ int ListEvalIntsub1(char *SRC) { // 1st Priority
case 0x5F : // 1/128 Ticks
return CB_Ticks( SRC ); //
case 0xFFFFFF86 : // RndFix(n,digit)
tmp=(EvalIntsubTop( SRC ));
if ( SRC[ExecPtr] != ',' ) CB_Error(SyntaxERR) ; // Syntax error
if ( SRC[++ExecPtr] == 0xFFFFFFE4 ) { ExecPtr++; i=Sci; } else i=Fix;
tmp2 = EvalIntsubTop( SRC );
if ( SRC[ExecPtr] == ')' ) ExecPtr++;
result=Round( tmp, i, tmp2) ;
return result ;
case 0xFFFFFFF0 : // GraphY str
case 0xFFFFFFF1: // Graphr
case 0xFFFFFFF2: // GraphXt
@ -334,6 +347,19 @@ int ListEvalIntsub1(char *SRC) { // 1st Priority
case 0x5B : // MatBase( Mat A )
return CB_MatBase( SRC );
case 0x5D : // GetRGB() ->ListAns
return CB_GetRGB( SRC, 0 );
case 0x5E : // RGB(
return CB_RGB( SRC, 0 );
case 0x70 : // GetHSV() ->ListAns
return CB_GetRGB( SRC, 1 );
case 0x71 : // HSV(
return CB_RGB( SRC, 1 );
case 0x72 : // GetHSL() ->ListAns
return CB_GetRGB( SRC, 2 );
case 0x73 : // HSL(
return CB_RGB( SRC, 2 );
case 0x5C : // ListCmp( List 1, List 2)
return CB_ListCmp( SRC );
@ -616,7 +642,7 @@ int ListEvalIntsub5(char *SRC) { // 5th Priority abbreviated multiplication
result = EvalFxInt2( &fMULint, &resultflag, &resultreg, result, ListEvalIntsub4( SRC ) ) ;
} else if ( c == 0x7F ) { // 7F..
c = SRC[ExecPtr+1];
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) ) goto exitj; // And Or Not xor
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) && ( c != 0xFFFFFFB3 ) ) goto exitj; // And Or xor
result = EvalFxInt2( &fMULint, &resultflag, &resultreg, result, ListEvalIntsub4( SRC ) ) ;
} else if ( c == 0xFFFFFFF7 ) { // F7..
c = SRC[ExecPtr+1];
@ -631,6 +657,7 @@ int ListEvalIntsub5(char *SRC) { // 5th Priority abbreviated multiplication
} else if ( c == 0xFFFFFFF9 ) { // F9..
c = SRC[ExecPtr+1];
switch ( c ) {
case 0x1B: // fn
case 0x21: // Xdot
case 0x31: // StrLen(
case 0x32: // StrCmp(

View File

@ -334,6 +334,41 @@ void CB_Except( char*SRC ) {
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
int CB_GetRGB( char *SRC, int mode ){ // GetRGB/HSV/HSL() -> ListAns
int c,d,r,g,b,m;
int h,s,v;
int base=MatBase;
int errorCheck=1;
int pipe=mode & 0xF0;
mode &= 0x0F;
d = CB_EvalInt( SRC );
if ( SRC[ExecPtr] == ',' ) {
c=SRC[++ExecPtr];
if ( ( c == 'N' ) || ( c == 'N' ) ) { ExecPtr++; errorCheck=0; }
}
if ( SRC[ExecPtr] == ')' ) ExecPtr++;
b = ((d&0x001F) << 3);
g = ((d&0x07E0) >> 3);
r = ((d&0xF800) >> 8);
h=r; s=g; v=b;
// if ( mode ) {
// if ( ( errorCheck ) && ( pipe==0 ) ) {
// if ( (d==0x003F) || (d==0x041F) || (d==0xF820) || (d==0xFC00) ) { if ( CannotSupportERROR( d ) ) return 0; } // Can not support error
// }
// if ( mode==1 ) rgb2hsv(r,g,b,&h,&s,&v); // rgb->HSV
// if ( mode==2 ) rgb2hsl(r,g,b,&h,&s,&v); // rgb->HSL
// }
dspflag=4; // List ans
NewMatListAns( 3, 1, base, 32 ); // List Ans[3]
m=base;
WriteMatrix( CB_MatListAnsreg, m++, base, h ) ; //
WriteMatrix( CB_MatListAnsreg, m++, base, s ) ; //
WriteMatrix( CB_MatListAnsreg, m , base, v ) ; //
return d;
}
int CB_RGBlistsub( char *SRC, int*r, int*g, int*b ){
int reg;
int m,n;

View File

@ -3229,6 +3229,7 @@ int PP_Search_CR_SPACE(char *SRC ){
PP_Search_CR_SPACE_Skip_quot(SRC, &ptr);
break ;
case 0x27: // '
case 0x13: // =>
PP_Search_CR_SPACE_Skip_comment(SRC, &ptr);
break ;
case 0x0C: // <Disps>
@ -3284,12 +3285,15 @@ int PP_Indent_Skip_quot(char *SRC, char *dest, int *sptr, int *dptr){
int CB_PreProcessIndent( char *filebase, int progno ) { //
char *dest,*SRC;
int ptr;
int c,i;
int c,i,j;
int size,maxsize,newsize;
int editMax;
int sptr=0,dptr=0;
int indent = 0;
int editIndent=(CB_EditIndent&0x07);
int switch_nest=0;
int switch_indent[16];
for( i=0;i<16;i++) switch_indent[i]=0;
if ( editIndent == 0 ) return 0;
if ( PP_Search_CR_SPACE( filebase+0x56 ) ) return 0; // already exist indent
@ -3305,6 +3309,7 @@ int CB_PreProcessIndent( char *filebase, int progno ) { //
SRC = filebase+maxsize-size +0x56;
dest = filebase +0x56;
while ( sptr < size ){
if ( dptr >= maxsize ) {
CB_Error(NotEnoughMemoryERR); CB_ErrMsg(ErrorNo); return 1; } //
@ -3340,18 +3345,48 @@ int CB_PreProcessIndent( char *filebase, int progno ) { //
case 0x04: // For
case 0x08: // While
case 0x0A: // Do
case 0x0FFFFFFEA: // Switch
// case 0x0FFFFFFEB: // Case
indent += editIndent;
break;
case 0x01: // Then
if ( SRC[sptr] == ':' ) SRC[sptr]=0x0D;
break;
case 0x0FFFFFFEA: // Switch
indent += editIndent;
if ( switch_nest<16 ) switch_nest++;
switch_indent[switch_nest]=indent;
break;
case 0x0FFFFFFEB: // Case
case 0x0FFFFFFEC: // Default
if ( switch_indent[switch_nest]==0 ) break;
if ( dest[dptr-3]==' ' ) {
indent = switch_indent[switch_nest];
j = editIndent;
goto jindent;
}
break;
case 0x0FFFFFFED: // SwitchEnd
j = 0;
if ( dest[dptr-3]==' ' ) {
indent = switch_indent[switch_nest]-editIndent;
if ( switch_nest>1 ) switch_nest--;
jindent:
dptr -= 3;
while ( dest[--dptr] == ' ') ;
dptr++;
i = 1 ;
while ( i <= indent ) {
dest[dptr++]=' ';
i++;
}
dest[dptr++]=0xF7;
dest[dptr++]=c;
}
indent += j;
break;
case 0x03: // IfEnd
case 0x07: // Next
case 0x09: // WhileEnd
case 0x0B: // LpWhile
case 0x0FFFFFFED: // SwitchEnd
indent -= editIndent;
if ( indent < 0 ) indent =0 ;
case 0x02: // Else
@ -3363,7 +3398,7 @@ int CB_PreProcessIndent( char *filebase, int progno ) { //
if ( i >= editIndent ) break;
dptr--;
i++;
} while ( dest[dptr]==' ' ) ;
} while ( dest[dptr] == ' ' ) ;
dest[dptr++]=0xF7;
dest[dptr++]=c;
}
@ -3411,6 +3446,7 @@ void CB_PostProcessIndentRemove( char *filebase ) { //
switch ( c ) {
case 0x00: // <EOF>
goto exit;
case 0x13: // =>
case 0x22: // "
case 0x27: // '
PP_Indent_Skip_quot(SRC, dest, &sptr, &dptr);
@ -3460,34 +3496,6 @@ void CB_Local( char *SRC ) {
}
//----------------------------------------------------------------------------------------------
void Skip_rem_no_op( char *SRC ){
int c=SRC[ExecPtr];
if ( c=='/' ) { // '/ execute C.Basic only
ExecPtr++;
return;
}
while (1){
switch ( c ) {
case 0x00: // <EOF>
ExecPtr--;
case 0x0C: // dsps
case 0x0D: // <CR>
return ;
break;
case 0x7F: //
case 0xFFFFFFF7: //
case 0xFFFFFFF9: //
case 0xFFFFFFE5: //
case 0xFFFFFFE6: //
case 0xFFFFFFE7: //
// case 0xFFFFFFFF: //
ExecPtr++;
break;
}
c=SRC[ExecPtr++];
}
}
int PP_Search_IfEnd( char *SRC ){
int c,i;
int PP_ptr;
@ -3947,7 +3955,6 @@ void FavoritesDowndummy( int *index ) {
(*index)++;
SaveFavorites();
}
/*
void FavoritesDowndummy2( int *index ) {
unsigned short tmp;
char tmpname[FILENAMEMAX];
@ -3996,6 +4003,7 @@ void FavoritesDowndummy4( int *index ) {
files[(*index)].filesize=tmp;
SaveFavorites();
}
/*
void FavoritesDowndummy5( int *index ) {
unsigned short tmp;
char tmpname[FILENAMEMAX];

View File

@ -763,7 +763,7 @@ int InitOpcodeRecent() {
int AddOpcodeRecent( short opcode ) {
int i,j;
if ( ( 0x0D == opcode ) || ( 0x0E == opcode ) || ( ',' == opcode ) ) return;
if ( ( ('a'<=opcode)&&(opcode<='z') ) || ( 0x0D == opcode ) || ( 0x0E == opcode ) || ( ',' == opcode ) ) return;
if ( MathKey( (unsigned int) opcode ) ) return ;
for (i=0; i<OpRecentMax; i++) {

View File

@ -52,7 +52,7 @@ void VerDispSub( int flag ) {
locate( 3, 5 ); Print( (unsigned char*)" by sentaro21" );
locate( 3, 6 ); Print( (unsigned char*)" (c)2020" );
PrintMini(13*6+2, 2*8+1, (unsigned char*)"build 15.", MINI_OVER );
PrintMini(13*6+2, 2*8+1, (unsigned char*)"build 16", MINI_OVER );
PrintMini( 2*6+2, 3*8+1, (unsigned char*)"(Casio Basic compatible+)", MINI_OVER );
// if ( ( UseHiddenRAM ) && ( IsHiddenRAM ) ) {

View File

@ -540,10 +540,6 @@ void MatOprand1( char *SRC, int reg, int *dimA, int *dimB ){ // base:0 0- ba
int EvalObjectAlignE4d( unsigned int n ){ return n+n; } // align +6byte
//int EvalObjectAlignE4e( unsigned int n ){ return n; } // align +4byte
//int EvalObjectAlignE4f( unsigned int n ){ return n; } // align +4byte
//int EvalObjectAlignE4g( unsigned int n ){ return n; } // align +4byte
//int EvalObjectAlignE4h( unsigned int n ){ return n; } // align +4byte
//int EvalObjectAlignE4i( unsigned int n ){ return n; } // align +4byte
//int EvalObjectAlignE4j( unsigned int n ){ return n; } // align +4byte
//-----------------------------------------------------------------------------
double CB_EvalDbl( char *SRC ) {
double value;
@ -698,6 +694,10 @@ double EvalsubTop( char *SRC ) { // eval 1
}
//----------------------------------------------------------------------------------------------
int EvalObjectAlignE4g( unsigned int n ){ return n; } // align +4byte
int EvalObjectAlignE4h( unsigned int n ){ return n; } // align +4byte
//int EvalObjectAlignE4i( unsigned int n ){ return n; } // align +4byte
//int EvalObjectAlignE4j( unsigned int n ){ return n; } // align +4byte
//----------------------------------------------------------------------------------------------
double frac( double x ) {
@ -1294,6 +1294,10 @@ double Evalsub1(char *SRC) { // 1st Priority
}
return ReadMatrix( reg, dimA, dimB);
case 0x50 : // i
CB_Error(NonRealERR);
return result;
case 0x3A : // MOD(a,b)
Get2Eval( SRC, &tmp, &tmp2);
return fMOD(tmp,tmp2);
@ -1433,6 +1437,19 @@ double Evalsub1(char *SRC) { // 1st Priority
case 0x5B : // MatBase( Mat A )
return CB_MatBase( SRC );
case 0x5D : // GetRGB() ->ListAns
return CB_GetRGB( SRC, 0 );
case 0x5E : // RGB(
return CB_RGB( SRC, 0 );
case 0x70 : // GetHSV() ->ListAns
return CB_GetRGB( SRC, 1 );
case 0x71 : // HSV(
return CB_RGB( SRC, 1 );
case 0x72 : // GetHSL() ->ListAns
return CB_GetRGB( SRC, 2 );
case 0x73 : // HSL(
return CB_RGB( SRC, 2 );
case 0x5C : // ListCmp( List 1, List 2)
return CB_ListCmp( SRC );
@ -1843,7 +1860,7 @@ double Evalsub5(char *SRC) { // 5th Priority abbreviated multiplication
result *= Evalsub4( SRC ) ;
} else if ( c == 0x7F ) { // 7F..
c = SRC[ExecPtr+1];
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) ) goto exitj; // And Or Not xor
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) && ( c != 0xFFFFFFB3 ) ) goto exitj; // And Or xor
result *= Evalsub4( SRC ) ;
} else if ( c == 0xFFFFFFF7 ) { // F7..
c = SRC[ExecPtr+1];
@ -1858,6 +1875,7 @@ double Evalsub5(char *SRC) { // 5th Priority abbreviated multiplication
} else if ( c == 0xFFFFFFF9 ) { // F9..
c = SRC[ExecPtr+1];
switch ( c ) {
case 0x1B: // fn
case 0x21: // Xdot
case 0x31: // StrLen(
case 0x32: // StrCmp(

View File

@ -265,6 +265,10 @@ double ListEvalsub1(char *SRC) { // 1st Priority
}
return ReadMatrix( reg, dimA, dimB);
case 0x50 : // i
CB_Error(NonRealERR);
return result;
case 0x3A : // MOD(a,b)
result = ListEvalsubTop( SRC );
resultflag=dspflag; // 2:result 3:Listresult
@ -434,6 +438,19 @@ double ListEvalsub1(char *SRC) { // 1st Priority
case 0x5B : // MatBase( Mat A )
return CB_MatBase( SRC );
case 0x5D : // GetRGB() ->ListAns
return CB_GetRGB( SRC, 0 );
case 0x5E : // RGB(
return CB_RGB( SRC, 0 );
case 0x70 : // GetHSV() ->ListAns
return CB_GetRGB( SRC, 1 );
case 0x71 : // HSV(
return CB_RGB( SRC, 1 );
case 0x72 : // GetHSL() ->ListAns
return CB_GetRGB( SRC, 2 );
case 0x73 : // HSL(
return CB_RGB( SRC, 2 );
case 0x5C : // ListCmp( List 1, List 2)
return CB_ListCmp( SRC );
@ -843,7 +860,7 @@ double ListEvalsub5(char *SRC) { // 5th Priority abbreviated multiplication
result = EvalFxDbl2( &fMUL, &resultflag, &resultreg, result, ListEvalsub4( SRC ) ) ;
} else if ( c == 0x7F ) { // 7F..
c = SRC[ExecPtr+1];
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) ) goto exitj; // And Or Not xor
if ( ( 0xFFFFFFB0 <= c ) && ( c <= 0xFFFFFFBD ) && ( c != 0xFFFFFFB3 ) ) goto exitj; // And Or xor
result = EvalFxDbl2( &fMUL, &resultflag, &resultreg, result, ListEvalsub4( SRC ) ) ;
} else if ( c == 0xFFFFFFF7 ) { // F7..
c = SRC[ExecPtr+1];
@ -858,6 +875,7 @@ double ListEvalsub5(char *SRC) { // 5th Priority abbreviated multiplication
} else if ( c == 0xFFFFFFF9 ) { // F9..
c = SRC[ExecPtr+1];
switch ( c ) {
case 0x1B: // fn
case 0x21: // Xdot
case 0x31: // StrLen(
case 0x32: // StrCmp(

View File

@ -1686,7 +1686,7 @@ int SetMatrix(int select){ // ----------- Set Matrix
if ( select<58 ) {
if ( (select%58) >= 29 ) Fkey_dispN_aA( FKeyNo6, "A<>a"); else Fkey_dispN_Aa( FKeyNo6, "A<>a");
} else {
Fkey_dispN( FKeyNo6, ">A-z");
Fkey_dispN( FKeyNo6, "A<>a");
FkeyMask( FKeyNo6 );
}
@ -3724,7 +3724,7 @@ void CB_Seq( char *SRC ) { // Seq(X^2,X,1,10,1)->List 1[.B][.W][.L][.F]
int fxreg,reg;
int exptr,exptr2;
complex data,databack;
double start,end,step;
double start,end,step,tmp;
int dataint,databackint;
int startint,endint,stepint;
int m,n;
@ -3735,7 +3735,7 @@ void CB_Seq( char *SRC ) { // Seq(X^2,X,1,10,1)->List 1[.B][.W][.L][.F]
SeqOprand( SRC, &fxreg, &start, &end, &step );
if ( ErrorNo ) return ;
dimA = (end-start)/step +1;
dimA = (end-start)/step +1.5;
dimB = 1;
ElementSize=ElementSizeSelect( SRC, &base, 0) & 0xFF;
@ -3747,7 +3747,7 @@ void CB_Seq( char *SRC ) { // Seq(X^2,X,1,10,1)->List 1[.B][.W][.L][.F]
base=MatAry[reg].Base;
m=base; n=base;
databack=LocalDbl[fxreg][0];
LocalDbl[fxreg][0].real = start;
LocalDbl[fxreg][0].real=start;
while ( m < dimA+base ) {
ExecPtr=exptr;
data=CB_Cplx_EvalDbl( SRC ); //
@ -3760,6 +3760,8 @@ void CB_Seq( char *SRC ) { // Seq(X^2,X,1,10,1)->List 1[.B][.W][.L][.F]
ExecPtr=exptr2;
dspflag =4 ; // List data
}
void SeqOprandInt( char *SRC, int *fxreg, int *start, int *end, int *step ){ // Seq(X^2,X,1,10[,1])
int exptr=ExecPtr;
int errflag;
@ -4969,25 +4971,25 @@ int MatrixObjectAlign4M5( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4M6( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4M7( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4M8( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4M9( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4M0( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MA( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MB( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MC( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MD( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4ME( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MF( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MG( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MH( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MI( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MJ( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MK( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4ML( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MM( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MN( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MO( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MP( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MQ( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4M9( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4M0( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MA( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MB( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MC( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MD( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4ME( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MF( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MG( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MH( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MI( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MJ( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MK( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4ML( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MM( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MN( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MO( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MP( unsigned int n ){ return n; } // align +4byte
int MatrixObjectAlign4MQ( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MR( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MS( unsigned int n ){ return n; } // align +4byte
//int MatrixObjectAlign4MT( unsigned int n ){ return n; } // align +4byte

View File

@ -479,9 +479,9 @@ void OpcodeStringToAsciiString(char *buffer, char *SRC, int Maxlen ) { // Opcode
//-----------------------------------------------------------------------------
int CheckQuotCR( char *SRC, int ptr ) {
int c,d;
if ( SRC[ptr-1] != 0x22 ) return 0; // "
c=SRC[ptr-2];
d=SRC[ptr-3];
if ( SRC[ptr-1] != 0x22 ) return 0; // "
if ( d==0xFFFFFFF7 ) {
if ( ( c==0x01 ) || ( c==0x02 ) ) return 1; // Then or Else
}
@ -564,13 +564,11 @@ void GetNewAry8( int reg, int aryN, int aryMax ) {
DimMatrixSub( reg, 8, aryN, aryMax, 1 ); // byte matrix base:1
} else {
if ( MatAry[reg].SizeA < aryN ) {
if ( (int)MatAry[reg].Adrs > (int)CB_CurrentStr ) {
buffer=NewStrBuffer();
if ( buffer!=NULL ) {
size =MatAry[reg].SizeB; if ( size>CB_StrBufferMax ) size = CB_StrBufferMax;
memcpy( buffer, CB_CurrentStr, size );
CB_CurrentStr = buffer;
}
buffer=NewStrBuffer();
if ( buffer!=NULL ) {
size =MatAry[reg].SizeB; if ( size>CB_StrBufferMax ) size = CB_StrBufferMax;
memcpy( buffer, CB_CurrentStr, size );
CB_CurrentStr = buffer;
}
MatElementPlus( reg, aryN, aryMax ); // matrix +
}
@ -1285,16 +1283,10 @@ double CB_EvalStrDBL( char *buffer, int calcflag ) { // Eval str -> double
int execptr=ExecPtr;
ExecPtr = 0;
if ( calcflag == 0 ) {
if (CB_INT==1) result = EvalIntsubTop( buffer );
else
if (CB_INT==0) result = EvalsubTop( buffer );
else result = Cplx_EvalsubTop( buffer ).real;
result = EvalsubTop( buffer );
}
else {
if (CB_INT==1) result = ListEvalIntsubTop( buffer ); // List calc
else
if (CB_INT==0) result = ListEvalsubTop( buffer ); // List calc
else result = Cplx_ListEvalsubTop( buffer ).real; // List calc
result = ListEvalsubTop( buffer ); // List calc
}
ExecPtr=execptr;
if ( ErrorNo ) { ErrorPtr=ExecPtr; return 0; }
@ -1306,16 +1298,10 @@ complex CB_Cplx_EvalStrDBL( char *buffer, int calcflag ) { // Eval str -> doubl
int execptr=ExecPtr;
ExecPtr = 0;
if ( calcflag == 0 ) {
if (CB_INT==1) result = Int2Cplx( EvalIntsubTop( buffer ) );
else
if (CB_INT==0) result = Dbl2Cplx( EvalsubTop( buffer ) );
else result = Cplx_EvalsubTop( buffer );
result = Cplx_EvalsubTop( buffer );
}
else {
if (CB_INT==1) result = Int2Cplx( ListEvalIntsubTop( buffer ) ); // List calc
else
if (CB_INT==0) result = Dbl2Cplx( ListEvalsubTop( buffer ) ); // List calc
else result = Cplx_ListEvalsubTop( buffer ); // List calc
result = Cplx_ListEvalsubTop( buffer ); // List calc
}
ExecPtr=execptr;
if ( ErrorNo ) { ErrorPtr=ExecPtr; return Int2Cplx(0); }

View File

@ -869,6 +869,7 @@ int CB_interpreter_sub( char *SRC ) {
else CB_Store(SRC); // ->
dspflagtmp=dspflag+0x10; // 12:nomal 13:mat 14:list
c=SRC[ExecPtr];
if ( c == 0x0E ) goto inext1;
}
if ( c == 0x13 ) { // =>
inext2:
@ -1172,13 +1173,15 @@ void Skip_quot( char *SRC ){ // skip "..."
}
//----------------------------------------------------------------------------------------------
void Skip_rem( char *SRC ){ // skip '...
void Skip_rem_sub( char *SRC, int nonopflag ){ // skip '...
int c,reg;
remloop:
c=SRC[ExecPtr++];
if ( c=='/' ) { // '/ execute C.Basic only
return;
} else
if ( nonopflag ) goto next;
else
if ( c=='#' ) {
c=SRC[ExecPtr++];
if ( c=='C') {
@ -1280,6 +1283,7 @@ remloop:
}
}
next:
while (1){
switch ( c ) {
case 0x00: // <EOF>
@ -1310,11 +1314,15 @@ remloop:
}
}
void Skip_rem_no_op( char *SRC ){
Skip_rem_sub( SRC, 1 );
}
void CB_Rem( char *SRC, CchIf *Cache ){
int i,ii,j,execptr;
int c=SRC[ExecPtr];
if ( c=='#' ) { // C.Basic command
Skip_rem( SRC );
Skip_rem_sub( SRC, 0 );
return;
}
j=0; i=Cache->TOP;
@ -1333,7 +1341,7 @@ void CB_Rem( char *SRC, CchIf *Cache ){
i++; if ( i >= IfCntMax ) i=0;
}
execptr=ExecPtr;
Skip_rem( SRC );
Skip_rem_sub( SRC, 0 );
if ( Cache->CNT < IfCntMax ) Cache->CNT++;
Cache->TOP--; if ( Cache->TOP<0 ) Cache->TOP=IfCntMax-1;
Cache->Ptr[Cache->TOP] =execptr;
@ -1568,7 +1576,7 @@ void Search_IfEnd( char *SRC ){
}
int Search_ElseIfEnd( char *SRC ){
unsigned int c;
int c;
while (1){ // Search Else or IfEnd
c=SRC[ExecPtr++];
switch ( c ) {
@ -1587,11 +1595,11 @@ int Search_ElseIfEnd( char *SRC ){
Search_IfEnd(SRC);
break;
} else
if ( c == 0x02 ) return 1 ; // Else
if ( c == 0x02 ) return c ; // Else
else
if ( c == 0x03 ) return 2 ; // IfEnd
if ( c == 0x03 ) return c ; // IfEnd
else
if ( c == 0x0F ) return 3 ; // ElseIf
if ( c == 0x0F ) return c ; // ElseIf
break;
case 0x0000007F: //
case 0xFFFFFFF9: //
@ -1613,7 +1621,7 @@ void CB_If( char *SRC, CchIf *Cache ){
judge = CB_EvalCheckZero( SRC );
c =SRC[ExecPtr];
if ( ( c == ':' ) || ( c == 0x0D ) ) { c=SRC[++ExecPtr]; while ( c==' ' ) c=SRC[++ExecPtr]; }
if ( c == 0x27 ) { Skip_rem_no_op(SRC); c=SRC[++ExecPtr]; while ( c==' ' ) c=SRC[++ExecPtr]; }
if ( c == 0x27 ) { Skip_rem_no_op(SRC); c=SRC[ExecPtr]; while ( c==' ' ) c=SRC[++ExecPtr]; }
if ( ( c == 0xFFFFFFF7 ) && ( SRC[ExecPtr+1] == 0x01 ) ) ExecPtr+=2 ; // "Then" skip
if ( judge ) return ; // true
@ -1634,7 +1642,7 @@ void CB_If( char *SRC, CchIf *Cache ){
}
execptr=ExecPtr;
stat=Search_ElseIfEnd( SRC );
if ( stat == 3 ) goto loop; // ElseIf
if ( stat == 0x0F ) goto loop; // ElseIf
if ( Cache->CNT < IfCntMax ) Cache->CNT++;
Cache->TOP--; if ( Cache->TOP<0 ) Cache->TOP=IfCntMax-1;
Cache->Ptr[Cache->TOP] =execptr;
@ -2983,24 +2991,24 @@ int iObjectAlign4c( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4d( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4e( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4f( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4g( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4h( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4i( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4j( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4k( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4l( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4m( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4n( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4o( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4p( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4q( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4r( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4s( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4t( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4u( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4v( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4w( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4x( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4g( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4h( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4i( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4j( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4k( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4l( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4m( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4n( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4o( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4p( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4q( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4r( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4s( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4t( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4u( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4v( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4w( unsigned int n ){ return n; } // align +4byte
int iObjectAlign4x( unsigned int n ){ return n; } // align +4byte
//int iObjectAlign4y( unsigned int n ){ return n; } // align +4byte
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------

View File

@ -378,6 +378,7 @@ void CB_BackColor( char *SRC );
void CB_TransparentColor( char *SRC );
int CB_GetColor( char *SRC );
unsigned short CB_RGB( char *SRC, int mode ) ; // n or (r,g,b) return : color code // mode 0:RGB 1:HSV 2:HSL
int CB_GetRGB( char *SRC, int mode ); // GetRGB/HSV/HsL() -> ListAns
void CB_GraphFunc( char *SRC, int c ) ;