From c8111f3b6bb9771eb013527b9323cd13932ca557 Mon Sep 17 00:00:00 2001 From: CalcLoverHK <0v0katai@gmail.com> Date: Thu, 25 Jan 2024 03:00:28 +0800 Subject: [PATCH] FX 02.44.0600 --- fx/AddinInfo.txt | 2 +- fx/CBASIC.g1w | 2 +- fx/CBZ_file.c | 523 +++++++++++++++++++++++--------------------- fx/CBZ_inp.c | 5 +- fx/CBZ_setup.c | 282 +++++++++++++----------- fx/CB_Matrix.c | 35 ++- fx/CB_Str.c | 18 +- fx/CB_file.h | 1 + fx/CB_interpreter.c | 12 +- 9 files changed, 479 insertions(+), 401 deletions(-) diff --git a/fx/AddinInfo.txt b/fx/AddinInfo.txt index 4672c25..bbabae6 100644 --- a/fx/AddinInfo.txt +++ b/fx/AddinInfo.txt @@ -5,7 +5,7 @@ [BINDATA] : "FXADDINror.bin" [DISPNAME] : "CBASIC" [APPNAME] : "@CBASIC" -[VERSION] : "02.43.1000" +[VERSION] : "02.44.6000" [APL_ICON] : "MainIcon.bmp" [MODULE_NUM] : 0 [MOD1_TITLE] : "CBASIC" diff --git a/fx/CBASIC.g1w b/fx/CBASIC.g1w index d7c1a28..f0aa7b0 100644 --- a/fx/CBASIC.g1w +++ b/fx/CBASIC.g1w @@ -1,6 +1,6 @@ [DLSimProject] Name=CBASIC -Version=02.43.1000 +Version=02.44.6000 Model=:fx-9860G.dlm SourcePath=. MemoryPath=INIT diff --git a/fx/CBZ_file.c b/fx/CBZ_file.c index 2457586..7692b8e 100644 --- a/fx/CBZ_file.c +++ b/fx/CBZ_file.c @@ -22,7 +22,7 @@ char FileListUpdate=1; char StorageMode=0; // 0:Storage memory 1:SD char redrawsubfolder=0; //int recentsize=0; -char ForceG1Msave=0; // 1: force g1m save +char ForceG1Msave=0; // 1: force g1m save char AutoSaveMode=0; // 1: Auto save ( not pop up ) const char root[][5]={"fls0","crd0","fls0","crd0"}; char root2[root2_MAX]=""; // "\\SAVE-F" @@ -124,7 +124,7 @@ unsigned int SelectFile (char *filename) if ( ( key == KEY_CTRL_QUIT ) || ( index == size ) ) { //return to root if ( !( StorageMode & 2 ) ) { if( strlen(folder) ) FileListUpdate = 1 ; // folder to root - folder[0] = '\0'; + folder[0] = '\0'; } index = 0; } else @@ -242,7 +242,7 @@ FONTCHARACTER * CharToFont( const char *cFileName, FONTCHARACTER *fFileName ) for( i = 0, len = strlen( fname ); i < len ; ++i ) fFileName[i] = fname[i]; fFileName[i] = '\0'; - + return fFileName; } @@ -257,7 +257,7 @@ char * FontToChar( const FONTCHARACTER *fFileName, char *cFileName ) SetShortName( sname, fname ); SetFullfilenameNoExt( fname, sname ); } - + strcpy( cFileName, fname ); return cFileName; } @@ -297,7 +297,7 @@ static int ReadFile( char *folder ) size = FavoritesMAX + 1 ; FilePath( folder, find_path ); - + /* Get File Num */ r = Bfile_FindFirst (find_path, &find_h, find_name, &file_info); @@ -310,7 +310,7 @@ static int ReadFile( char *folder ) } Bfile_FindClose(find_h); } - + /* Get Name & Size */ // if ( ( UseHiddenRAM ) && ( IsHiddenRAM ) ) { // files = (Files *)HiddenRAM(); @@ -329,7 +329,7 @@ static int ReadFile( char *folder ) // } // } memset( files, 0, size*sizeof(Files) ); - + i = FavoritesMAX ; r = Bfile_FindFirst (find_path, &find_h, find_name, &file_info); if ( r == 0 ) { @@ -408,7 +408,7 @@ static int ReadFile2( char *folder, char *ext, int maxsize ) } exit: Bfile_FindClose( find_h ); - + size=i; qsort( files, size, sizeof(Files), FileCmp ); @@ -439,7 +439,7 @@ int FavoritesFunc( int index ) { } i=0; while ( i < FavoritesMAX ) { // file matching search - if ( strcmp( files[i].filename, files[(index)].filename )== 0 ) + if ( strcmp( files[i].filename, files[(index)].filename )== 0 ) if ( strcmp( files[i].folder, files[(index)].folder )== 0 ) break; // not matching i++; } @@ -490,7 +490,7 @@ void FavoritesUpDown( int *index, int updw ) { // up:-1 down:1 int GetMediaFree( unsigned int *high, unsigned int *low) { int freespace[2]; (*high)=0; - switch ( StorageMode ) { + switch ( StorageMode ) { case 0: // Storage memory if ( Bfile_GetMediaFree(DEVICE_STORAGE,freespace) != 0 ) Abort() ; if ( IsSH3 ) { @@ -532,7 +532,7 @@ void GetMediaFreeStr10( char *buffer ) { int GetMemFree() { int k; - if ( MaxMemMode ) { + if ( MaxMemMode ) { k = HiddenRAM_MatTopPtr - HiddenRAM_Top ; } else { k = HiddenRAM_MatTopPtr - HiddenRAM_ProgNextPtr ; @@ -544,7 +544,7 @@ void GetMemFreeStr10( char *buffer ) { } int CheckSD(){ // SD model return : 1 - int freespace[2]; + int freespace[2]; if ( Bfile_GetMediaFree(DEVICE_SD_CARD,freespace) != 0 ) return 0; return 1 ; } @@ -565,7 +565,7 @@ int Check_Favorite( char*folder, char *sname ) { while ( i < FavoritesMAX ) { // file matching search strcpy( buf2, Favoritesfiles[i].filename ); ToLower( buf2 ); - if ( strcmp( buf1, buf2 )== 0 ) + if ( strcmp( buf1, buf2 )== 0 ) if ( strcmp( Favoritesfiles[i].folder , folder)== 0 ) break; // already favorite exist i++; } @@ -597,7 +597,7 @@ unsigned int Explorer( int size, char *folder ) char buffer3[32]; char fname[64]; char ext[5]; - + long FirstCount; // pointer to repeat time of first repeat long NextCount; // pointer to repeat time of second repeat @@ -617,7 +617,7 @@ unsigned int Explorer( int size, char *folder ) files[i].filesize = Favoritesfiles[i].filesize ; } files[FavoritesMAX].filesize = FOLDER_SEPALATOR; // separator - + if ( renamename[0] != '\0' ) { if ( index > FavoritesMAX ) s=FavoritesMAX; else s=0; for ( k=s; k5) j=5; - if ( j ) strncpy( buf2, files[i + top].folder, j); + if ( j ) strncpy( buf2, files[i + top].folder, j); buf2[j++]='/'; buf2[j]=0; strncpy( buf, files[i + top].filename, FILENAMEMAX ); j=strlenOp(files[i + top].filename); if (j<4) j=4; @@ -768,7 +768,7 @@ unsigned int Explorer( int size, char *folder ) } Isfolder= ( files[index].filesize == FOLDER_FLAG ) ; - + GetKey(&key); if ( KEY_CTRL_XTT == key ) key='A'; if ( KEY_CHAR_LOG == key ) key='B'; @@ -808,8 +808,8 @@ unsigned int Explorer( int size, char *folder ) } i++; } - - } else + + } else if ( ( ( 'A' <= key ) && ( key <= 'Z' ) ) || ( key == '~' ) ) { i=FavoritesMAX; while ( iSD - if ( StorageMode & 1 ) break; + if ( StorageMode == 1 ) break; ChangeStorageMode( CheckSD() ) ; // SD mode FileListUpdate = 1; cont=0; @@ -927,7 +927,7 @@ unsigned int Explorer( int size, char *folder ) break; case 2: // ->Storage if ( StorageMode == 0 ) break; - ChangeStorageMode( 0 ); // -> storage memory + ChangeStorageMode( 0 ); // -> storage memory FileListUpdate = 1; cont=0; break; @@ -949,7 +949,7 @@ unsigned int Explorer( int size, char *folder ) goto fav_dw; break; case 2: // ->MCS - if ( StorageMode == 2 ) break; + if ( StorageMode >= 2 ) break; ChangeStorageMode( StorageMode | 2 ); // -> main memory FileListUpdate = 1; cont=0; @@ -960,25 +960,25 @@ unsigned int Explorer( int size, char *folder ) filemode ++; if ( filemode >2 ) filemode=0; break; - + case KEY_CTRL_EXIT: if ( ( nofile ) || ( index == StartLine ) ) key=KEY_CTRL_QUIT; // index = size; cont =0 ; break; - + case KEY_CTRL_OPTN: // ------- Favorites list if ( nofile ) break; filemode = 0 ; index = FavoritesFunc( index ); // FavoritesFunc( index ); break; - + case KEY_CTRL_VARS: filemode = 0 ; - SetVar(0); // A - + SetVar(0); // A - break; - + // case KEY_CHAR_SQUARE: case KEY_CHAR_VALR: textmodejp: @@ -1006,7 +1006,7 @@ unsigned int Explorer( int size, char *folder ) switch (key) { case KEY_CTRL_QUIT: update: - FileListUpdate = 1 ; // + FileListUpdate = 1 ; // cont = 0 ; break; case KEY_CTRL_SETUP: @@ -1015,7 +1015,7 @@ unsigned int Explorer( int size, char *folder ) if ( ( FileListUpdate ) || ( i != StorageMode ) ) { key = KEY_CTRL_EXIT; goto update; } break; case KEY_CTRL_F1: - selectVar=SetVar(selectVar); // A - + selectVar=SetVar(selectVar); // A - break; case KEY_CTRL_F2: selectMatrix=SetMatrix(selectMatrix); // @@ -1035,7 +1035,7 @@ unsigned int Explorer( int size, char *folder ) if ( StorageMode == 1 ) { ChangeStorageMode( 3 ); // -> main memory } else { - ChangeStorageMode( StorageMode & 1 ); // -> storage/SD memory + ChangeStorageMode( StorageMode & 1 ); // -> storage/SD memory } FileListUpdate = 1; cont=0; @@ -1060,7 +1060,7 @@ unsigned int Explorer( int size, char *folder ) if ( index >= FavoritesMAX-1 ) break; FavoritesUpDown( &index, 1 ); break; - + case KEY_CHAR_ROOT: goto textmodejp; default: @@ -1071,7 +1071,7 @@ unsigned int Explorer( int size, char *folder ) break; } } - + SaveFavorites(); Bkey_Set_RepeatTime(FirstCount,NextCount); // restore repeat time @@ -1150,11 +1150,11 @@ char * loadFile( const char *name, int *editMax, int disperror, int *filesize ) strcpy( fname, name ); renameExistedfname( fname ); CharToFont( fname, filename ); - + handle = Bfile_OpenFile( filename, _OPENMODE_READ_SHARE ); if( handle < 0 ) { if ( disperror ) ErrorMSGfile( "Can't find file", name, handle); - CB_Error(CantFindFileERR); + CB_Error(CantFindFileERR); return NULL; } @@ -1164,7 +1164,7 @@ char * loadFile( const char *name, int *editMax, int disperror, int *filesize ) if( buffer == NULL ) { (*editMax)/=2; if ( (*editMax)>=16 ) goto loop; if ( disperror ) ErrorMSGfile( "Can't load file", (char*)name, handle); - CB_Error(NotEnoughMemoryERR); + CB_Error(NotEnoughMemoryERR); return NULL; // Abort(); } @@ -1223,7 +1223,7 @@ int storeFile( const char *name, unsigned char* codes, int size ) CharToFont( name, filename2 ); r = deleteFile( filename2, size ) ; if ( r ) return r; - + FileListUpdate=1; handle = Bfile_CreateFile( filename, size ); if( handle < 0 ) { ErrorMSGfile( "Can't create file", name, handle ); return 1 ; } @@ -1277,7 +1277,7 @@ int ExistFile( char *fname, int replace ) { if ( ( replace==0 ) || ( r ) ) return r; // not exist FontToChar( buffer, sname ); // replace fname SetFullfilenameNoExt( fname, sname ); - return r; // r==0 existed + return r; // r==0 existed } /* G1M file exist? */ @@ -1287,7 +1287,7 @@ int ExistG1M( const char *sname ) { int r; SetFullfilenameExt( fname, sname, "g1m" ); if ( StorageMode & 2 ) return MCS_ExistFile( fname ); - r = ExistFile( fname, 1 ); // r==0 existed + r = ExistFile( fname, 1 ); // r==0 existed if ( r==0 ) { SetShortName( sname, fname); // replace sname GetExtName( sname, ext ); @@ -1299,8 +1299,8 @@ int ExistG1Mext( const char *sname, char *ext ) { int r; SetFullfilenameExt( fname, sname, ext ); if ( ext[0] == 'M' ) return MCS_ExistFile( fname ); - r = ExistFile( fname, 1 ); // r==0 existed - if ( r==0 ) { + r = ExistFile( fname, 1 ); // r==0 existed + if ( r==0 ) { SetShortName( sname, fname); // replace sname GetExtName( sname, ext ); } @@ -1336,7 +1336,7 @@ unsigned int InputStrFilename(int x, int y, int width, int maxLen, char* buffer key=InputStrSub_status( x, y, width, csrX, buffer, maxLen, " ", REV_OFF, FLOAT_OFF, EXP_OFF, ALPHA_ON, HEX_OFF, PAL_ON, EXIT_CANCEL_OFF); } while ( (key!=KEY_CTRL_EXIT)&&(key!=KEY_CTRL_QUIT)&&(buffer[0]=='\0') ) ; for( i=0; iSD"); + else Fkey_dispN( FKeyNo1, ">SMM"); + } else { + sprintf( msg1, "%s as %s to ", pmsg, ext); + if ( StorageMode & 1 ) sprintf( msg2, " SD Memory." ); + else sprintf( msg2, " Storage Memory." ); + Fkey_dispN( FKeyNo1, ">MCS"); +// Fkey_dispN( FKeyNo2, "g1m"); + } + locate(3,2); Print((unsigned char *)msg1); + locate(3,3); Print((unsigned char *)msg2); + locate(3,5); Print((unsigned char *)"File Name?"); + locate(3,6); Print((unsigned char *)" [ ]"); +// Fkey_dispN( FKeyNo1, "Main"); +// Fkey_dispN( FKeyNo2, "g1m"); + FkeyClear( FKeyNo2 ); FkeyClear( FKeyNo3 ); Fkey_Icon( FKeyNo6, 402 ); // Fkey_DISPN( FKeyNo6, " / "); - key=InputStrFilename( 5, 4, 12, 18, buffer ) ; - if (key==KEY_CTRL_F1) { strcpy( ext, "MCS" ); goto loop; } // MCS - if (key==KEY_CTRL_F2) { strcpy( ext, "g1m" ); goto loop; } // g1m -// RestoreDisp(SAVEDISP_PAGE1); + key=InputStrFilename( 5, 6, 12, 18, buffer ) ; + if ( ext[0]=='M' ) { + if (key==KEY_CTRL_F1) { strcpy( ext, "g1m" ); goto loop; } // ->S.MEM + if ( (key==KEY_CTRL_F2) || (key==KEY_CTRL_F3) ) goto loop; + } else { + if (key==KEY_CTRL_F1) { strcpy( ext, "MCS" ); goto loop; } // MCS + if (key==KEY_CTRL_F2) { strcpy( ext, "g1m" ); goto loop; } // g1m + } + RestoreDisp(SAVEDISP_PAGE2); if (key==KEY_CTRL_AC) return 1; if ( (key==KEY_CTRL_EXIT)||(key==KEY_CTRL_QUIT) ) { WaitKeyEXIT(); return 1; } Getfolder( buffer ); return 0; // ok } -int InputFilename( char * buffer, char* msg) { // +int InputFilename( char * buffer, char* msg) { // unsigned int key; // SaveDisp(SAVEDISP_PAGE1); PopUpWin(3); @@ -1510,11 +1529,11 @@ int CheckPassWordmsg( char *filebase, char *msg ){ // 1:cancel 0:Ok -1:no pass char passname[9]; char inputpassname[9]; char basname[9]; - + memset( passname, 0, 9); strncpy( passname, filebase+0x4C, 8); // Get password G1MHeaderTobasname8( filebase, basname); - + if ( strlen(passname) ) { memset( inputpassname, 0, 9); mismatchloop: @@ -1525,7 +1544,7 @@ int CheckPassWordmsg( char *filebase, char *msg ){ // 1:cancel 0:Ok -1:no pass ErrorMSGstr1(" Mismatch"); goto mismatchloop; } - } + } passOk: filebase[0x55]=0x01; // pass ok (C.basic) return 0; // ok @@ -1542,7 +1561,7 @@ int SetPassWord( int y, char *filebase, char *basname ,char* msg){ // 1:no passw return 0; // ok } -int InputFilenamePassname( char *filebase, char *basname, char* msg) { // +int InputFilenamePassname( char *filebase, char *basname, char* msg) { // unsigned int key; char buffer[32]; Bdisp_AllClr_VRAM(); @@ -1615,7 +1634,7 @@ int CheckG1M( char *filebase ){ // Check G1M Basic file } fsize = 0xFFFFFFFF-(((filebase[0x10]&0xFF)<<24)+((filebase[0x11]&0xFF)<<16)+((filebase[0x12]&0xFF)<<8)+(filebase[0x13]&0xFF)); size = SrcSize( filebase ) ; - if ( ( fsize != size ) || ( filebase[0x20] != 'P' ) || ( filebase[0x21] != 'R' ) ) { + if ( ( fsize != size ) || ( filebase[0x20] != 'P' ) || ( filebase[0x21] != 'R' ) ) { if ( ( filebase[0x20] == 'P' ) && ( filebase[0x21] == 'I' ) && ( filebase[0x22] == 'C' ) ) { Bdisp_AllClr_VRAM(); if ( size>0 ) { @@ -1624,7 +1643,7 @@ int CheckG1M( char *filebase ){ // Check G1M Basic file } GetKey( &key ); return 1; - } else + } else if ( ( filebase[0x20] == 'C' ) && ( filebase[0x21] == 'A' ) && ( filebase[0x22] == 'P' ) ) { memcpy( PictAry[0], filebase+0x50, 1024 ); // Capt display GetKey( &key ); @@ -1633,7 +1652,7 @@ int CheckG1M( char *filebase ){ // Check G1M Basic file ErrorMSG( "Not support file", fsize ); return 1; // error } - } + } return 0; // ok } int LoadProgfile( char *fname, int prgNo, int editsize, int disperror ) { @@ -1651,7 +1670,7 @@ int LoadProgfile( char *fname, int prgNo, int editsize, int disperror ) { // renameExistedFile( basname, ext ); // replace? filename // GetExtName( basname, ext ); SetFullfilenameExt( fname, basname, ext ); - + edsize = editsize; if ( StorageMode & 2 ) { // MCS mode filebase = MCS_LoadG1M( fname , &edsize, disperror, &fsize ); // hidden ram @@ -1681,7 +1700,7 @@ int LoadProgfile( char *fname, int prgNo, int editsize, int disperror ) { strncpy( filebase+0x3C-8, folder, 8); // set folder to G1M header CurrentFileMode=0; // g1m load save mode } - + ProgEntryN=prgNo; // set program no ProgfileAdrs[prgNo]= filebase; ProgfileMax[prgNo]= fsize + edsize; @@ -1694,7 +1713,7 @@ int LoadProgfile( char *fname, int prgNo, int editsize, int disperror ) { return 0; // ok } -int SaveG1M( char *filebase ){ +int SaveG1Msub( char *filebase, int bin ){ char fname[64],basname[32]; int size,i; @@ -1702,17 +1721,24 @@ int SaveG1M( char *filebase ){ SetFullfilenameExt( fname, basname, "g1m" ); - size = FixSrcSize(filebase)+0x56; + if ( bin ) size = SrcSize(filebase)+0x56; + else size = FixSrcSize(filebase)+0x56; G1M_header( filebase, &size ); // G1M header set - + return storeFile( fname, (unsigned char*)filebase, size ); // 0:ok } +int SaveG1Mbin( char *filebase ){ + return SaveG1Msub( filebase, 1 ); // 0:ok +} +int SaveG1M( char *filebase ){ + return SaveG1Msub( filebase, 0 ); // 0:ok +} int SaveBasG1M( char *filebase ){ G1M_Basic_header( filebase ); // G1M Basic header set if ( StorageMode & 2 ) return MCS_SaveG1M( filebase ); // g1m file -> MCS else return SaveG1M( filebase ); -} +} int SaveBasG1MorG3M( char *filebase, char *ext ){ // save g1m or g3m G1M_Basic_header( filebase ); // G1M Basic header set if ( ext[0]=='M' ) return MCS_SaveG1M( filebase ); // g3m file -> MCS @@ -1734,11 +1760,11 @@ int SaveProgfile( int progNo ){ char CurrentFileMode=ProgfileMode[progNo]; char ext[8],ext2[8]; char buffer[32]; - + filebase=ProgfileAdrs[progNo]; CB_PostProcessIndentRemove( filebase ); G1MHeaderTobasname8( filebase, basname); - + if ( textmode ) { sprintf( buffer, "Save %s Name?", textmodeExt ); if ( InputFilename( basname, buffer ) ) return 1 ; @@ -1748,7 +1774,7 @@ int SaveProgfile( int progNo ){ textsize = SrcSize(filebase) -0x56 ; goto savetext; } else - if ( ( CurrentFileMode == 0 ) || ( ForceG1Msave == 1 ) ) { // g1m save + if ( ( CurrentFileMode == 0 ) || ( ForceG1Msave == 1 ) ) { // g1m save loop: SetExt( ext ); // set ext ( g1m,MCS ) SetExt( ext2 ); // set ext ( g1m,MCS ) @@ -1770,7 +1796,7 @@ int SaveProgfile( int progNo ){ } SetFullfilenameExt( fname, basname, "txt" ); strcpy( fname2, fname) ; - + if ( AutoSaveMode == 0 ) { if ( ExistFile( fname2, 0 ) ==0 ) if ( YesNoOverwrite() ) goto loop2; } @@ -1779,16 +1805,16 @@ int SaveProgfile( int progNo ){ memcpy( filebase+buffersize, filebase, SrcSize( filebase ) ); text = filebase; textsize=OpcodeToText( filebase+buffersize+0x56, text, size ); - if ( textsize<0 ) { CB_ErrMsg(MemoryERR); return 1 ; } // error + if ( textsize<0 ) { CB_ErrMsg(MemoryERR); return 1 ; } // error savetext: storeFile( fname, (unsigned char*)text, textsize ); SetShortName( sname, fname); r=0; } - + strncpy( renamename, sname, FILENAMEMAX); strncpy( renamefolder, folder, FOLDERMAX); - + Check_Favorite_size( folder, sname, sname, SrcSize(filebase) ) ; // favorite filesize update? return r; @@ -1811,7 +1837,7 @@ int NewProg(){ size=0x56+1; G1M_header( filebase, &size ); // G1M header set G1M_Basic_header( filebase ); // G1M Basic header set - + basname[0]='\0'; // if ( InputFilename( basname, "New File Name?" ) ) return 1 ; if ( InputFilenamePassname( filebase, basname, "New Program Name?") ) return 1 ; // cancel @@ -1870,16 +1896,16 @@ int SavePicture( char *filebase, int pictNo ){ unsigned char c,d; c=pictNo/10+'0'; if ( c=='0' ) c=' '; d=pictNo%10+'0'; - + SetPICTname( pictNo, pictname ); if ( PictMode == 3 ) return MCS_SavePICT( pictname, filebase ); - + for (i=0; i<0x4C; i++) filebase[i]=0x00; // header clear // size=0x800+0x4C; // 2KB Pict size=0x400+0x4C; // 1KB Pict G1M_header( filebase, &size ); // G1M header set - + filebase[0x20]='P'; // G1M Pict header set filebase[0x21]='I'; filebase[0x22]='C'; @@ -1914,9 +1940,9 @@ int SavePicture( char *filebase, int pictNo ){ r = CreateDirectorySub( folder, 0 ); if ( r < 0 ) return r; - r = SaveG1M( filebase ); + r = SaveG1Mbin( filebase ); for (i=0;i