+}
+
+static void AdjustChooseLevelScrollbar(int id, int first_entry)
+{
+ struct GadgetInfo *gi = screen_gadget[id];
+ int items_max, items_visible, item_position;
+
+ items_max = num_leveldirs;
+ items_visible = MAX_LEVEL_SERIES_ON_SCREEN - 1;
+ item_position = first_entry;
+
+ if (item_position > items_max - items_visible)
+ item_position = items_max - items_visible;
+
+ ModifyGadget(gi, GDI_SCROLLBAR_ITEMS_MAX, items_max,
+ GDI_SCROLLBAR_ITEM_POSITION, item_position, GDI_END);
+}
+
+static void drawChooseLevelList(int first_entry, int num_page_entries)
+{
+ int i;
+ char buffer[SCR_FIELDX * 2];
+ int max_buffer_len = (SCR_FIELDX - 2) * 2;
+
+ XFillRectangle(display, backbuffer, gc, SX, SY, SXSIZE - 32, SYSIZE);
+ redraw_mask |= REDRAW_FIELD;
+
+ DrawText(SX, SY, "Level Directories", FS_BIG, FC_GREEN);
+
+ for(i=0; i<num_page_entries; i++)
+ {
+#if 0
+ strncpy(buffer, leveldir[first_entry + i].name_short , SCR_FIELDX - 1);
+ buffer[SCR_FIELDX - 1] = '\0';
+#else
+ strncpy(buffer, leveldir[first_entry + i].name , max_buffer_len);
+ buffer[max_buffer_len] = '\0';
+#endif
+
+ DrawText(SX + 32, SY + (i + 2) * 32, buffer,
+ FS_MEDIUM, leveldir[first_entry + i].color);
+ DrawGraphic(0, i + 2, GFX_KUGEL_BLAU);
+ }
+
+ if (first_entry > 0)
+ DrawGraphic(0, 1, GFX_ARROW_BLUE_UP);
+
+ if (first_entry + num_page_entries < num_leveldirs)
+ DrawGraphic(0, MAX_LEVEL_SERIES_ON_SCREEN + 1, GFX_ARROW_BLUE_DOWN);
+}
+
+static void drawChooseLevelInfo(int leveldir_nr)
+{
+ int x, last_redraw_mask = redraw_mask;
+
+ XFillRectangle(display, drawto, gc, SX + 32, SY + 32, SXSIZE - 64, 32);
+
+#if 0
+ DrawTextFCentered(40, FC_RED, "%3d levels (%s)",
+ leveldir[leveldir_nr].levels,
+ leveldir[leveldir_nr].readonly ? "readonly" : "writable");
+#else
+ DrawTextFCentered(40, FC_RED, "%3d levels (%s)",
+ leveldir[leveldir_nr].levels,
+ leveldir[leveldir_nr].class_desc);
+#endif
+
+ /* let BackToFront() redraw only what is needed */
+ redraw_mask = last_redraw_mask | REDRAW_TILES;
+ for (x=0; x<SCR_FIELDX; x++)
+ MarkTileDirty(x, 1);