2011-12-23 19:02:50 +00:00
|
|
|
/* NIVEAU 14*/
|
|
|
|
|
2011-12-26 17:57:54 +00:00
|
|
|
/* overlay */ void menut(int no, str30 nom) {
|
2011-12-23 22:15:35 +00:00
|
|
|
byte h, l;
|
|
|
|
str30 s;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('menut'); */
|
|
|
|
h = hi(no);
|
|
|
|
l = lo(no);
|
|
|
|
s = nom;
|
|
|
|
if (! tesok) {
|
|
|
|
clrscr;
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
while (length(s) < 30) s = s + ' ';
|
|
|
|
switch (h) {
|
|
|
|
case invent :
|
|
|
|
if (l != 7) inv[l] = string(' ') + s;
|
|
|
|
break;
|
|
|
|
case depla :
|
|
|
|
dep[l] = s;
|
|
|
|
break;
|
|
|
|
case action :
|
|
|
|
act[l] = s;
|
|
|
|
break;
|
|
|
|
case saction :
|
|
|
|
self_[l] = s;
|
|
|
|
break;
|
|
|
|
case discut :
|
|
|
|
dis[l] = s;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-26 17:57:54 +00:00
|
|
|
/* overlay */ void menu_disable(int no) {
|
2011-12-23 22:15:35 +00:00
|
|
|
byte h, l;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('menu_disable'); */
|
|
|
|
h = hi(no);
|
|
|
|
l = lo(no);
|
|
|
|
switch (h) {
|
|
|
|
case invent : {
|
|
|
|
if (l > 6) {
|
|
|
|
inv[l][1] = '<';
|
|
|
|
inv[l][22] = '>';
|
|
|
|
} else inv[l][1] = '*';
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case depla :
|
|
|
|
dep[l][1] = '*';
|
|
|
|
break;
|
|
|
|
case action :
|
|
|
|
act[l][1] = '*';
|
|
|
|
break;
|
|
|
|
case saction :
|
|
|
|
self_[l][1] = '*';
|
|
|
|
break;
|
|
|
|
case discut :
|
|
|
|
dis[l][1] = '*';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-26 17:57:54 +00:00
|
|
|
/* overlay */ void menu_enable(int no) {
|
2011-12-23 22:15:35 +00:00
|
|
|
byte h, l;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('menu_disable'); */
|
|
|
|
h = hi(no);
|
|
|
|
l = lo(no);
|
|
|
|
switch (h) {
|
|
|
|
case invent : {
|
|
|
|
inv[l][1] = ' ';
|
|
|
|
inv[l][22] = ' ';
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case depla :
|
|
|
|
dep[l][1] = ' ';
|
|
|
|
break;
|
|
|
|
case action :
|
|
|
|
act[l][1] = ' ';
|
|
|
|
break;
|
|
|
|
case saction : {
|
|
|
|
self_[l][1] = ' ';
|
|
|
|
self_[l][1] = ' ';
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case discut :
|
|
|
|
dis[l][1] = ' ';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
void menu_aff() {
|
2011-12-26 17:57:54 +00:00
|
|
|
int ind_tabl, k, col;
|
2011-12-23 22:15:35 +00:00
|
|
|
char c;
|
2011-12-26 17:57:54 +00:00
|
|
|
int pt, x, y, color, msk,
|
2011-12-23 22:15:35 +00:00
|
|
|
num_letr;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('menu_aff'); */
|
|
|
|
hide_mouse();
|
|
|
|
/*if not tesok then
|
|
|
|
begin
|
|
|
|
clrscr;
|
|
|
|
halt;
|
|
|
|
end;*/
|
|
|
|
box(7, gd, 0, 0, 639, 10, 255);
|
|
|
|
col = 28 * res;
|
|
|
|
if (gd == cga) color = 1;
|
|
|
|
else color = 9;
|
|
|
|
num_letr = 0;
|
|
|
|
do { /* lettre par lettre */
|
|
|
|
num_letr = num_letr + 1;
|
|
|
|
ind_tabl = 0;
|
|
|
|
y = 1;
|
|
|
|
do { /* colonne par colonne */
|
|
|
|
k = 0;
|
|
|
|
x = col;
|
|
|
|
do { /* ligne par ligne */
|
|
|
|
msk = 0x80;
|
|
|
|
for (pt = 0; pt <= 7; pt ++) {
|
|
|
|
if ((lettres[num_letr][ind_tabl] & msk) != 0) {
|
|
|
|
putpix(gd, x + 1, y + 1, 0);
|
|
|
|
putpix(gd, x, y + 1, 0);
|
|
|
|
putpix(gd, x, y, color);
|
|
|
|
}
|
|
|
|
msk = (cardinal)msk >> 1;
|
|
|
|
x = x + 1;
|
|
|
|
}
|
2011-12-26 17:57:54 +00:00
|
|
|
ind_tabl = succ(int, ind_tabl);
|
|
|
|
k = succ(int, k);
|
2011-12-23 22:15:35 +00:00
|
|
|
} while (!(k == 3));
|
|
|
|
y = y + 1;
|
|
|
|
} while (!(y == 9));
|
|
|
|
col = col + 48 * res;
|
|
|
|
} while (!(num_letr == 6));
|
|
|
|
show_mouse();
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
void draw_menu() {
|
|
|
|
/* debug('draw_menu'); */
|
|
|
|
menu_aff();
|
|
|
|
active_menu = true;
|
|
|
|
msg4 = no_choice;
|
|
|
|
msg3 = no_choice;
|
|
|
|
choisi = false;
|
|
|
|
clic = false;
|
|
|
|
test0 = false;
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-26 17:57:54 +00:00
|
|
|
void invers(int ix) {
|
2011-12-23 22:15:35 +00:00
|
|
|
varying_string<23> s;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('invers'); */
|
|
|
|
if (msg4 == no_choice) return;
|
|
|
|
putxy(don[msg3][1] << 3, succ(void, lo(msg4)) << 3);
|
|
|
|
switch (msg3) {
|
|
|
|
case 1 :
|
|
|
|
s = inv[lo(msg4)];
|
|
|
|
break;
|
|
|
|
case 2 :
|
|
|
|
s = dep[lo(msg4)];
|
|
|
|
break;
|
|
|
|
case 3 :
|
|
|
|
s = act[lo(msg4)];
|
|
|
|
break;
|
|
|
|
case 4 :
|
|
|
|
s = self_[lo(msg4)];
|
|
|
|
break;
|
|
|
|
case 5 :
|
|
|
|
s = dis[lo(msg4)];
|
|
|
|
break;
|
|
|
|
case 6 :
|
|
|
|
s = fic[lo(msg4)];
|
|
|
|
break;
|
|
|
|
case 7 :
|
|
|
|
s = fic[1] + ' ' + chr(48 + lo(msg4));
|
|
|
|
break;
|
|
|
|
case 8 :
|
|
|
|
if (lo(msg4) == 1) s = recom;
|
|
|
|
else s = fic[2] + ' ' + chr(47 + lo(msg4));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if ((s[1] != '*') && (s[1] != '<')) writeg(s, ix);
|
|
|
|
else msg4 = no_choice;
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-26 17:57:54 +00:00
|
|
|
void util(int x, int y) {
|
|
|
|
int ymx, dxcar, xmn, xmx, ix;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('util'); */
|
|
|
|
ymx = (don[msg3][4] << 3) + 16;
|
|
|
|
dxcar = don[msg3][3];
|
|
|
|
xmn = (don[msg3][1] << 2) * res;
|
|
|
|
if (res == 1) ix = 5;
|
|
|
|
else ix = 3;
|
|
|
|
xmx = dxcar * ix * res + xmn + 2;
|
|
|
|
if ((x > xmn) && (x < xmx) && (y < ymx) && (y > 15)) {
|
2011-12-26 17:57:54 +00:00
|
|
|
ix = pred(int, (cardinal)y >> 3) + (msg3 << 8);
|
2011-12-23 22:15:35 +00:00
|
|
|
if (ix != msg4) {
|
|
|
|
invers(1);
|
|
|
|
msg4 = ix;
|
|
|
|
invers(0);
|
|
|
|
}
|
|
|
|
} else if (msg4 != no_choice) {
|
|
|
|
invers(1);
|
|
|
|
msg4 = no_choice;
|
|
|
|
}
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-26 17:57:54 +00:00
|
|
|
void menu_down(int ii) {
|
|
|
|
int cx, xcc;
|
|
|
|
int xco, nb_lig;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('menu_down'); */
|
|
|
|
xco = don[ii][1];
|
|
|
|
nb_lig = don[ii][4];
|
|
|
|
hide_mouse();
|
|
|
|
sauvecr(10, succ(byte, don[ii][2]) << 1);
|
|
|
|
xco = xco << 3;
|
|
|
|
if (res == 1) cx = 10;
|
|
|
|
else cx = 6;
|
|
|
|
xcc = xco + (don[ii][3] * cx) + 6;
|
|
|
|
box(15, gd, xco, 12, xcc, 10 + (don[ii][2] << 1), 255);
|
|
|
|
box(0, gd, xcc, 12, xcc + 4, 10 + (don[ii][2] << 1), 255);
|
|
|
|
box(0, gd, xco, 8 + (don[ii][2] << 1), xcc + 4, 12 + (don[ii][2] << 1), 255);
|
|
|
|
putxy(xco, 16);
|
|
|
|
cx = 0;
|
|
|
|
do {
|
2011-12-26 17:57:54 +00:00
|
|
|
cx = succ(int, cx);
|
2011-12-23 22:15:35 +00:00
|
|
|
switch (ii) {
|
|
|
|
case 1 :
|
|
|
|
if (inv[cx][1] != '*') writeg(inv[cx], 4);
|
|
|
|
break;
|
|
|
|
case 2 :
|
|
|
|
if (dep[cx][1] != '*') writeg(dep[cx], 4);
|
|
|
|
break;
|
|
|
|
case 3 :
|
|
|
|
if (act[cx][1] != '*') writeg(act[cx], 4);
|
|
|
|
break;
|
|
|
|
case 4 :
|
|
|
|
if (self_[cx][1] != '*') writeg(self_[cx], 4);
|
|
|
|
break;
|
|
|
|
case 5 :
|
|
|
|
if (dis[cx][1] != '*') writeg(dis[cx], 4);
|
|
|
|
break;
|
|
|
|
case 6 :
|
|
|
|
writeg(fic[cx], 4);
|
|
|
|
break;
|
|
|
|
case 7 :
|
|
|
|
writeg(fic[1] + ' ' + chr(48 + cx), 4);
|
|
|
|
break;
|
|
|
|
case 8 :
|
|
|
|
if (cx == 1) writeg(recom, 4);
|
|
|
|
else writeg(fic[2] + ' ' + chr(47 + cx), 4);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
putxy(xco, ywhere + 8);
|
|
|
|
} while (!(cx == nb_lig));
|
|
|
|
test0 = true;
|
|
|
|
show_mouse();
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-26 17:57:54 +00:00
|
|
|
void menu_up(int xx) {
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('menu_up'); */
|
|
|
|
if (test0) {
|
|
|
|
charecr(10, succ(byte, don[xx][2]) << 1);
|
|
|
|
test0 = false;
|
|
|
|
}
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
void erase_menu() {
|
|
|
|
/* debug('erase_menu'); */
|
|
|
|
active_menu = false;
|
|
|
|
clic = false;
|
|
|
|
menu_up(msg3);
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
void mdn() {
|
2011-12-26 17:57:54 +00:00
|
|
|
int x, y, c, a, ix;
|
2011-12-23 22:15:35 +00:00
|
|
|
boolean tes;
|
2011-12-23 19:02:50 +00:00
|
|
|
|
2011-12-23 22:15:35 +00:00
|
|
|
/* debug('mdn'); */
|
|
|
|
if (! active_menu) return;
|
|
|
|
x = x_s;
|
|
|
|
y = y_s;
|
|
|
|
if (! clic) {
|
|
|
|
if ((x == xprec) &&
|
|
|
|
(y == yprec)) return;
|
|
|
|
else {
|
|
|
|
xprec = x;
|
|
|
|
yprec = y;
|
|
|
|
}
|
|
|
|
tes = (y < 11) && ((set::of(range(28 * res, 28 * res + 24), range(76 * res, 76 * res + 24), eos).has(x))
|
|
|
|
|| ((x > 124 * res) && (x < 124 * res + 24))
|
|
|
|
|| ((x > 172 * res) && (x < 172 * res + 24))
|
|
|
|
|| ((x > 220 * res) && (x < 220 * res + 24))
|
|
|
|
|| ((x > 268 * res) && (x < 268 * res + 24)));
|
|
|
|
if (tes) {
|
|
|
|
if (x < 76 * res) ix = invent;
|
|
|
|
else if (x < 124 * res) ix = depla;
|
|
|
|
else if (x < 172 * res) ix = action;
|
|
|
|
else if (x < 220 * res) ix = saction;
|
|
|
|
else if (x < 268 * res) ix = discut;
|
|
|
|
else ix = fichier;
|
|
|
|
if ((ix != msg3) || (! test0))
|
|
|
|
if (!((ix == fichier) && (set::of(sauve, charge, eos).has(msg3)))) {
|
|
|
|
menu_up(msg3);
|
|
|
|
menu_down(ix);
|
|
|
|
msg3 = ix;
|
|
|
|
msg4 = no_choice;
|
|
|
|
}
|
|
|
|
} else { /* Not in the MenuTitle line */
|
|
|
|
if ((y > 11) && (test0)) util(x, y);
|
|
|
|
}
|
|
|
|
} else /* il y a eu 'clic' */
|
|
|
|
if ((msg3 == fichier) && (msg4 != no_choice)) {
|
|
|
|
clic = false;
|
|
|
|
menu_up(msg3);
|
|
|
|
if (lo(msg4) == 1) msg3 = 7;
|
|
|
|
else msg3 = 8;
|
|
|
|
menu_down(msg3);
|
|
|
|
} else { /* il y a eu clic sur un autre menu */
|
|
|
|
choisi = (test0) && (msg4 != no_choice);
|
|
|
|
menu_up(msg3);
|
|
|
|
msg[4] = msg4;
|
|
|
|
msg[3] = msg3;
|
|
|
|
msg3 = no_choice;
|
|
|
|
msg4 = no_choice;
|
|
|
|
clic = false;
|
|
|
|
}
|
|
|
|
}
|
2011-12-23 19:02:50 +00:00
|
|
|
|