aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/helper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/helper.cpp')
-rw-r--r--engines/avalanche/helper.cpp506
1 files changed, 276 insertions, 230 deletions
diff --git a/engines/avalanche/helper.cpp b/engines/avalanche/helper.cpp
index 397c63fd7f..76948b85da 100644
--- a/engines/avalanche/helper.cpp
+++ b/engines/avalanche/helper.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
@@ -45,38 +45,54 @@
namespace Avalanche {
struct buttontype {
- char trigger;
- byte whither;
+ char trigger;
+ byte whither;
};
const integer buttonsize = 930;
-const integer toolbar = 0; const integer nim = 1; const integer kbd = 2; const integer credits = 3; const integer joystick = 4; const integer troubleshooting = 5; const integer story = 6;
-const integer mainscreen = 7; const integer registering = 8; const integer sound = 9; const integer mouse = 10; const integer filer = 11; const integer back2game = 12;
-const integer helponhelp = 13; const integer pgdn = 14; const integer pgup = 15;
-
-array<1,10,buttontype> buttons;
+const integer toolbar = 0;
+const integer nim = 1;
+const integer kbd = 2;
+const integer credits = 3;
+const integer joystick = 4;
+const integer troubleshooting = 5;
+const integer story = 6;
+const integer mainscreen = 7;
+const integer registering = 8;
+const integer sound = 9;
+const integer mouse = 10;
+const integer filer = 11;
+const integer back2game = 12;
+const integer helponhelp = 13;
+const integer pgdn = 14;
+const integer pgup = 15;
+
+array<1, 10, buttontype> buttons;
byte highlight_was;
-void plot_button(integer y, byte which)
-{
- untyped_file f;
- pointer p;
-
- if (y>200)
- { background(2); delay(10); background(0); return; } /* Silly buttons. */
- getmem(p,buttonsize);
- assign(f,"buttons.avd");
- reset(f,1);
- seek(f,which*buttonsize);
- blockread(f,p,buttonsize);
-
- if (y==-177)
- putimage(229,5,p,0);
- else
- putimage(470,y,p,0);
- close(f);
- freemem(p,buttonsize);
+void plot_button(integer y, byte which) {
+ untyped_file f;
+ pointer p;
+
+ if (y > 200) {
+ background(2); /* Silly buttons. */
+ delay(10);
+ background(0);
+ return;
+ }
+ getmem(p, buttonsize);
+ assign(f, "buttons.avd");
+ reset(f, 1);
+ seek(f, which * buttonsize);
+ blockread(f, p, buttonsize);
+
+ if (y == -177)
+ putimage(229, 5, p, 0);
+ else
+ putimage(470, y, p, 0);
+ close(f);
+ freemem(p, buttonsize);
}
void getme(byte which);
@@ -84,226 +100,256 @@ void getme(byte which);
static untyped_file f;
-static void chalk(byte y, string z)
-{
- outtextxy(16,41+y*10,z);
+static void chalk(byte y, string z) {
+ outtextxy(16, 41 + y * 10, z);
}
-static void getline(string& x)
-{
- byte fz;
+static void getline(string &x) {
+ byte fz;
- blockread(f,x[0],1);
- blockread(f,x[1],(byte)(x[0]));
- for( fz=1; fz <= length(x); fz ++)
- x[fz]=chr(ord(x[fz]) ^ 177);
+ blockread(f, x[0], 1);
+ blockread(f, x[1], (byte)(x[0]));
+ for (fz = 1; fz <= length(x); fz ++)
+ x[fz] = chr(ord(x[fz]) ^ 177);
}
-void getme(byte which) /* Help icons are 80x20 */
-{
- string x;
- byte y,fv;
- word offset;
-
-
- off;
- assign(f,"help.avd");
- y=0;
- highlight_was=177; /* Forget where the highlight was. */
- reset(f,1);
- seek(f,which*2);
- blockread(f,offset,2);
- seek(f,offset);
-
- getline(x);
- setfillstyle(1,1); bar(0,0,640,200);
- setfillstyle(1,15); bar(8,40,450,200);
- settextjustify(2,2);
- blockread(f,fv,1);
- plot_button(-177,fv);
-
- setcolor(0); outtextxy(629,26,x); /* Plot the title. */
- setcolor(3); outtextxy(630,25,x);
-
- settextjustify(0,2); settextstyle(0,0,2);
- setcolor(0); outtextxy(549,1,"help!");
- setcolor(3); outtextxy(550,0,"help!");
- /***/ settextstyle(0,0,1);
-
- do {
- getline(x);
- if (x=='!') flush(); /* End of the help text is signalled with a !. */
- if (x[1]=='\\')
- {
- setcolor(4);
- chalk(y,copy(x,2,255));
- } else
- {
- setcolor(0);
- chalk(y,x);
- }
- y += 1;
- } while (!false);
-
- /* We are now at the end of the text. Next we must read the icons. */
-
- y=0; settextjustify(1,1); settextstyle(0,0,2);
- while (! eof(f))
- {
- y += 1;
- blockread(f,buttons[y].trigger,1);
- if (buttons[y].trigger=='\261') flush();
- blockread(f,fv,1);
- if (buttons[y].trigger!='\0') plot_button(13+y*27,fv);
- blockread(f,buttons[y].whither,1); /* this is the position to jump to */
-
-
- switch (buttons[y].trigger) {
- case 'þ' : x="Esc"; break;
- case 'Ö' : x='\30'; break;
- case 'Ø' : x='\31'; break;
- default:
- x=buttons[y].trigger;
- }
- setcolor(0); outtextxy(589,26+y*27,x);
- setcolor(3); outtextxy(590,25+y*27,x);
-
- }
-
- settextjustify(0,2); settextstyle(0,0,1);
- close(f); on;
+void getme(byte which) { /* Help icons are 80x20 */
+ string x;
+ byte y, fv;
+ word offset;
+
+
+ off;
+ assign(f, "help.avd");
+ y = 0;
+ highlight_was = 177; /* Forget where the highlight was. */
+ reset(f, 1);
+ seek(f, which * 2);
+ blockread(f, offset, 2);
+ seek(f, offset);
+
+ getline(x);
+ setfillstyle(1, 1);
+ bar(0, 0, 640, 200);
+ setfillstyle(1, 15);
+ bar(8, 40, 450, 200);
+ settextjustify(2, 2);
+ blockread(f, fv, 1);
+ plot_button(-177, fv);
+
+ setcolor(0);
+ outtextxy(629, 26, x); /* Plot the title. */
+ setcolor(3);
+ outtextxy(630, 25, x);
+
+ settextjustify(0, 2);
+ settextstyle(0, 0, 2);
+ setcolor(0);
+ outtextxy(549, 1, "help!");
+ setcolor(3);
+ outtextxy(550, 0, "help!");
+ /***/ settextstyle(0, 0, 1);
+
+ do {
+ getline(x);
+ if (x == '!') flush(); /* End of the help text is signalled with a !. */
+ if (x[1] == '\\') {
+ setcolor(4);
+ chalk(y, copy(x, 2, 255));
+ } else {
+ setcolor(0);
+ chalk(y, x);
+ }
+ y += 1;
+ } while (!false);
+
+ /* We are now at the end of the text. Next we must read the icons. */
+
+ y = 0;
+ settextjustify(1, 1);
+ settextstyle(0, 0, 2);
+ while (! eof(f)) {
+ y += 1;
+ blockread(f, buttons[y].trigger, 1);
+ if (buttons[y].trigger == '\261') flush();
+ blockread(f, fv, 1);
+ if (buttons[y].trigger != '\0') plot_button(13 + y * 27, fv);
+ blockread(f, buttons[y].whither, 1); /* this is the position to jump to */
+
+
+ switch (buttons[y].trigger) {
+ case 'þ' :
+ x = "Esc";
+ break;
+ case 'Ö' :
+ x = '\30';
+ break;
+ case 'Ø' :
+ x = '\31';
+ break;
+ default:
+ x = buttons[y].trigger;
+ }
+ setcolor(0);
+ outtextxy(589, 26 + y * 27, x);
+ setcolor(3);
+ outtextxy(590, 25 + y * 27, x);
+
+ }
+
+ settextjustify(0, 2);
+ settextstyle(0, 0, 1);
+ close(f);
+ on;
}
byte check_mouse();
- /* Returns clicked-on button, or 0 if none. */
-static void light(byte which,byte colour)
-{
- if (which==177) return; /* Dummy value for "no button at all". */
- setcolor(colour); which=which & 31;
- rectangle(466,11+which*27,555,35+which*27);
+/* Returns clicked-on button, or 0 if none. */
+static void light(byte which, byte colour) {
+ if (which == 177) return; /* Dummy value for "no button at all". */
+ setcolor(colour);
+ which = which & 31;
+ rectangle(466, 11 + which * 27, 555, 35 + which * 27);
}
-byte check_mouse()
-{
- byte h_is;
-
- byte check_mouse_result;
- check;
-
- if (mrelease!=0)
- { /* Clicked *somewhere*... */
- if ((mx<470) || (mx>550) || (((my-13) % 27)>20))
- check_mouse_result=0; else
- /* Clicked on a button. */
- check_mouse_result=((my-13) / 27);
- } else
- {
- if ((mx>470) && (mx<=550) && (((my-13) % 27)<=20))
- { /* No click, so highlight. */
- h_is=(my-13) / 27;
- if ((h_is<1) || (h_is>6)) h_is=177; /* In case of silly values. */
- } else h_is=177;
-
- if ((h_is!=177) && ((keystatus & 1)>0)) h_is += 32;
-
- if (h_is!=highlight_was)
- {
- off;
- light(highlight_was,1);
- highlight_was=h_is;
- if (buttons[h_is & 31].trigger!='\0')
- {
- if (h_is>31) light(h_is,11); else light(h_is,9);
- }
- on;
- }
-
- check_mouse_result=0;
- }
- return check_mouse_result;
+byte check_mouse() {
+ byte h_is;
+
+ byte check_mouse_result;
+ check;
+
+ if (mrelease != 0) {
+ /* Clicked *somewhere*... */
+ if ((mx < 470) || (mx > 550) || (((my - 13) % 27) > 20))
+ check_mouse_result = 0;
+ else
+ /* Clicked on a button. */
+ check_mouse_result = ((my - 13) / 27);
+ } else {
+ if ((mx > 470) && (mx <= 550) && (((my - 13) % 27) <= 20)) {
+ /* No click, so highlight. */
+ h_is = (my - 13) / 27;
+ if ((h_is < 1) || (h_is > 6)) h_is = 177; /* In case of silly values. */
+ } else h_is = 177;
+
+ if ((h_is != 177) && ((keystatus & 1) > 0)) h_is += 32;
+
+ if (h_is != highlight_was) {
+ off;
+ light(highlight_was, 1);
+ highlight_was = h_is;
+ if (buttons[h_is & 31].trigger != '\0') {
+ if (h_is > 31) light(h_is, 11);
+ else light(h_is, 9);
+ }
+ on;
+ }
+
+ check_mouse_result = 0;
+ }
+ return check_mouse_result;
}
-void continue_help()
-{
- char r;
- byte fv;
-
- do {
- while (! keypressed())
- {
- fv=check_mouse();
-
- if (fv>0)
- switch (buttons[fv].trigger) {
- case '\0':/*null*/; break;
- case '\376': return; break;
- default: {
- dusk;
- getme(buttons[fv].whither);
- dawn;
- continue_;
- }
- }
-
- }
- r=upcase(readkey());
- switch (r) {
- case '\33' : return; break;
- case '\0' : switch (readkey()) {
- case '\110':case '\111': r='Ö'; break;
- case '\120':case '\121': r='Ø'; break;
- case '\73': r='H'; break; /* Help on help */
- default: continue_;
- }
- break;
- }
-
- for( fv=1; fv <= 10; fv ++)
- { buttontype& with = buttons[fv];
- if (with.trigger==r)
- {
- dusk;
- getme(with.whither);
- dawn;
- flush();
- }}
-
- } while (!false);
+void continue_help() {
+ char r;
+ byte fv;
+
+ do {
+ while (! keypressed()) {
+ fv = check_mouse();
+
+ if (fv > 0)
+ switch (buttons[fv].trigger) {
+ case '\0':/*null*/
+ ;
+ break;
+ case '\376':
+ return;
+ break;
+ default: {
+ dusk;
+ getme(buttons[fv].whither);
+ dawn;
+ continue_;
+ }
+ }
+
+ }
+ r = upcase(readkey());
+ switch (r) {
+ case '\33' :
+ return;
+ break;
+ case '\0' :
+ switch (readkey()) {
+ case '\110':
+ case '\111':
+ r = 'Ö';
+ break;
+ case '\120':
+ case '\121':
+ r = 'Ø';
+ break;
+ case '\73':
+ r = 'H';
+ break; /* Help on help */
+ default:
+ continue_;
+ }
+ break;
+ }
+
+ for (fv = 1; fv <= 10; fv ++) {
+ buttontype &with = buttons[fv];
+ if (with.trigger == r) {
+ dusk;
+ getme(with.whither);
+ dawn;
+ flush();
+ }
+ }
+
+ } while (!false);
}
-void boot_help()
-{
- byte groi;
-
- dusk;
- off;
- oncandopageswap=false; highlight_was=177;
- copypage(3,1-cp); /* Store old screen. */ groi=getpixel(0,0);
-
- /* Set up mouse. */
- off_virtual;
- newpointer(2);
- setactivepage(3); setvisualpage(3);
-
- getme(0);
- dawn;
-
- newpointer(9); on;
- mousepage(3);
-
- continue_help();
-
- mousepage(cp);
- dusk; off;
- oncandopageswap=true;
- copypage(1-cp,3); /* Restore old screen. */ groi=getpixel(0,0);
- on_virtual; dawn; fix_flashers;
-
- setvisualpage(cp);
- setactivepage(1-cp);
+void boot_help() {
+ byte groi;
+
+ dusk;
+ off;
+ oncandopageswap = false;
+ highlight_was = 177;
+ copypage(3, 1 - cp); /* Store old screen. */ groi = getpixel(0, 0);
+
+ /* Set up mouse. */
+ off_virtual;
+ newpointer(2);
+ setactivepage(3);
+ setvisualpage(3);
+
+ getme(0);
+ dawn;
+
+ newpointer(9);
+ on;
+ mousepage(3);
+
+ continue_help();
+
+ mousepage(cp);
+ dusk;
+ off;
+ oncandopageswap = true;
+ copypage(1 - cp, 3); /* Restore old screen. */ groi = getpixel(0, 0);
+ on_virtual;
+ dawn;
+ fix_flashers;
+
+ setvisualpage(cp);
+ setactivepage(1 - cp);
}
} // End of namespace Avalanche. \ No newline at end of file