From 42bb53449914c6dc4a5ca354411b7eb16cfaa37e Mon Sep 17 00:00:00 2001 From: Nemh Date: Mon, 9 Feb 2015 21:07:44 +0100 Subject: [PATCH] Add of the Fmenus icons drawing at the bottom of the screen --- Eigen.dlw | 6 ++--- console.c | 73 +++++++++++++++++++++++++++++++++++++++++++++---------- console.h | 3 ++- 3 files changed, 65 insertions(+), 17 deletions(-) diff --git a/Eigen.dlw b/Eigen.dlw index 88c4b8d..fb4fe2a 100644 --- a/Eigen.dlw +++ b/Eigen.dlw @@ -9,7 +9,7 @@ Height=7095 Width=9090 State=0 Flags=00000020 -Setting=16:1:console.c +Setting=32:1:console.c OptionA=0 [_2] @@ -18,7 +18,7 @@ Order=3 Top=0 Left=13035 Height=4785 -Width=5610 +Width=5490 State=0 Flags=00000001 OptionA=15 @@ -153,7 +153,7 @@ Top=7515 Left=3045 Height=9570 Width=24855 -State=0 +State=1 Flags=00000020 OptionA=0 diff --git a/console.c b/console.c index 9f8f502..350b19c 100644 --- a/console.c +++ b/console.c @@ -4,6 +4,8 @@ #include "syscalls.h" #include "memory.h" +extern void run(char *s); + static struct line Line[LINE_MAX]; static struct FMenu FMenu_entries[6]; static struct location Cursor; @@ -562,6 +564,8 @@ unsigned char *Console_Make_Entry(const unsigned char* str) int Console_Draw_FMenu(int key, struct FMenu* menu) { int i, nb_entries = 0, selector = 0, position_number, position_x, ret, longest = 0; + unsigned char quick[] = "[*]: "; + int quick_len = 4; unsigned char **entries; DISPBOX box; @@ -574,29 +578,38 @@ int Console_Draw_FMenu(int key, struct FMenu* menu) if(strlen(entries[i]) > longest) longest = strlen(entries[i]); position_x = 21*position_number; - if(position_x + longest*4 > 115) position_x = 115 - longest*4; + if(position_x + longest*4 + quick_len*4 > 115) position_x = 115 - longest*4 - quick_len*4; - box.left = position_x+3; - box.right = position_x + longest*4 + 7; - box.bottom = 50+7; - box.top = 50+7- nb_entries*7; + box.left = position_x; + box.right = position_x + longest*4 + quick_len*4 + 6; + box.bottom = 63-9; + box.top = 63-9-nb_entries*7; Bdisp_AreaClr_VRAM(&box); - Bdisp_DrawLineVRAM(3+position_x, 50+7, 3+position_x, 50+7-nb_entries*7); - Bdisp_DrawLineVRAM(7+position_x + longest*4, 50+7, 7+position_x+longest*4, 50+7-nb_entries*7); + Bdisp_DrawLineVRAM(box.left, box.bottom, box.left, box.top); + Bdisp_DrawLineVRAM(box.right, box.bottom, box.right, box.top); + + //If the cursor is flashing on the opening box, disable it. + if(((Cursor.x*(128/21)box.left)) + && ((Cursor.y*(64/8)box.top))) Cursor_SetFlashOff(); while(key != KEY_CTRL_EXE || key != KEY_CTRL_EXIT) { for(i=0; i 0) selector--; if (key == KEY_CTRL_EXE) return Console_Input(entries[selector]); + + if (key >= KEY_CHAR_1 && key < KEY_CHAR_1 + nb_entries) return Console_Input(entries[key-KEY_CHAR_1]); + if (key == KEY_CTRL_EXIT) return Console_Input((const unsigned char *)""); if (key >= KEY_CTRL_F1 && key <= KEY_CTRL_F6) { @@ -636,6 +649,7 @@ int Console_Init() Case = LOWER_CASE; for(i = 0; i < 6; i++) { + FMenu_entries[i].name = NULL; FMenu_entries[i].count = 0; } @@ -657,7 +671,7 @@ void Console_FMenu_Init() // Does the file exists ? // Todo : check the error codes... if(!cfg) { - unsigned char conf_standard[] = {"F2\ncos(\nsin(\ntan(\nF1\ntest(\ntest(\nF4\nje(\nsuis(\nvivant(\nF5\nabdibol(\ngeorges(\ngali(\npom(\npom(\nde(\natol(\nF6\nreturn(\nsolve(\nF3solve(\nfactor(\nsimplify(\nmatrix(\nd("}; + unsigned char conf_standard[] = {"F2 trig\ncos(\nsin(\ntan(\nF1\ntest(\ntest(\nF4\nje(\nsuis(\nvivant(\nF5\nabdibol(\ngeorges(\ngali(\npom(\npom(\nde(\natol(\nF6\nreturn(\nsolve(\nF3\nsolve(\nfactor(\nsimplify(\nmatrix(\nd("}; memory_createfile("\\\\fls0\\FMENU.cfg", strlen(conf_standard)+1); handle = memory_openfile("\\\\fls0\\FMENU.cfg", _OPENMODE_READWRITE); memory_writefile(handle, conf_standard, strlen(conf_standard)+1); @@ -674,10 +688,20 @@ void Console_FMenu_Init() temp[i] = *cfg; } - //If starting by 'F', adjust the number of the menu - if(temp[0] == 'F' && temp[1]>='1' && temp[1]<='6') number = temp[1]-'0' - 1; + //If starting by 'F', adjust the number and eventually set the name of the menu + if(temp[0] == 'F' && temp[1]>='1' && temp[1]<='6') { + number = temp[1]-'0' - 1; + if(temp[3] && FMenu_entries[number].name == NULL) { + FMenu_entries[number].name = malloc(sizeof(unsigned char)*(4+1)); + if(FMenu_entries[number].name != NULL) { + strncpy(FMenu_entries[number].name, temp+3, 4); + FMenu_entries[number].name[4] = '\0'; + } + } + } + //Else, fill the current menu - else if(temp[0]) { + else if(temp[0] && FMenu_entries[number].count < MAX_FMENU_ITEMS) { //Alloc a new string a copy current data into it tmp_realloc=FMenu_entries[number].str; FMenu_entries[number].str = realloc(tmp_realloc, sizeof(unsigned char*)*(FMenu_entries[number].count+1)); @@ -715,10 +739,15 @@ void Console_FMenu_Init() int Console_Disp() { + unsigned int* pBitmap; int i, alpha_shift_status; + DISPBOX ficon; Bdisp_AllClr_VRAM(); + //GetFKeyIconPointer( 0x01BE, &ficon ); + //DisplayFKeyIcon( i, ficon); + for (i = 0; (i < LINE_DISP_MAX) && (i + Start_Line <= Last_Line); i++) { if (i == Cursor.y) @@ -839,6 +868,24 @@ int Console_Disp() } } } + + //Draw the "fkeys icons" + + for(i=0; i<6; i++) { + ficon.bottom = 64; + ficon.top = 64-8; + if (FMenu_entries[i].count > 0) { + ficon.left = 1+i*21; + ficon.right = ficon.left + (127-2)/6 - 1; + Bdisp_AreaClr_VRAM(&ficon); + Bdisp_AreaReverseVRAM(ficon.left, ficon.top, ficon.right, ficon.bottom); + + if(FMenu_entries[i].name != NULL) { + PrintMini(ficon.left + 2, ficon.top +2, FMenu_entries[i].name, MINI_REV); + } + } + } + Bdisp_PutDisp_DD(); return CONSOLE_SUCCEEDED; } diff --git a/console.h b/console.h index 4241b47..34ab2d7 100644 --- a/console.h +++ b/console.h @@ -55,6 +55,7 @@ extern "C"{ }; struct FMenu{ + unsigned char* name; unsigned char** str; unsigned char count; }; @@ -64,7 +65,7 @@ extern "C"{ int y; }; -#define MAX_MENU_ITEMS 10 +#define MAX_FMENU_ITEMS 7 #define is_wchar(c) ((c == 0x7F) || (c == 0xF7) || (c == 0xF9) || (c == 0xE5) || (c == 0xE6) || (c == 0xE7)) #define printf(s) Console_Output((const unsigned char *)s);