FX 02.44.1200

This commit is contained in:
CalcLoverHK 2024-01-25 03:00:49 +08:00
parent c8111f3b6b
commit 71f2aeea45
7 changed files with 142 additions and 48 deletions

View File

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

View File

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

View File

@ -276,7 +276,7 @@ void Cplx_sprintGR1s( char* buffer, complex num, int width, int align_mode, int
int i,w,oplen;
a = num.real;
b = num.imag;
if ( b==0 ) sprintGR( buffer, a, width, align_mode, round_mode, round_digit); // real
if ( ( CB_INT==0 ) || ( b==0 ) ) sprintGR( buffer, a, width, align_mode, round_mode, round_digit); // real
else {
if ( ComplexMode == 2 ) { // r_theta
r = fpolr( a, b);
@ -324,7 +324,7 @@ void Cplx_sprintGR1cutlim( char* buffer, complex num, int width, int align_mode,
char buffer2[64];
char buffer3[64];
int k,oplen,rlen,ilen,rwidth,iwidth;
if ( ( num.real==0 ) || (num.imag==0) ) {
if ( ( CB_INT==0 ) || ( num.real==0 ) || (num.imag==0) ) {
Cplx_sprintGR1( buffer, num, width, LEFT_ALIGN, CB_Round.MODE, CB_Round.DIGIT );
OpcodeStringToAsciiString( buffer2, buffer, 64-1 );
} else {
@ -384,7 +384,7 @@ void Cplx_sprintGR2( char* buffer, char* buffer2, complex num, int width, int al
}
goto GR2j;
} else
if ( b==0 ) {
if ( ( CB_INT==0 ) || ( b==0 ) ) {
sprintGR( buffer, a, width, align_mode, round_mode, round_digit); // real
buffer2[0]='\0';
} else { buffer[0]='\0';
@ -446,7 +446,9 @@ void Cplx_sprintGR2SRC( char* SRC, char* buffer, char* buffer2, complex num, int
if ( c==0x07 ) { ExecPtr++; ComplexMode = 2; } // >r_theta
}
Cplx_sprintGR2(buffer, buffer2, num, width, RIGHT_ALIGN, CB_Round.MODE, CB_Round.DIGIT );
CB_CurrentStr=NewStrBuffer(); if ( ErrorNo==0 ) { strcpy( CB_CurrentStr, buffer ); strcat( CB_CurrentStr, buffer2 ); }
if ( ComplexMode == 3 ) {
CB_CurrentStr=NewStrBuffer(); if ( ErrorNo==0 ) { strcpy( CB_CurrentStr, buffer ); strcat( CB_CurrentStr, buffer2 ); }
}
ComplexMode=Cplx_bk;
}
//----------------------------------------------------------------------------------------------

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 06", MINI_OVER );
PrintMini(13*6+2, 2*8+1, (unsigned char*)" build 12", MINI_OVER );
PrintMini( 2*6+2, 3*8+1, (unsigned char*)"(Casio Basic compatible+)", MINI_OVER );
// if ( ( UseHiddenRAM ) && ( IsHiddenRAM ) ) {
@ -88,6 +88,9 @@ int CB_System( char *SRC ) { // System( n )
case -9:
r=TryFlag; if ( r>1 ) r--;
break;
case -7:
r=IsEmu;
break;
case -5:
r=GetMemFree();
break;
@ -875,6 +878,7 @@ int SetVar(int select){ // ----------- Set Variable
int opNum=25+3,lnum;
int small=0;
complex value={0,0};
int bk_CB_INT=CB_INT;
int VarMode=CB_INT; // 0:double or complex 1:int
int hex=0; // 0:normal 1:hex
@ -926,10 +930,21 @@ int SetVar(int select){ // ----------- Set Variable
if ( small == 58 ) Fkey_dispN( FKeyNo1, "_Var");
Fkey_Icon( FKeyNo2, 95 ); // Fkey_dispN( FKeyNo2, "Init");
if ( VarMode ) Fkey_dispN_aA( 2, "D<>I"); else Fkey_dispN_Aa( 2, "D<>I");
// if ( VarMode ) Fkey_dispN_aA( 2, "D<>I"); else Fkey_dispN_Aa( 2, "D<>I");
if ( hex ) Fkey_dispN( FKeyNo6, "\xE6\x91\x44\x65\x63"); else Fkey_dispN( FKeyNo6, "\xE6\x91Hex");
locate(12,8); SetVarDsp(VarMode);
// locate(12,8); SetVarDsp(VarMode);
Fkey_dispN( FKeyNo3, "INT%");
Fkey_dispN( FKeyNo4, "DBL#");
Fkey_dispN( FKeyNo5, "CPLX");
if ( VarMode ) {
// locate(12,8); Prints((unsigned char*)"[INT%]");
// CB_PrintMinix3( 4*12, 8*7+1, (unsigned char*)"[INT%]");
Fkey_dspRB( FKeyNo3, "INT%");
} else {
if ( CB_INT==0 ) Fkey_dspRB( FKeyNo4, "DBL#");
else Fkey_dspRB( FKeyNo5, "CPLX");
}
y = (select-seltop) ;
Bdisp_AreaReverseVRAM(0, y*8, 127, y*8+7); // reverse select line
@ -974,7 +989,19 @@ int SetVar(int select){ // ----------- Set Variable
InitVar(value,VarMode, small);
break;
case KEY_CTRL_F3:
VarMode=1-VarMode;
CB_INT = 1; // INT#
VarMode=1;
ExpBuffer[0]='\0';
break;
case KEY_CTRL_F4:
CB_INT = 0; // DBL#
VarMode=0;
ExpBuffer[0]='\0';
break;
case KEY_CTRL_F5:
CB_INT = 2; // CPLX
VarMode=0;
ExpBuffer[0]='\0';
break;
case KEY_CTRL_F6:
hex=1-hex;

View File

@ -1925,10 +1925,15 @@ int CB_end( char *SRC ){
//----------------------------------------------------------------------------------------------
void CB_FkeyMenu( char *SRC) { // FkeyMenu(6,"ABC",R)
char buffer[9];
int c;
int n;
char buffer[64];
int i,c,n;
int r='N';
int direct=0;
int IconNo;
int ofset=0;
int extend=0;
int cls=0;
int mask=0;
n=CB_EvalInt( SRC );
if ( ( n<1 )||(n>6) ) { CB_Error(ArgumentERR); return; } // Argumenterror
@ -1938,48 +1943,52 @@ void CB_FkeyMenu( char *SRC) { // FkeyMenu(6,"ABC",R)
c=CB_IsStr( SRC, ExecPtr );
if ( c ) { // string
CB_GetLocateStr( SRC, buffer, 8 ); // String -> buffer return
CB_GetLocateStr( SRC, buffer, 64-1 ); // String -> buffer return
} else { // expression
IconNo = CB_EvalInt( SRC );
Fkey_Icon( n-1, IconNo);
goto exit;
direct=1;
}
c=SRC[ExecPtr];
if ( c != ',' ) {
// if ( RangeErrorCK( SRC ) ) return;
// CB_SelectGraphVRAM(); // Select Graphic Screen
Fkey_dispN( n-1 ,buffer); // Normal
} else {
c=SRC[++ExecPtr];
if ( ( c=='T' ) || ( c=='t' ) ) {
c=SRC[++ExecPtr];
UseGraphic=0;
CB_SelectTextVRAM(); // Select Text Screen
c=SRC[++ExecPtr];
} else {
// if ( RangeErrorCK( SRC ) ) return;
// CB_SelectGraphVRAM(); // Select Graphic Screen
if ( c == ',' ) { // option
ExecPtr++;
for( i=0; i<8; i++ ) {
c=SRC[ExecPtr];
if ( (c==0x00)||(c==',')||(c==':')||(c==0x0D)||(c==0x0C) ) break;
else if ( ( c=='R' ) || ( c=='r' ) ) { ExecPtr++; r='R'; }
else if ( ( c=='S' ) || ( c=='s' ) ) { ExecPtr++; r='S'; }
else if ( ( c=='I' ) || ( c=='i' ) ) { ExecPtr++; r='I'; }
else if ( ( c=='N' ) || ( c=='n' ) ) { ExecPtr++; r='N'; }
else if ( ( c=='L' ) || ( c=='l' ) ) { ExecPtr++; (ofset) |= 0x10;}
else if ( ( c=='U' ) || ( c=='u' ) ) { ExecPtr++; (ofset) |= 1;}
else if ( ( c=='M' ) || ( c=='m' ) ) { ExecPtr++; mask=1; }
else if ( ( c=='C' ) || ( c=='c' ) ) { ExecPtr++; cls =1; }
else if ( ( c=='T' ) || ( c=='t' ) ) { ExecPtr++; UseGraphic=0; CB_SelectTextVRAM(); } // Select Text Screen
}
switch ( c ) {
case 'C':
case 'c':
ExecPtr++;
FkeyClear( n-1 ); // clear
break;
if ( c==',' ) { c=SRC[++ExecPtr];
(extend) = CB_EvalInt( SRC )-n;
if ( (extend)+n>6 ) (extend) = 6-n;
if ( 0>(extend) ) (extend) = 0;
}
}
if ( direct ) Fkey_Icon( n-1, IconNo);
else {
switch ( r ) {
case 'R':
case 'r':
ExecPtr++;
Fkey_dispR( n-1 ,buffer); // Reverse
Fkey_dispR_ext( n-1 ,buffer, ofset, extend ); // Reverse
break;
case 'S':
Fkey_dispRS_ext( n-1 ,buffer, ofset, extend ); // Select Reverse
break;
case 'I':
Fkey_dispRB_ext( n-1 ,buffer, ofset, extend ); // Reverse input
break;
case 'N':
case 'n':
ExecPtr++;
default:
Fkey_dispN( n-1 ,buffer); // Normal
Fkey_dispN_ext( n-1 ,buffer, ofset, extend ); // Normal
break;
}
}
exit:
if ( mask ) for (c=0; c<=extend; c++ ) FkeyMask( n-1+c ); // mask
if ( cls ) for (c=0; c<=extend; c++ ) FkeyClear( n-1+c ); // clear
if ( SRC[ExecPtr] == ')' ) ExecPtr++;
// Bdisp_PutDisp_DD_DrawBusy_skip_through( SRC );
Bdisp_PutDisp_DD_DrawBusy_skip_through_text( SRC );

View File

@ -67,10 +67,17 @@ void Fkey_dispR(int ,char *);
void Fkey_DISPN(int ,char *);
void Fkey_DISPR(int ,char *);
void FkeyClear(int );
void FkeyClearN(int n, int m);
void FkeyClearAll();
void Fkey_Icon(int n, int IconNo);
void Fkey_dispN_Aa(int n, char *buffer) ;
void Fkey_dispN_aA(int n, char *buffer) ;
void Fkey_dispN_ext(int ,char *, int ofset, int extend);
void Fkey_dispR_ext(int ,char *, int ofset, int extend);
void Fkey_dispRB_ext(int ,char *, int ofset, int extend);
void Fkey_dispRS_ext(int ,char *, int ofset, int extend);
void PrintMiniXY(int X, int Y, char*buf, int mode, int xlength ) ; // xlength : 19 fkeyicon
void FkeyMask(int n) ;
void Hex8PrintXY(int , int , char *, unsigned int );

View File

@ -85,9 +85,12 @@ void Fkey_Icon(int n, int IconNo){
void FkeyClear(int n) {
Fkey_Icon(n, 0 ); // clear
}
void FkeyClearN(int n, int m){
int i;
for (i=n; i<=n+m; i++ ) FkeyClear( i );
}
void FkeyClearAll(){
int n;
for (n=0; n<6; n++ ) FkeyClear( n );
FkeyClearN( 0, 5 );
}
void Fkey_dispN(int n,char *buffer) {
FkeyClear(n);
@ -95,7 +98,6 @@ void Fkey_dispN(int n,char *buffer) {
Bdisp_DrawLineVRAM(n*21+2,7*8+0,n*21+20,7*8+0);
Bdisp_DrawLineVRAM(n*21+2,7*8+0,n*21+2,7*8+7);
Bdisp_ClearLineVRAM(n*21+3,7*8+1,n*21+3,7*8+7);
// Bdisp_ClearLineVRAM(n*21+20,7*8+1,n*21+20,7*8+7);
}
void Fkey_dspRB(int n,char *buffer) {
int i;
@ -117,7 +119,6 @@ void Fkey_DISPN(int n,char *buffer) {
Bdisp_DrawLineVRAM(n*21+2,7*8+0,n*21+20,7*8+0);
Bdisp_DrawLineVRAM(n*21+2,7*8+0,n*21+2,7*8+7);
Bdisp_ClearLineVRAM(n*21+3,7*8+1,n*21+3,7*8+7);
// Bdisp_ClearLineVRAM(n*21+20,7*8+1,n*21+20,7*8+7);
}
void Fkey_DISPR(int n,char *buffer) {
FkeyClear(n);
@ -134,3 +135,51 @@ void Fkey_dispN_aA(int n, char *buffer) {
Bdisp_AreaReverseVRAM( n*21+15, 7*8+1, n*21+20, 7*8+7); // reverse
}
void Fkey_dispN_ext(int n,char *buf, int ofset, int extend ) {
int m=(n+extend);
FkeyClearN(n, extend);
PrintMiniXY(n*21+4-(ofset!=0), 7*8+2, buf, MINI_OVER | 0x100, 16 +(ofset!=0)*3 +21*extend );
Bdisp_DrawLineVRAM(n*21+2, 7*8+0, m*21+20, 7*8+0);
Bdisp_DrawLineVRAM(n*21+2, 7*8+0, n*21+2 , 7*8+7);
// Bdisp_ClearLineVRAM(n*21+3, 7*8+1, n*21+3, 7*8+7);
}
void Fkey_dispR_ext(int n,char *buf, int ofset, int extend ) {
int m=(n+extend);
Fkey_dispRB_ext(n, buf, ofset, extend );
Bdisp_ClearLineVRAM(m*21+20,7*8+5,m*21+20,7*8+5);
Bdisp_ClearLineVRAM(m*21+19,7*8+6,m*21+20,7*8+6);
Bdisp_ClearLineVRAM(m*21+18,7*8+7,m*21+20,7*8+7);
}
void Fkey_dispRB_ext(int n,char *buf, int ofset, int extend ) {
int m=(n+extend);
int i;
FkeyClearN(n, extend);
for (i=0;i<8;i++) Bdisp_DrawLineVRAM(n*21+2, 7*8+i, m*21+20, 7*8+i);
PrintMiniXY(n*21+4-(ofset!=0), 7*8+2, buf, MINI_REV | 0x100, 16 +(ofset!=0)*3 +21*extend );
Bdisp_ClearLineVRAM(m*21+21, 7*8+0, m*21+21, 7*8+7);
Bdisp_ClearLineVRAM(m*21+22, 7*8+0, m*21+22, 7*8+7);
}
void Fkey_dispRS_ext(int n,char *buf, int ofset, int extend ) { // black select
int m=(n+extend);
Fkey_dispN_ext(n, buf, ofset, extend );
Bdisp_DrawLineVRAM(n*21+2, 7*8+7, m*21+20, 7*8+7);
Bdisp_DrawLineVRAM(m*21+20, 7*8+0, m*21+20, 7*8+7);
}
void PrintMiniXY(int X, int Y, char*buf, int mode, int xlength ) { // xlength : 19 fkeyicon
int k,i,j;
j=CB_PrintMiniLengthStr( (unsigned char *)buf, mode );
i=(xlength +j)/2-j; if ( i<0 ) i=0;
CB_PrintMini( X+i, Y, (unsigned char *)buf, mode ); // extflag on
}
void FkeyMask(int n ) {
int x,y;
for( y=7*8; y<=7*8+7; y++) {
for( x=n*21+0; x<=n*21+20; x++) {
if(y&1^x&1) BdispSetPointVRAM2(x,y,0); //Clear
}
}
}