aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/oopmenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/oopmenu.cpp')
-rw-r--r--engines/avalanche/oopmenu.cpp506
1 files changed, 276 insertions, 230 deletions
diff --git a/engines/avalanche/oopmenu.cpp b/engines/avalanche/oopmenu.cpp
index 2d8ae42d84..94b3b0d343 100644
--- a/engines/avalanche/oopmenu.cpp
+++ b/engines/avalanche/oopmenu.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -60,263 +60,309 @@ const integer disabled = lightgray;
char r;
byte fv;
-void chalk(integer x,integer y, char t, string z)
-{
- byte p;
-;
- outtextxy(x,y,z);
- p=pos(t,z); if (p==0) return; p -= 1;
- outtextxy(x+p*8,y+1,"_");
+void chalk(integer x, integer y, char t, string z) {
+ byte p;
+ ;
+ outtextxy(x, y, z);
+ p = pos(t, z);
+ if (p == 0) return;
+ p -= 1;
+ outtextxy(x + p * 8, y + 1, "_");
}
-void say(integer x,integer y, char t, string z, byte f,byte b)
-{;
- settextjustify(0,2); setfillstyle(1,b); setcolor(f);
- bar(x-3,y-1,x+textwidth(z)+3,y+textheight(z)+1);
- chalk(x,y,t,z);
+void say(integer x, integer y, char t, string z, byte f, byte b) {
+ ;
+ settextjustify(0, 2);
+ setfillstyle(1, b);
+ setcolor(f);
+ bar(x - 3, y - 1, x + textwidth(z) + 3, y + textheight(z) + 1);
+ chalk(x, y, t, z);
}
-void mblit(integer x1,integer y1,integer x2,integer y2, byte f,byte t) /* NOT The Minstrel Blitter */
-{
- pointer p,q; word s;
-;
- mark(q);
- s=imagesize(x1,y1,x2,y2); getmem(p,s);
- setactivepage(f); getimage(x1,y1,x2,y2,p);
- setactivepage(t); putimage(x1,y1,p,0);
- setactivepage(0); release(q);
+void mblit(integer x1, integer y1, integer x2, integer y2, byte f, byte t) { /* NOT The Minstrel Blitter */
+ pointer p, q;
+ word s;
+ ;
+ mark(q);
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ setactivepage(f);
+ getimage(x1, y1, x2, y2, p);
+ setactivepage(t);
+ putimage(x1, y1, p, 0);
+ setactivepage(0);
+ release(q);
}
-void onemenu::start_afresh()
-{;
- number=0; width=0; firstlix=false; oldy=0; highlightnum=0;
+void onemenu::start_afresh() {
+ ;
+ number = 0;
+ width = 0;
+ firstlix = false;
+ oldy = 0;
+ highlightnum = 0;
}
-onemenu* onemenu::init()
-{;
- menunow=false;
- return this;
+onemenu *onemenu::init() {
+ ;
+ menunow = false;
+ return this;
}
-void onemenu::opt(string n, char tr, string key, boolean val)
-{
- integer l;
-;
- number += 1;
- l=textwidth(n+key)+30; if (width<l) width=l;
- {
- optiontype& with = oo[number];
- ;
- with.title=n;
- with.trigger=tr;
- with.shortcut=key;
- with.valid=val;
- }
+void onemenu::opt(string n, char tr, string key, boolean val) {
+ integer l;
+ ;
+ number += 1;
+ l = textwidth(n + key) + 30;
+ if (width < l) width = l;
+ {
+ optiontype &with = oo[number];
+ ;
+ with.title = n;
+ with.trigger = tr;
+ with.shortcut = key;
+ with.valid = val;
+ }
}
-void onemenu::displayopt(byte y,byte b,byte f,byte d)
-{;
- {
- optiontype& with = oo[y];
- ;
- if (with.valid) setcolor(f); else setcolor(d);
- if (b!=177)
- {;
- setfillstyle(1,b);
- bar(flx1,3+y*10,flx2,12+y*10);
- }
- settextjustify(2,2);
- if (with.shortcut>"") outtextxy(flx2,4+y*10,with.shortcut);
- settextjustify(0,2);
- chalk(left+3,4+y*10,with.trigger,with.title);
- }
+void onemenu::displayopt(byte y, byte b, byte f, byte d) {
+ ;
+ {
+ optiontype &with = oo[y];
+ ;
+ if (with.valid) setcolor(f);
+ else setcolor(d);
+ if (b != 177) {
+ ;
+ setfillstyle(1, b);
+ bar(flx1, 3 + y * 10, flx2, 12 + y * 10);
+ }
+ settextjustify(2, 2);
+ if (with.shortcut > "") outtextxy(flx2, 4 + y * 10, with.shortcut);
+ settextjustify(0, 2);
+ chalk(left + 3, 4 + y * 10, with.trigger, with.title);
+ }
}
-void onemenu::display()
-{
- byte y;
-;
- setfillstyle(1,menu_b); setcolor(menu_border);
- firstlix=true;
- flx1=left-2; flx2=left+width; fly=14+number*10;
- mblit(flx1-3,11,flx2+1,fly+1,0,1);
- menunow=true;
-
- bar(flx1,12,flx2,fly);
- rectangle(flx1-1,11,flx2+1,fly+1);
-
- setcolor(menu_f); settextjustify(0,2);
- displayopt(1,highlight_b,highlight_f,177);
- for( y=2; y <= number; y ++)
- { optiontype& with = oo[y]; displayopt(y,177,menu_f,disabled);}
+void onemenu::display() {
+ byte y;
+ ;
+ setfillstyle(1, menu_b);
+ setcolor(menu_border);
+ firstlix = true;
+ flx1 = left - 2;
+ flx2 = left + width;
+ fly = 14 + number * 10;
+ mblit(flx1 - 3, 11, flx2 + 1, fly + 1, 0, 1);
+ menunow = true;
+
+ bar(flx1, 12, flx2, fly);
+ rectangle(flx1 - 1, 11, flx2 + 1, fly + 1);
+
+ setcolor(menu_f);
+ settextjustify(0, 2);
+ displayopt(1, highlight_b, highlight_f, 177);
+ for (y = 2; y <= number; y ++) {
+ optiontype &with = oo[y];
+ displayopt(y, 177, menu_f, disabled);
+ }
}
-void onemenu::wipe()
-{;
- { headtype& with = m.ddms[o.menunum]; say(flx1+2,1,with.trigger,with.title,menu_f,menu_b);}
- mblit(flx1-3,11,flx2+1,fly+1,1,0);
- menunow=false; firstlix=false;
+void onemenu::wipe() {
+ ;
+ {
+ headtype &with = m.ddms[o.menunum];
+ say(flx1 + 2, 1, with.trigger, with.title, menu_f, menu_b);
+ }
+ mblit(flx1 - 3, 11, flx2 + 1, fly + 1, 1, 0);
+ menunow = false;
+ firstlix = false;
}
-void onemenu::movehighlight(shortint add)
-{
- shortint hn;
-;
- if (add!=0)
- {;
- hn=highlightnum+add;
- if ((hn<0) || (hn>=(unsigned char)number)) return;
- highlightnum=hn;
- }
- hidemousecursor;
- displayopt(oldy+1,menu_b,menu_f,disabled);
- displayopt(highlightnum+1,highlight_b,highlight_f,disabled);
- showmousecursor;
- oldy=highlightnum;
+void onemenu::movehighlight(shortint add) {
+ shortint hn;
+ ;
+ if (add != 0) {
+ ;
+ hn = highlightnum + add;
+ if ((hn < 0) || (hn >= (unsigned char)number)) return;
+ highlightnum = hn;
+ }
+ hidemousecursor;
+ displayopt(oldy + 1, menu_b, menu_f, disabled);
+ displayopt(highlightnum + 1, highlight_b, highlight_f, disabled);
+ showmousecursor;
+ oldy = highlightnum;
}
-void onemenu::lightup() /* This makes the menu highlight follow the mouse.*/
-{;
- if ((mousex<flx1) || (mousex>flx2)
- || (mousey<=12) || (mousey>fly-3)) return;
- highlightnum=(mousey-12) / 10;
- if (highlightnum==oldy) return;
- movehighlight(0);
+void onemenu::lightup() { /* This makes the menu highlight follow the mouse.*/
+ ;
+ if ((mousex < flx1) || (mousex > flx2)
+ || (mousey <= 12) || (mousey > fly - 3)) return;
+ highlightnum = (mousey - 12) / 10;
+ if (highlightnum == oldy) return;
+ movehighlight(0);
}
-void onemenu::select(byte n) /* Choose which one you want. */
-{;
- if (! oo[n+1].valid) return;
- choicenum=n;
- m.ddms[menunum].do_choose();
- wipe();
+void onemenu::select(byte n) { /* Choose which one you want. */
+ ;
+ if (! oo[n + 1].valid) return;
+ choicenum = n;
+ m.ddms[menunum].do_choose();
+ wipe();
}
-void onemenu::keystroke(char c)
-{
- byte fv;
-;
- c=upcase(c);
- for( fv=1; fv <= number; fv ++)
- if (upcase(oo[fv].trigger)==c) select(fv-1);
+void onemenu::keystroke(char c) {
+ byte fv;
+ ;
+ c = upcase(c);
+ for (fv = 1; fv <= number; fv ++)
+ if (upcase(oo[fv].trigger) == c) select(fv - 1);
}
-void bleep()
-{;
- sound(177); delay(7); nosound;
+void bleep() {
+ ;
+ sound(177);
+ delay(7);
+ nosound;
}
- headtype* headtype::init
- (char trig,char alttrig, string name, byte p, proc dw,proc dc)
- {;
- trigger=trig; alttrigger=alttrig; title=name;
- position=p; xpos=(position-1)*spacing+indent;
- xright=xpos+textwidth(name)+3;
- do_setup=dw; do_choose=dc;
- return this;
- }
-
- void headtype::display()
- {;
- say(xpos,1,trigger,title,menu_f,menu_b);
- }
-
- void headtype::highlight()
- {;
- say(xpos,1,trigger,title,highlight_f,highlight_b);
- {;
- o.left=xpos;
- o.menunow=true; o.menunum=position;
- }
- }
-
- boolean headtype::extdparse(char c)
- {boolean extdparse_result;
- ;
- if (c!=alttrigger) {; extdparse_result=true; return extdparse_result; }
- extdparse_result=false;
- return extdparse_result;
- }
-
- menuset* menuset::init()
- {;
- howmany=0;
- return this;
- }
-
- void menuset::create(char t, string n, char alttrig, proc dw,proc dc)
- {;
- howmany += 1;
- ddms[howmany].init(t,alttrig,n,howmany,dw,dc);
- }
-
- void menuset::update()
- {
- byte fv;
- ;
- setfillstyle(1,menu_b); bar(0,0,640,10);
- for( fv=1; fv <= howmany; fv ++) ddms[fv].display();
- }
-
- void menuset::extd(char c)
- {
- byte fv;
- ;
- fv=1;
- while ((fv<=howmany) && (ddms[fv].extdparse(c))) fv += 1;
- if (fv>howmany) return; getmenu(fv*spacing-indent);
- }
-
- void menuset::getmenu(integer x)
- {
- byte fv;
- ;
- fv=0;
- do {
- fv += 1;
- if ((x>ddms[fv].xpos-3) && (x<ddms[fv].xright))
- { headtype& with = ddms[fv];
- {;
- if (o.menunow)
- {;
- wipe(); /* get rid of menu */
- if (o.menunum==with.position) return; /* click on own highlight */
- }
- highlight(); do_setup();
- return;
- }}
- } while (!(fv>howmany));
- }
-
-void parsekey(char r,char re)
-{;
- switch (r) {
- case '\0': {;
- switch (re) {
- case 'K': {;
- wipe();
- m.getmenu((o.menunum-2)*spacing+indent);
- }
- break;
- case 'M': {;
- wipe();
- m.getmenu((o.menunum*spacing+indent));
- }
- break;
- case 'H': movehighlight(-1); break;
- case 'P': movehighlight(1); break;
- default: m.extd(re);
- }
- }
- break;
- case '\33': if (o.menunow) wipe(); break;
- case '\15': select(o.highlightnum); break;
- default:
- {;
- if (o.menunow) keystroke(r); else
- kbuffer=kbuffer+r+re;
- }
- }
+headtype *headtype::init
+(char trig, char alttrig, string name, byte p, proc dw, proc dc) {
+ ;
+ trigger = trig;
+ alttrigger = alttrig;
+ title = name;
+ position = p;
+ xpos = (position - 1) * spacing + indent;
+ xright = xpos + textwidth(name) + 3;
+ do_setup = dw;
+ do_choose = dc;
+ return this;
+}
+
+void headtype::display() {
+ ;
+ say(xpos, 1, trigger, title, menu_f, menu_b);
+}
+
+void headtype::highlight() {
+ ;
+ say(xpos, 1, trigger, title, highlight_f, highlight_b);
+ {
+ ;
+ o.left = xpos;
+ o.menunow = true;
+ o.menunum = position;
+ }
+}
+
+boolean headtype::extdparse(char c) {
+ boolean extdparse_result;
+ ;
+ if (c != alttrigger) {
+ ;
+ extdparse_result = true;
+ return extdparse_result;
+ }
+ extdparse_result = false;
+ return extdparse_result;
+}
+
+menuset *menuset::init() {
+ ;
+ howmany = 0;
+ return this;
+}
+
+void menuset::create(char t, string n, char alttrig, proc dw, proc dc) {
+ ;
+ howmany += 1;
+ ddms[howmany].init(t, alttrig, n, howmany, dw, dc);
+}
+
+void menuset::update() {
+ byte fv;
+ ;
+ setfillstyle(1, menu_b);
+ bar(0, 0, 640, 10);
+ for (fv = 1; fv <= howmany; fv ++) ddms[fv].display();
+}
+
+void menuset::extd(char c) {
+ byte fv;
+ ;
+ fv = 1;
+ while ((fv <= howmany) && (ddms[fv].extdparse(c))) fv += 1;
+ if (fv > howmany) return;
+ getmenu(fv * spacing - indent);
+}
+
+void menuset::getmenu(integer x) {
+ byte fv;
+ ;
+ fv = 0;
+ do {
+ fv += 1;
+ if ((x > ddms[fv].xpos - 3) && (x < ddms[fv].xright)) {
+ headtype &with = ddms[fv];
+ {
+ ;
+ if (o.menunow) {
+ ;
+ wipe(); /* get rid of menu */
+ if (o.menunum == with.position) return; /* click on own highlight */
+ }
+ highlight();
+ do_setup();
+ return;
+ }
+ }
+ } while (!(fv > howmany));
+}
+
+void parsekey(char r, char re) {
+ ;
+ switch (r) {
+ case '\0': {
+ ;
+ switch (re) {
+ case 'K': {
+ ;
+ wipe();
+ m.getmenu((o.menunum - 2)*spacing + indent);
+ }
+ break;
+ case 'M': {
+ ;
+ wipe();
+ m.getmenu((o.menunum * spacing + indent));
+ }
+ break;
+ case 'H':
+ movehighlight(-1);
+ break;
+ case 'P':
+ movehighlight(1);
+ break;
+ default:
+ m.extd(re);
+ }
+ }
+ break;
+ case '\33':
+ if (o.menunow) wipe();
+ break;
+ case '\15':
+ select(o.highlightnum);
+ break;
+ default: {
+ ;
+ if (o.menunow) keystroke(r);
+ else
+ kbuffer = kbuffer + r + re;
+ }
+ }
}
} // End of namespace Avalanche. \ No newline at end of file