- if (mnu->t[i] == MUSIC) {
- Z_printbf(" '%.8s'", g_music);
- } else if(mnu->t[i] == INTERP) {
- Z_printbf("%s", fullscreen ? "ON" : "OFF");
- } else if(mnu->t[i] >= PL1CM) {
- V_manspr(mnu->x + (mnu->t[i] == PL1CM ? 15 : 35), y + i * 16 + 20 + 14, PL_getspr(*panimp, 0), pcolortab[(mnu->t[i] == PL1CM) ? p1color : p2color]);
- } else if(mnu->t[i] >= SVOLM) {
- j = y + i * 16 + 20;
- V_spr(mnu->x, j, mbarl);
- for (k = 8; k < 144; k += 8) {
- V_spr(mnu->x + k, j, mbarm);
- }
- V_spr(mnu->x + 144, j, mbarr);
- switch(mnu->t[i]) {
- case SVOLM: k = snd_vol; break;
- case MVOLM: k = mus_vol; break;
- case GAMMAM: k = gammaa << 5; break;
+ for (i = 0; i < n; i++) {
+ msg.type = GM_GETENTRY;
+ if (GM_send(m, i, &msg)) {
+ type = msg.integer.i;
+ if (i == cur) {
+ if (type == GM_SMALL_BUTTON) {
+ Z_gotoxy(x - 8, y + yoff);
+ Z_printsf(">");
+ } else {
+ V_spr(x - 25, y + yoff - 8, msklh[(gm_tm / 6) & 1]);
+ }
+ }
+ msg.type = GM_GETCAPTION;
+ if (GM_send(m, i, &msg)) {
+ Z_gotoxy(x, y + yoff);
+ if (type == GM_SMALL_BUTTON) {
+ xoff = Z_printsf("%.*s", msg.string.maxlen, msg.string.s);
+ } else {
+ xoff = Z_printbf("%.*s", msg.string.maxlen, msg.string.s);
+ }
+ } else {
+ xoff = 0;
+ }
+ switch (type) {
+ case GM_BUTTON:
+ case GM_SMALL_BUTTON:
+ msg.type = GM_GETSTR;
+ if (GM_send(m, i, &msg)) {
+ Z_gotoxy(x + xoff, y + yoff);
+ if (type == GM_SMALL_BUTTON) {
+ Z_printsf("%.*s", msg.string.maxlen, msg.string.s);
+ } else {
+ Z_printbf("%.*s", msg.string.maxlen, msg.string.s);
+ }
+ }
+ yoff += type == GM_BUTTON ? 16 : 12;
+ break;
+ case GM_TEXTFIELD:
+ case GM_TEXTFIELD_BUTTON:
+ yoff += 9;
+ msg.type = GM_GETSTR;
+ recv = GM_send(m, i, &msg);
+ w = recv ? msg.string.maxlen : TEXTFIELD_MIDDLE;
+ V_spr(x + xoff, y + yoff, mslotl);
+ for (j = 1; j <= w; j++) {
+ V_spr(x + xoff + j * 8, y + yoff, mslotm);
+ }
+ V_spr(x + xoff + j * 8, y + yoff, mslotr);
+ Z_gotoxy(x + xoff + 4, y + yoff - 7);
+ if (input && i == cur) {
+ Z_printsf("%.*s_", imax, ibuf);
+ } else if (recv) {
+ Z_printsf("%.*s", msg.string.maxlen, msg.string.s);
+ }
+ yoff += 7;
+ break;
+ case GM_SCROLLER:
+ V_spr(x + xoff, y + yoff, mbarl);
+ for (j = 1; j < SCROLLER_MIDDLE; j++) {
+ V_spr(x + xoff + j * 8, y + yoff, mbarm);
+ }
+ V_spr(x + xoff + j * 8, y + yoff, mbarr);
+ msg.type = GM_GETINT;
+ if (GM_send(m, i, &msg)) {
+ int lev = (msg.integer.i - msg.integer.a) * ((SCROLLER_MIDDLE - 2) * 8) / msg.integer.b;
+ V_spr(x + xoff + lev + 8, y + yoff, mbaro);
+ }
+ yoff += 16;
+ break;
+ default:
+ assert(0);
+ }