CHDK_DE Vorschauversion  Trunk Rev. 5842
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
gui_hexbox.c-Dateireferenz
#include "camera_info.h"
#include "keyboard.h"
#include "conf.h"
#include "lang.h"
#include "gui.h"
#include "gui_draw.h"
#include "gui_lang.h"
#include "gui_hexbox.h"
#include "module_def.h"
+ Include-Abhängigkeitsdiagramm für gui_hexbox.c:

gehe zum Quellcode dieser Datei

Funktionen

int gui_hexbox_kbd_process ()
 
void gui_module_menu_kbd_process ()
 
void gui_hexbox_draw ()
 
int hexbox_init (int *num, char *title, int flags)
 
void edit_hex_digit (unsigned int *addr, int digsel, int increment)
 
void gui_hexbox_draw_hex32 (unsigned int hexnum, int digit, unsigned int posx, unsigned int posy)
 
void gui_hexbox_draw_hint (unsigned int hexnum, unsigned int posx, unsigned int posy)
 
int _module_unloader ()
 
int _module_can_unload ()
 
int _module_exit_alt ()
 

Variablen

gui_handler GUI_MODE_HEXBOX
 
static gui_handlergui_hexbox_mode_old
 
static int running = 0
 
static int currpos = 7
 
static int hexbox_to_draw
 
static int * num_to_edit
 
static int num_backup
 
static int hexbox_flags
 
static char box_title [64]
 
static char box_helpline [64]
 
static int w
 
static int h
 
static int x
 
static int y
 
static int offs_title
 
static int offs_num
 
libhexbox_sym _libhexbox
 
ModuleInfo _module_info
 

Dokumentation der Funktionen

int _module_can_unload ( )

Definiert in Zeile 221 der Datei gui_hexbox.c.

222 {
223  return running == 0;
224 }
int _module_exit_alt ( )

Definiert in Zeile 226 der Datei gui_hexbox.c.

227 {
228  *num_to_edit = num_backup; // edit cancelled
229  running = 0;
230  return 0;
231 }
int _module_unloader ( )

Definiert in Zeile 214 der Datei gui_hexbox.c.

215 {
216  // free allocated resource, if any
217 
218  return 0;
219 }
void edit_hex_digit ( unsigned int *  addr,
int  digsel,
int  increment 
)

Definiert in Zeile 69 der Datei gui_hexbox.c.

69  {
70 /*
71  * addr: address of the 32bit integer under edit
72  * digsel: selected digit (MSD=0, LSD=7)
73  * increment: only the sign matters, or selected digit is zeroed if 0
74 */
75  register unsigned int a,b;
76  a=( (*addr)&(0xf<<((7-digsel)*4)) )>>((7-digsel)*4);
77  b=0xffffffff^(0xf<<((7-digsel)*4));
78  if (increment<0) {
79  if((digsel!=7)||!(hexbox_flags&HEXBOX_FLAG_WALIGN)) {
80  if (a>0) {a-=1;} else {a=0xf;}
81  }
82  else {
83  if (a>3) {a-=4;} else {a=0xc;}
84  }
85  }
86  else if (increment>0) {
87  if((digsel!=7)||!(hexbox_flags&HEXBOX_FLAG_WALIGN)) {
88  if (a<0xf) {a+=1;} else {a=0;}
89  }
90  else {
91  if (a<=0x8) {a+=4;} else {a=0;}
92  }
93  }
94  else {
95  a=0;
96  }
97  *addr=(a<<((7-digsel)*4))|( *addr&b );
98 }
void gui_hexbox_draw ( )

Definiert in Zeile 135 der Datei gui_hexbox.c.

void gui_hexbox_draw_hex32 ( unsigned int  hexnum,
int  digit,
unsigned int  posx,
unsigned int  posy 
)

Definiert in Zeile 100 der Datei gui_hexbox.c.

100  {
101 /*
102  * draws unsigned 32 bit hex integer
103  * digit: digit under edit (0..7), -1 when not edited
104  * posx: x position, posy: y position
105 */
106  char buf[12];
107  digit += 2; // due to '0x'
108  sprintf(buf, "0x%08X", hexnum);
109  draw_string(posx, posy, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
110  if ((digit >= 2) && (digit < 10))
111  {
112  draw_char(posx+digit*FONT_WIDTH, posy, buf[digit], MAKE_COLOR(COLOR_RED, COLOR_WHITE));
113  }
114 }
void gui_hexbox_draw_hint ( unsigned int  hexnum,
unsigned int  posx,
unsigned int  posy 
)

Definiert in Zeile 116 der Datei gui_hexbox.c.

116  {
117 /*
118  * show a decimal hint about the entered value
119 */
120  char buf[12];
121  if (hexnum > 1024*1024) {
122  sprintf(buf, "%4dM%s", hexnum>>20, ((hexnum&0xfffff)>0)?"+":" " );
123  }
124  else if (hexnum > 1024) {
125  sprintf(buf, "%4dk%s", hexnum>>10, ((hexnum&0x3ff)>0)?"+":" " );
126  }
127  else {
128  sprintf(buf, "%4d ", hexnum);
129  }
130  draw_string(posx, posy, buf, MAKE_COLOR(COLOR_WHITE, COLOR_BLACK));
131 }
int gui_hexbox_kbd_process ( )

Definiert in Zeile 155 der Datei gui_hexbox.c.

156 {
157  int need_redraw = 1;
159  case KEY_UP:
160  case JOGDIAL_RIGHT:
161  edit_hex_digit((unsigned int*)num_to_edit, currpos, 1);
162  break;
163  case KEY_DOWN:
164  case JOGDIAL_LEFT:
165  edit_hex_digit((unsigned int*)num_to_edit, currpos, -1);
166  break;
167  case KEY_LEFT:
168  //case KEY_ZOOM_OUT:
169  currpos -= 1;
170  break;
171  case KEY_RIGHT:
172  //case KEY_ZOOM_IN:
173  currpos += 1;
174  break;
175  case KEY_SET:
176  need_redraw = 0;
178  running = 0; // editing done
179  break;
180  case KEY_SHOOT_HALF:
181  edit_hex_digit((unsigned int*)num_to_edit, currpos, 0); // zero current digit only
182  break;
183  case KEY_SHOOT_FULL:
184  case KEY_DISPLAY:
185  *num_to_edit = 0; // zero the whole number
186  currpos = 7;
187  break;
188  default:
189  need_redraw = 0;
190  }
191  if (currpos > 7) currpos = 0;
192  if (currpos < 0) currpos = 7;
193 
194  if (need_redraw) hexbox_to_draw = 2;
195  return 0;
196 }
void gui_module_menu_kbd_process ( )

Definiert in Zeile 463 der Datei gui_sokoban.c.

464 {
465  running = 0;
467 }
int hexbox_init ( int *  num,
char *  title,
int  flags 
)

Definiert in Zeile 33 der Datei gui_hexbox.c.

34 {
35  running = 1;
36 
38 
39  num_to_edit = num;
40  num_backup = *num;
41  hexbox_flags = flags;
42  strncpy(box_title, title, 63);
43  box_title[63] = 0;
44 
45  sprintf(box_helpline,"\x18\x19\x1b\x1a [SET]:%s [MENU]:%s",lang_str(LANG_MBOX_BTN_OK),lang_str(LANG_MBOX_BTN_CANCEL));
46  int btl = strlen(box_title);
47  int hll = strlen(box_helpline);
48  if (btl < hll) btl = hll;
49  w = ( btl + 4) * FONT_WIDTH;
50 
51  if (w > camera_screen.width - 4 * FONT_WIDTH) {
53  box_title[(w/FONT_WIDTH - 4 < 63)?w/FONT_WIDTH - 4:63] = 0; // shorten the title
54  }
55  h = FONT_HEIGHT * 5;
56  x = (camera_screen.width - w) >> 1;
57  y = ((camera_screen.height - h)>>5)<<4;
58 
60  offs_num = ((camera_screen.width - (10+6+1)*FONT_WIDTH)>>1); // "0x12345678 4095M+"
61 
62  hexbox_to_draw = 1;
63 
64  return 1;
65 }

Variablen-Dokumentation

libhexbox_sym _libhexbox
Initialisierung:

Definiert in Zeile 235 der Datei gui_hexbox.c.

ModuleInfo _module_info
Initialisierung:

Definiert in Zeile 244 der Datei gui_hexbox.c.

char box_helpline[64]
static

Definiert in Zeile 28 der Datei gui_hexbox.c.

char box_title[64]
static

Definiert in Zeile 27 der Datei gui_hexbox.c.

int currpos = 7
static

Definiert in Zeile 22 der Datei gui_hexbox.c.

gui_handler* gui_hexbox_mode_old
static

Definiert in Zeile 20 der Datei gui_hexbox.c.

int h
static

Definiert in Zeile 29 der Datei gui_hexbox.c.

int hexbox_flags
static

Definiert in Zeile 26 der Datei gui_hexbox.c.

int hexbox_to_draw
static

Definiert in Zeile 23 der Datei gui_hexbox.c.

int num_backup
static

Definiert in Zeile 25 der Datei gui_hexbox.c.

int* num_to_edit
static

Definiert in Zeile 24 der Datei gui_hexbox.c.

int offs_num
static

Definiert in Zeile 30 der Datei gui_hexbox.c.

int offs_title
static

Definiert in Zeile 30 der Datei gui_hexbox.c.

int running = 0
static

Definiert in Zeile 21 der Datei gui_hexbox.c.

int w
static

Definiert in Zeile 29 der Datei gui_hexbox.c.

int x
static

Definiert in Zeile 29 der Datei gui_hexbox.c.

int y
static

Definiert in Zeile 29 der Datei gui_hexbox.c.