CHDK_DE Vorschauversion  Trunk Rev. 5300
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
gui_hexbox.c-Dateireferenz
#include "camera_info.h"
#include "stdlib.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 222 der Datei gui_hexbox.c.

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

Definiert in Zeile 227 der Datei gui_hexbox.c.

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

Definiert in Zeile 215 der Datei gui_hexbox.c.

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

Definiert in Zeile 70 der Datei gui_hexbox.c.

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

Definiert in Zeile 136 der Datei gui_hexbox.c.

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

Definiert in Zeile 101 der Datei gui_hexbox.c.

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

Definiert in Zeile 117 der Datei gui_hexbox.c.

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

Definiert in Zeile 156 der Datei gui_hexbox.c.

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

Definiert in Zeile 464 der Datei gui_sokoban.c.

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

Definiert in Zeile 34 der Datei gui_hexbox.c.

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

Variablen-Dokumentation

libhexbox_sym _libhexbox
Initialisierung:

Definiert in Zeile 236 der Datei gui_hexbox.c.

ModuleInfo _module_info
Initialisierung:

Definiert in Zeile 245 der Datei gui_hexbox.c.

char box_helpline[64]
static

Definiert in Zeile 29 der Datei gui_hexbox.c.

char box_title[64]
static

Definiert in Zeile 28 der Datei gui_hexbox.c.

int currpos = 7
static

Definiert in Zeile 23 der Datei gui_hexbox.c.

gui_handler* gui_hexbox_mode_old
static

Definiert in Zeile 21 der Datei gui_hexbox.c.

int h
static

Definiert in Zeile 30 der Datei gui_hexbox.c.

int hexbox_flags
static

Definiert in Zeile 27 der Datei gui_hexbox.c.

int hexbox_to_draw
static

Definiert in Zeile 24 der Datei gui_hexbox.c.

int num_backup
static

Definiert in Zeile 26 der Datei gui_hexbox.c.

int* num_to_edit
static

Definiert in Zeile 25 der Datei gui_hexbox.c.

int offs_num
static

Definiert in Zeile 31 der Datei gui_hexbox.c.

int offs_title
static

Definiert in Zeile 31 der Datei gui_hexbox.c.

int running = 0
static

Definiert in Zeile 22 der Datei gui_hexbox.c.

int w
static

Definiert in Zeile 30 der Datei gui_hexbox.c.

int x
static

Definiert in Zeile 30 der Datei gui_hexbox.c.

int y
static

Definiert in Zeile 30 der Datei gui_hexbox.c.