+ }
+ gui_filler(jd);
+ }
+}
+
+void gui_keyboard_lock(void)
+{
+ lock = lock ? 0 : 1;
+
+ gui_set_label(keyd['A'], lock ? "A" : "a");
+ gui_set_label(keyd['B'], lock ? "B" : "b");
+ gui_set_label(keyd['C'], lock ? "C" : "c");
+ gui_set_label(keyd['D'], lock ? "D" : "d");
+ gui_set_label(keyd['E'], lock ? "E" : "e");
+ gui_set_label(keyd['F'], lock ? "F" : "f");
+ gui_set_label(keyd['G'], lock ? "G" : "g");
+ gui_set_label(keyd['H'], lock ? "H" : "h");
+ gui_set_label(keyd['I'], lock ? "I" : "i");
+ gui_set_label(keyd['J'], lock ? "J" : "j");
+ gui_set_label(keyd['K'], lock ? "K" : "k");
+ gui_set_label(keyd['L'], lock ? "L" : "l");
+ gui_set_label(keyd['M'], lock ? "M" : "m");
+ gui_set_label(keyd['N'], lock ? "N" : "n");
+ gui_set_label(keyd['O'], lock ? "O" : "o");
+ gui_set_label(keyd['P'], lock ? "P" : "p");
+ gui_set_label(keyd['Q'], lock ? "Q" : "q");
+ gui_set_label(keyd['R'], lock ? "R" : "r");
+ gui_set_label(keyd['S'], lock ? "S" : "s");
+ gui_set_label(keyd['T'], lock ? "T" : "t");
+ gui_set_label(keyd['U'], lock ? "U" : "u");
+ gui_set_label(keyd['V'], lock ? "V" : "v");
+ gui_set_label(keyd['W'], lock ? "W" : "w");
+ gui_set_label(keyd['X'], lock ? "X" : "x");
+ gui_set_label(keyd['Y'], lock ? "Y" : "y");
+ gui_set_label(keyd['Z'], lock ? "Z" : "z");
+}
+
+char gui_keyboard_char(char c)
+{
+ return lock ? toupper(c) : tolower(c);
+}
+
+/*---------------------------------------------------------------------------*/
+
+/*
+ * XXX Watch out when using these functions. Be sure to check for
+ * GUI_NULL in addition to GUI_NEXT and GUI_PREV when using the latter
+ * two as labels for a switch with a default label.
+ */
+
+int gui_back_prev_next(int id, int prev, int next, int displayContrib)
+{
+ int jd;
+ int kd;
+ int ld;
+
+ if ((jd = gui_vstack(id)))
+ {
+ if ((ld = gui_hstack(jd)))
+ {
+ if(displayContrib)