📄 functions.inl
字号:
{
if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_OBP_MEMORY_FULL_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
{
cUiMenuPrevFile();
IOMapUi.State = NEXT_MENU;
VarsUi.State = 0;
}
}
break;
}
}
break;
}
// Update display screen
if (Action == MENU_DRAW)
{
VarsUi.OBPTimer = 0;
for (VarsUi.Pointer = 0;VarsUi.Pointer < ON_BRICK_PROGRAMSTEPS;VarsUi.Pointer++)
{
VarsUi.Tmp = VarsUi.ProgramSteps[VarsUi.Pointer];
if ((VarsUi.Tmp >= MENU_ACTION_EMPTY) && (VarsUi.Tmp < MENU_ACTION_INVALID))
{
VarsUi.Tmp -= MENU_ACTION_EMPTY;
pMapDisplay->StepIcons[VarsUi.Pointer] = VarsUi.Tmp + 1;
}
if ((VarsUi.Tmp >= MENU_WAIT_EMPTY) && (VarsUi.Tmp < MENU_WAIT_INVALID))
{
VarsUi.Tmp -= MENU_WAIT_EMPTY;
pMapDisplay->StepIcons[VarsUi.Pointer] = VarsUi.Tmp + 1 + 16;
}
if (VarsUi.Tmp == MENU_LOOP)
{
pMapDisplay->StepIcons[VarsUi.Pointer] = 31;
}
if (VarsUi.Tmp == MENU_STOP)
{
pMapDisplay->StepIcons[VarsUi.Pointer] = 32;
}
pMapDisplay->UpdateMask |= STEPICON_BIT(STEPICON_1 + VarsUi.Pointer);
}
// and cursor
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
if (VarsUi.ProgramStepPointer < ON_BRICK_PROGRAMSTEPS)
{
VarsUi.CursorTmp[4] = 13 + (VarsUi.ProgramStepPointer * 17);
VarsUi.CursorTmp[5] = 24;
pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_1);
}
if (PROG_RUNNING != pMapCmd->ProgStatus)
{
pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_2));
}
pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_4);
pMapDisplay->UpdateMask |= (SPECIAL_BIT(STEPLINE) | SPECIAL_BIT(TOPLINE));
}
return (VarsUi.State);
}
//******* cUiFileRun **********************************************************
UBYTE cUiFindFileType(UBYTE *Filename) // Find file type number
{
UBYTE Ext[FILENAME_LENGTH + 1];
UBYTE Result;
UBYTE Tmp1;
UBYTE Tmp2;
Result = FILETYPE_ALL;
Tmp1 = 0;
while ((Filename[Tmp1]) && (Tmp1 < FILENAME_LENGTH)) // Search forward for termination
{
Tmp1++;
}
while ((Tmp1) && (Filename[Tmp1] != '.')) // Search backward for "."
{
Tmp1--;
}
if (Filename[Tmp1] == '.') // If "."
{
Tmp1++;
Tmp2 = 0;
while ((Filename[Tmp1]) && (Tmp1 < FILENAME_LENGTH)) // Convert to upper to Ext
{
Ext[Tmp2] = tolower(Filename[Tmp1]);
Tmp1++;
Tmp2++;
}
Ext[Tmp2] = 0; // Inser termination
// Calculate type
for (Tmp1 = FILETYPE_ALL;(Tmp1 < FILETYPES) && (Result == FILETYPE_ALL);Tmp1++)
{
if (strcmp((char*)TXT_FILE_EXT[Tmp1],(char*)Ext) == 0)
{
Result = Tmp1;
}
}
}
return (Result);
}
#define FILERUN_FILENAMELINE TEXTLINE_4
#define FILERUN_TEXTLINE TEXTLINE_5
UBYTE cUiFileRun(UBYTE Action) // Run selected file
{
switch (Action)
{
case MENU_INIT :
{
VarsUi.Tmp = 0;
while ((VarsUi.SelectedFilename[VarsUi.Tmp]) && (VarsUi.Tmp < FILENAME_LENGTH)) // Search forward for termination
{
VarsUi.Tmp++;
}
while ((VarsUi.Tmp) && (VarsUi.SelectedFilename[VarsUi.Tmp] != '.')) // Search backward for "."
{
VarsUi.Tmp--;
}
if (VarsUi.Tmp > DISPLAYLINE_LENGTH)
{
VarsUi.Tmp = DISPLAYLINE_LENGTH;
}
VarsUi.DisplayBuffer[VarsUi.Tmp] = 0;
while (VarsUi.Tmp) // Copy only name not ext
{
VarsUi.Tmp--;
VarsUi.DisplayBuffer[VarsUi.Tmp] = VarsUi.SelectedFilename[VarsUi.Tmp];
}
pMapDisplay->pTextLines[FILERUN_FILENAMELINE] = (UBYTE*)VarsUi.DisplayBuffer;
pMapDisplay->TextLinesCenterFlags = TEXTLINE_BIT(FILERUN_FILENAMELINE);
pMapDisplay->UpdateMask = TEXTLINE_BIT(FILERUN_FILENAMELINE);
}
break;
case MENU_RUN :
{
if (VarsUi.Timer < DISPLAY_SHOW_TIME)
{
VarsUi.Timer++;
}
switch (VarsUi.State)
{
case 0 :
{
IOMapUi.Flags |= UI_BUSY;
VarsUi.State++;
}
break;
case 1 : // Set state from extention when sound is ready
{
if (SOUND_IDLE == pMapSound->State)
{
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_RUNNING);
pMapDisplay->UpdateMask = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
pMapDisplay->TextLinesCenterFlags = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
cUiRunning(MENU_INIT);
VarsUi.State++;
}
}
break;
case 2 :
{
if ((!pMapDisplay->EraseMask) && (!pMapDisplay->UpdateMask))
{
VarsUi.State = 10 * cUiFindFileType(VarsUi.SelectedFilename);
if (VarsUi.State == (FILETYPE_TRYME * 10))
{
VarsUi.State = FILETYPE_LMS * 10;
}
}
}
break;
case (FILETYPE_SOUND * 10 + 0) : // Start sound file (*.snd, *.rso) Wait for sound idle
{
strcpy((char*)pMapSound->SoundFilename,(char*)VarsUi.SelectedFilename);
pMapSound->Volume = IOMapUi.Volume;
pMapSound->Mode = SOUND_ONCE;
pMapSound->Flags |= SOUND_UPDATE;
VarsUi.State++;
}
break;
case (FILETYPE_SOUND * 10 + 1) : // Wait for stop or user break
{
cUiRunning(MENU_RUN);
if (SOUND_IDLE == pMapSound->State)
{
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ENDED);
VarsUi.State = 99;
}
if (BUTTON_EXIT == cUiReadButtons())
{
pMapSound->Flags &= ~SOUND_UPDATE;
pMapSound->State = SOUND_STOP;
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ABORTED);
VarsUi.State = 99;
}
}
break;
case (FILETYPE_LMS * 10 + 0) : // Start LMS file (*.rxe)
{
if ((!pMapDisplay->EraseMask) && (pMapCmd->ProgStatus == PROG_IDLE) && (!pMapButton->State[BTN4]))
{
strcpy((char*)pMapCmd->FileName,(char*)VarsUi.SelectedFilename);
pMapCmd->ActivateFlag = TRUE;
VarsUi.State++;
}
}
break;
case (FILETYPE_LMS * 10 + 1) : // Wait for program stop or user break
{
cUiRunning(MENU_RUN);
if ((IOMapUi.Flags & UI_REDRAW_STATUS) && (IOMapUi.Flags & UI_ENABLE_STATUS_UPDATE))
{
pMapDisplay->pTextLines[FILERUN_FILENAMELINE] = (UBYTE*)VarsUi.DisplayBuffer;
pMapDisplay->TextLinesCenterFlags = TEXTLINE_BIT(FILERUN_FILENAMELINE);
pMapDisplay->UpdateMask = TEXTLINE_BIT(FILERUN_FILENAMELINE);
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_RUNNING);
pMapDisplay->UpdateMask = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
pMapDisplay->TextLinesCenterFlags = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
}
switch (pMapCmd->ProgStatus)
{
case PROG_RUNNING :
{
}
break;
case PROG_OK :
{
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ENDED);
VarsUi.State = 99;
}
break;
case PROG_ABORT :
{
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ABORTED);
VarsUi.State = 99;
}
break;
default :
{
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_FILE_ERROR);
VarsUi.State = 99;
}
break;
}
}
break;
case (FILETYPE_NXT * 10 + 0) :// Start Program file (*.prg)
{
VarsUi.TmpHandle = pMapLoader->pFunc(OPENREAD,VarsUi.SelectedFilename,NULL,&VarsUi.TmpLength);
if (!(VarsUi.TmpHandle & 0x8000))
{
VarsUi.TmpLength = FILEHEADER_LENGTH;
pMapLoader->pFunc(READ,(UBYTE*)&VarsUi.TmpHandle,VarsUi.FileHeader,&VarsUi.TmpLength);
VarsUi.TmpLength = ON_BRICK_PROGRAMSTEPS;
pMapLoader->pFunc(READ,(UBYTE*)&VarsUi.TmpHandle,VarsUi.ProgramSteps,&VarsUi.TmpLength);
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
}
if ((ON_BRICK_PROGRAMSTEPS == VarsUi.TmpLength) && (VarsUi.FileHeader[0] == (UBYTE)(FILEFORMAT_PROGRAM >> 8)) && (VarsUi.FileHeader[1] == (UBYTE)(FILEFORMAT_PROGRAM)))
{
// If tmp file exist -> delete it
sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_PROGRAM_FILENAME,(char*)TXT_TMP_EXT);
VarsUi.TmpHandle = pMapLoader->pFunc(FINDFIRST,VarsUi.FilenameBuffer,VarsUi.SearchFilenameBuffer,&VarsUi.TmpLength);
if (!(VarsUi.TmpHandle & 0x8000))
{
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
pMapLoader->pFunc(DELETE,VarsUi.FilenameBuffer,NULL,NULL);
}
// Save program as tmp file
VarsUi.TmpLength = FILEHEADER_LENGTH + ON_BRICK_PROGRAMSTEPS;
VarsUi.TmpHandle = pMapLoader->pFunc(OPENWRITE,VarsUi.FilenameBuffer,NULL,&VarsUi.TmpLength);
if (!(VarsUi.TmpHandle & 0x8000))
{
VarsUi.TmpLength = FILEHEADER_LENGTH;
pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)VarsUi.FileHeader,&VarsUi.TmpLength);
VarsUi.TmpLength = ON_BRICK_PROGRAMSTEPS;
pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)VarsUi.ProgramSteps,&VarsUi.TmpLength);
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
}
pMapDisplay->UpdateMask &= ~TEXTLINE_BIT(FILERUN_FILENAMELINE);
pMapDisplay->EraseMask |= TEXTLINE_BIT(FILERUN_FILENAMELINE);
VarsUi.State++;
}
else
{
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_FILE_ERROR);
VarsUi.State = 99;
}
VarsUi.GUSState = 0;
}
break;
case (FILETYPE_NXT * 10 + 1) : // Wait for program stop or user break
{
VarsUi.State = VarsUi.GUSState;
cUiOnBrickProgramming(MENU_RUN);
VarsUi.GUSState = VarsUi.State;
if (VarsUi.State)
{
VarsUi.State = (FILETYPE_NXT * 10 + 1);
}
else
{
pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ENDED);
VarsUi.State = 99;
}
}
break;
case 99 : // Wait for display show time or user action
{
pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_LARGE);
pMapDisplay->UpdateMask = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
pMapDisplay->TextLinesCenterFlags = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
IOMapUi.Flags |= UI_REDRAW_STATUS | UI_ENABLE_STATUS_UPDATE;
cUiRunning(MENU_UPDATE);
VarsUi.Timer = 0;
VarsUi.State++;
}
break;
default :
{
if ((++VarsUi.Timer >= DISPLAY_SHOW_TIME) || (BUTTON_NONE != cUiReadButtons()))
{
if (pMapCmd->ProgStatus != PROG_IDLE)
pMapCmd->ProgStatus = PROG_RESET;
pMapDisplay->UpdateMask = 0;
pMapDisplay->TextLinesCenterFlags = 0;
cUiRunning(MENU_EXIT);
pMapDisplay->EraseMask = TEXTLINE_BIT(FILERUN_TEXTLINE);
pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(FILERUN_FILENAMELINE);
pMapDisplay->UpdateMask |= TEXTLINE_BIT(FILERUN_FILENAMELINE);
IOMapUi.Flags &= ~UI_BUSY;
VarsUi.State = 0;
}
}
break;
}
}
break;
}
return (VarsUi.State);
}
//******* cUiFileDelete *******************************************************
UBYTE cUiFileDelete(UBYTE Action)
{
if (MENU_INIT == Action)
{
switch (VarsUi.State)
{
case 0 :
{
VarsUi.State++;
}
break;
case 1 :
{
if (SOUND_IDLE == pMapSound->State)
{
VarsUi.State++;
}
}
break;
case 2 :
{
pMapLoader->pFunc(DELETE,VarsUi.SelectedFilename,NULL,NULL);
VarsUi.State++;
}
break;
default : // Display deleted text
{
if (!cUiFeedback((BMPMAP*)Info,TXT_FB_FD_FILE_DELETED_INFO,0,DISPLAY_SHOW_TIME))
{
IOMapUi.State = EXIT_PRESSED;
VarsUi.State = 0;
}
}
break;
}
}
return (VarsUi.State);
}
//******* cUiView ************************************************************
UBYTE cUiView(UBYTE Action) // MENU_INIT
{
switch (VarsUi.State)
{
case 0 :
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -