diff options
Diffstat (limited to 'engines/mortevielle/menu.h')
-rw-r--r-- | engines/mortevielle/menu.h | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/engines/mortevielle/menu.h b/engines/mortevielle/menu.h new file mode 100644 index 0000000000..9256182280 --- /dev/null +++ b/engines/mortevielle/menu.h @@ -0,0 +1,306 @@ +/* NIVEAU 14*/ + +/* overlay */ void menut(integer no, str30 nom) + { + byte h,l; + str30 s; + + + /* 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; + } + } + +/* overlay */ void menu_disable(integer no) + { + byte h,l; + + /* 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; + } + } + +/* overlay */ void menu_enable(integer no) + { + byte h,l; + + /* 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; + } + } + +void menu_aff() + { + integer ind_tabl,k,col; + char c; + integer pt,x,y,color,msk, + num_letr; + + /* 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; + } + ind_tabl=succ(integer,ind_tabl); + k=succ(integer,k); + } while (!(k==3)); + y=y+1; + } while (!(y==9)); + col=col+48*res; + } while (!(num_letr==6)); + show_mouse(); + } + + +void draw_menu() + { + /* debug('draw_menu'); */ + menu_aff(); + active_menu=true; + msg4=no_choice; + msg3=no_choice; + choisi=false; + clic=false; + test0=false; + } + +void invers(integer ix) + { + varying_string<23> s; + + /* 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; + } + +void util(integer x,integer y) + { + integer ymx, dxcar, xmn, xmx, ix; + + /* 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)) + { + ix= pred(integer,(cardinal)y >> 3)+ (msg3 << 8); + if (ix!=msg4) + { + invers(1); + msg4=ix; + invers(0); + } + } + else if (msg4!=no_choice) + { + invers(1); + msg4=no_choice; + } + } + +void menu_down( integer ii) + { + integer cx, xcc; + integer xco, nb_lig; + + /* 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 { + cx= succ(integer,cx); + 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(); + } + +void menu_up(integer xx) + { + /* debug('menu_up'); */ + if (test0) + { + charecr(10,succ(byte,don[xx][2]) << 1); + test0=false; + } + } + +void erase_menu() + { + /* debug('erase_menu'); */ + active_menu=false; + clic=false; + menu_up(msg3); + } + +void mdn() + { + integer x,y,c,a,ix; + boolean tes; + + /* 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; + } + } + |