aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/setup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/setup.cpp')
-rw-r--r--engines/avalanche/setup.cpp1440
1 files changed, 0 insertions, 1440 deletions
diff --git a/engines/avalanche/setup.cpp b/engines/avalanche/setup.cpp
deleted file mode 100644
index 184e42f9a9..0000000000
--- a/engines/avalanche/setup.cpp
+++ /dev/null
@@ -1,1440 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * 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
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
- * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
- */
-
-/*#include "Crt.h"*/
-/*#include "Tommys.h"*/
-#include "joystick.h"
-
-namespace Avalanche {
-
-const integer selected = 0x60; /* Background for selected lines of text. */
-
-typedef array<1, 400, varying_string<80> > mobytype;
-
-typedef set byteset; /* Define its typemark. */
-
-enum option {_overrideegacheck, _zoomystart, _loadfirst, _numlockhold, _usemouse,
- _controller, _logging, _logfile,
-
- _joystickinstalled, _joytop, _joybottom, _joyleft, _joyright, _joymidx,
- _joymidy, _joycentringfactor, _whichjoy, _quiet, _soundcard,
- _baseaddress, _irq, _dma,
- _samplerate, _keyboardclick,
-
- _printer,
-
- option_error, last_option
- };
-
-
-mobytype *moby;
-word mobylength;
-byte background; /* The current background colour, times 16. */
-byte line; /* Which line you're on in the menus. */
-
-string registrant, reginum;
-
-byte num_printers;
-array<1, 10, string> printers;
-string this_printer;
-
-/* THE STATUS VARIABLES: */
-
-/* general */
-
-boolean override_ega;
-boolean skip_loading_screens;
-string load_particular;
-boolean force_numlock;
-boolean ignore_mouse;
-boolean use_keyboard;
-boolean log_to_printer;
-boolean log_to_file;
-string log_filename;
-string autotype;
-
-/* joystick */
-
-boolean has_a_joystick;
-word jtop, jbottom, jleft, jright, jmidx, jmidy;
-byte jcentre;
-word whichjoy;
-
-/* sound */
-
-boolean suppress_sfx;
-byte your_card;
-longint samplerate;
-longint sound_addr, sound_irq, sound_dma;
-boolean wants_keyclick;
-
-/* registration */
-
-string regname, regnum, chkname, chknum;
-
-
-string trim_and_caps(string this_) {
- byte fv;
-
- string trim_and_caps_result;
- while ((this_[1] == ' ') && (this_ != ""))
- Delete(this_, 1, 1); /* Strip leading blanks. */
- while ((this_[length(this_)] == ' ') && (this_ != ""))
- this_[0] -= 1; /* Strip trailing blanks. */
- for (fv = 1; fv <= length(this_); fv ++) this_[fv] = upcase(this_[fv]); /* And capitalise. */
- trim_and_caps_result = this_;
- return trim_and_caps_result;
-}
-
-option string_2_option(string field) {
-
- option string_2_option_result;
- field = trim_and_caps(field);
-
- if (field == "OVERRIDEEGACHECK") string_2_option_result = _overrideegacheck;
- else if (field == "ZOOMYSTART") string_2_option_result = _zoomystart;
- else if (field == "LOADFIRST") string_2_option_result = _loadfirst;
- else if (field == "NUMLOCKHOLD") string_2_option_result = _numlockhold;
- else if (field == "USEMOUSE") string_2_option_result = _usemouse;
- else if (field == "CONTROLLER") string_2_option_result = _controller;
- else if (field == "LOGGING") string_2_option_result = _logging;
- else if (field == "LOGFILE") string_2_option_result = _logfile;
- else
-
- /* joystick */
-
- if (field == "JOYSTICKINSTALLED") string_2_option_result = _joystickinstalled;
- else if (field == "JOYTOP") string_2_option_result = _joytop;
- else if (field == "JOYBOTTOM") string_2_option_result = _joybottom;
- else if (field == "JOYLEFT") string_2_option_result = _joyleft;
- else if (field == "JOYRIGHT") string_2_option_result = _joyright;
- else if (field == "JOYMIDX") string_2_option_result = _joymidx;
- else if (field == "JOYMIDY") string_2_option_result = _joymidy;
- else if (field == "JOYCENTRINGFACTOR") string_2_option_result = _joycentringfactor;
- else if (field == "WHICHJOY") string_2_option_result = _whichjoy;
- else
-
- /* sound */
-
- if (field == "QUIET") string_2_option_result = _quiet;
- else if (field == "SOUNDCARD") string_2_option_result = _soundcard;
- else if (field == "SAMPLERATE") string_2_option_result = _samplerate;
- else if (field == "KEYBOARDCLICK") string_2_option_result = _keyboardclick;
- else if (field == "BASEADDRESS") string_2_option_result = _baseaddress;
- else if (field == "IRQ") string_2_option_result = _irq;
- else if (field == "DMA") string_2_option_result = _dma;
- else
-
- /* printer */
-
- if (field == "PRINTER") string_2_option_result = _printer;
- else
-
-
- string_2_option_result = option_error;
-
- return string_2_option_result;
-}
-
-void clear_to(byte colour) {
- window(1, 1, 80, 24);
- background = colour * 16;
- textattr = background;
- clrscr;
-}
-
-void centre(byte where, byte colour, string what) {
- textattr = background + colour;
- gotoxy(40 - length(what) / 2, where);
- output << what;
-}
-
-void load_file() {
- text t;
-
- mobylength = 0;
- /*$I-*/
- assign(t, "avalot.ini");
- reset(t);
- /*$I+*/
-
- if (ioresult != 0) { /* No file. */
- output << "SETUP: Avalot.ini not found!" << NL;
- exit(255);
- }
-
- while (! eof(t)) {
- mobylength += 1; /* Preincrement mode. */
- t >> (*moby)[mobylength] >> NL;
- }
-
- close(t);
-
-}
-
-string strhf(longint x) { /* assume x is +ve */
- const array<0, 16, char> hexdigits = "0123456789ABCDEF";
- string y;
- longint v;
-
- string strhf_result;
- v = x;
- y = "";
-
- while (v != 0) {
- y = string(hexdigits[v % longint(16) - 1]) + y;
- v = v / longint(16);
- }
-
- strhf_result = string('$') + y;
- return strhf_result;
-}
-
-void update_moby();
-
-static byte fv;
-
-static string field;
-
-
-static void get_field(string x) {
- if (pos(";", x) != 0) x = copy(x, 1, pos(";", x) - 1);
-
- if (pos("=", x) == 0)
- field = "";
- else {
- field = copy(x, 0, pos("=", x) - 1);
- while (field[1] == ' ') field = copy(field, 2, 255);
- }
-}
-
-
-
-static string yn1(boolean x) {
- string yn1_result;
- if (x) yn1_result = "Yes";
- else yn1_result = "No";
- return yn1_result;
-}
-
-
-
-static string kj(boolean x) {
- string kj_result;
- if (x) kj_result = "Keyboard";
- else kj_result = "Joystick";
- return kj_result;
-}
-
-
-
-static string put_logcodes() {
- byte q;
-
- string put_logcodes_result;
- q = (byte)(log_to_file) + (byte)(log_to_printer) * 2;
-
- switch (q) {
- case 0:
- put_logcodes_result = "No";
- break;
- case 1:
- put_logcodes_result = "Disk";
- break;
- case 2:
- put_logcodes_result = "Printer";
- break;
- }
- return put_logcodes_result;
-}
-
-
-
-static string card() {
- string card_result;
- switch (your_card) {
- case 0:
- card_result = "None";
- break;
- case 1:
- card_result = "SB";
- break;
- case 2:
- card_result = "SBPro";
- break;
- case 3:
- card_result = "SB16";
- break;
- case 4:
- card_result = "Pas";
- break;
- case 5:
- card_result = "PasPlus";
- break;
- case 6:
- card_result = "Pas16";
- break;
- case 7:
- card_result = "Aria";
- break;
- case 8:
- card_result = "WinSound";
- break;
- case 9:
- card_result = "Gravis";
- break;
- case 10:
- card_result = "DacLPT";
- break;
- case 11:
- card_result = "StereoDacs";
- break;
- case 12:
- card_result = "StereoOn1";
- break;
- case 13:
- card_result = "Speaker";
- break;
- }
- return card_result;
-}
-
-
-
-
-static void entail(string x) {
- string before, after;
-
- before = copy((*moby)[fv], 1, pos("=", (*moby)[fv]) - 1);
-
- if (pos(";", (*moby)[fv]) == 0) {
- (*moby)[fv] = before + '=' + x;
- } else {
- after = copy((*moby)[fv], pos(";", (*moby)[fv]), 255);
-
- (*moby)[fv] = before + '=' + x + ' ';
- while (length((*moby)[fv]) < 25)(*moby)[fv] = (*moby)[fv] + ' ';
-
- (*moby)[fv] = (*moby)[fv] + after;
- }
-}
-
-void update_moby() {
- option o;
-
-
-
-
-
- for (fv = 1; fv <= mobylength; fv ++) {
- get_field((*moby)[fv]);
-
- if (field != "") {
- o = string_2_option(field);
-
- if (o == _overrideegacheck) entail(yn1(override_ega));
- else if (o == _zoomystart) entail(yn1(skip_loading_screens));
- else if (o == _loadfirst) entail(load_particular);
- else if (o == _numlockhold) entail(yn1(force_numlock));
- else if (o == _usemouse) entail(yn1(ignore_mouse));
- else if (o == _controller) entail(kj(use_keyboard));
- else if (o == _logging) entail(put_logcodes());
- else if (o == _logfile) entail(log_filename);
- else
-
- /* joystick */
-
- if (o == _joystickinstalled) entail(yn1(has_a_joystick));
- else if (o == _joytop) entail(strf(jtop));
- else if (o == _joybottom) entail(strf(jbottom));
- else if (o == _joyleft) entail(strf(jleft));
- else if (o == _joyright) entail(strf(jright));
- else if (o == _joymidx) entail(strf(jmidx));
- else if (o == _joymidy) entail(strf(jmidy));
- else if (o == _joycentringfactor) entail(strf(jcentre));
- else if (o == _whichjoy) entail(strf(whichjoy));
- else
-
- /* sound */
-
- if (o == _quiet) entail(yn1(suppress_sfx));
- else if (o == _soundcard) entail(card());
- else if (o == _samplerate) entail(strf(samplerate));
- else if (o == _baseaddress) entail(strhf(sound_addr));
- else if (o == _irq) entail(strf(sound_irq));
- else if (o == _dma) entail(strf(sound_dma));
- else if (o == _keyboardclick) entail(yn1(wants_keyclick));
- else
-
- /* printer */
-
- if (o == _printer) entail(this_printer);
-
- }
- }
-}
-
-void save_file() {
- text t;
- word fv;
-
- textattr = 10;
- update_moby();
-
- clear_to(black);
- centre(14, 14, "Saving...");
-
- assign(t, "avalot.ini");
- rewrite(t);
-
- for (fv = 1; fv <= mobylength; fv ++) {
- t << (*moby)[fv] << NL;
- }
-
- close(t);
-}
-
-boolean detect() {
- word x, y, xo, yo;
- byte count;
-
- boolean detect_result;
- count = 0;
- if (joystickpresent()) {
- detect_result = true;
- return detect_result;
- }
- readjoya(xo, yo);
- do {
- if (count < 7) count += 1; /* Take advantage of "flutter" */
- if (count == 6) {
- centre(7, 1, "The Bios says you don't have a joystick. However, it's often wrong");
- centre(8, 1, "about such matters. So, do you? If you do, move joystick A to");
- centre(9, 1, "continue. If you don't, press any key to cancel.");
- }
- readjoya(x, y);
- } while (!((keypressed()) | (x != xo) || (y != yo)));
- detect_result = ~ keypressed();
- return detect_result;
-}
-
-void display() {
- gotoxy(28, 10);
- output << jleft << " ";
- gotoxy(28, 11);
- output << jright;
- gotoxy(28, 12);
- output << jtop << " ";
- gotoxy(28, 13);
- output << jbottom;
-}
-
-void readjoy(word &x, word &y) {
- if (whichjoy == 1) readjoya(x, y);
- else readjoyb(x, y);
-}
-
-void getmaxmin() {
- word x, y;
- char r;
-
- clear_to(green);
- centre(5, 1, "Rotate the joystick around in a circle, as far from the centre as it");
- centre(6, 1, "can get. Then press any key.");
- centre(7, 1, "Press Esc to cancel this part.");
- centre(16, 1, "(To reset these figures, set \"Do you have a joystick?\" to No, then Yes.)");
-
- gotoxy(20, 10);
- output << "Left :";
- gotoxy(20, 11);
- output << "Right :";
- gotoxy(20, 12);
- output << "Top :";
- gotoxy(20, 13);
- output << "Bottom:";
-
-
- if (jleft == 0) jleft = maxint;
- if (jtop == 0) jtop = maxint;
- do {
- readjoy(x, y);
- if (x < jleft) jleft = x;
- if (y < jtop) jtop = y;
- if (x > jright) jright = x;
- if (y > jbottom) jbottom = y;
- display();
- } while (!keypressed());
-
- do {
- r = readkey();
- } while (!(~ keypressed()));
- if (r == '\33') return;
-
- centre(19, 1, "Thank you. Now please centre your joystick and hit a button.");
- do {
- } while (!(buttona1() || buttona2()));
-
- readjoya(jmidx, jmidy);
-
- has_a_joystick = true;
-}
-
-void joysetup() {
- clear_to(green);
- if (! detect()) return;
- getmaxmin();
-}
-
-byte choose_one_of(byteset which);
-
-static shortint direction;
-
-
-static void move(shortint d) {
- direction = d;
- line = line + d;
-}
-
-
-
-static void highlight(word where, word how) {
- byte fv;
-
- where = where * 160 - 159;
- for (fv = 0; fv <= 79; fv ++)
- mem[0xb800 * where + fv * 2] = (mem[0xb800 * where + fv * 2] & 0xf) + how;
-}
-
-byte choose_one_of(byteset which)
-
-{
- const integer upwards = -1;
- const integer downwards = 1;
-
- boolean done;
- char r;
-
-
- byte choose_one_of_result;
- done = false;
- direction = 1;
- do {
- while (!(which.has(line))) {
- line = line + direction;
- if (line > 26) line = 1;
- if (line == 0) line = 26;
- }
-
- highlight(line, selected);
- r = readkey();
- highlight(line, background);
- switch (r) {
- case '\0':
- switch (readkey()) {
- case cup:
- move(upwards);
- break;
- case cdown:
- move(downwards);
- break;
- }
- break;
- case creturn:
- done = true;
- break;
- case cescape: {
- choose_one_of_result = 15; /* bottom line is always 15. */
- return choose_one_of_result;
- }
- break;
- }
-
- } while (!done);
-
- choose_one_of_result = line;
- return choose_one_of_result;
-}
-
-void bottom_bar();
-static void load_regi_info();
-
-
-static char decode1(char c) {
- byte b;
-
- char decode1_result;
- b = ord(c) - 32;
- decode1_result = chr(((b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4));
- return decode1_result;
-}
-
-
-
-static char decode2(char c) {
- char decode2_result;
- decode2_result = chr(((ord(c) & 0xf) << 2) + 0x43);
- return decode2_result;
-}
-
-
-
-static boolean checker(string proper, string check) {
- byte fv;
- boolean ok;
-
- boolean checker_result;
- ok = true;
- for (fv = 1; fv <= length(proper); fv ++)
- if ((ord(proper[fv]) & 0xf) != ((cardinal)(ord(check[fv]) - 0x43) >> 2))
- ok = false;
-
- checker_result = ok;
- return checker_result;
-}
-
-
-static void load_regi_info() {
- text t;
- byte fv;
- string x;
- byte namelen, numlen;
- string namechk, numchk;
-
-
- /*$I-*/
- assign(t, "register.dat");
- reset(t);
- /*$I+*/
-
- if (ioresult != 0) {
- registrant = "";
- return;
- }
-
- for (fv = 1; fv <= 53; fv ++) t >> NL;
- t >> x >> NL;
- close(t);
-
- namelen = 107 - ord(x[1]);
- numlen = 107 - ord(x[2]);
-
- registrant = copy(x, 3, namelen);
- reginum = copy(x, 4 + namelen, numlen);
- namechk = copy(x, 4 + namelen + numlen, namelen);
- numchk = copy(x, 4 + namelen + numlen + namelen, numlen);
-
- for (fv = 1; fv <= namelen; fv ++) registrant[fv] = decode1(registrant[fv]);
- for (fv = 1; fv <= numlen; fv ++) reginum[fv] = decode1(reginum[fv]);
-
- if ((! checker(registrant, namechk)) || (! checker(reginum, numchk))) {
- registrant = "\?\"!?";
- reginum = "(.";
- }
-}
-
-void bottom_bar() {
- load_regi_info();
- textattr = 96;
- background = 96;
- window(1, 1, 80, 25);
- gotoxy(1, 25);
- clreol;
- if (registrant == "")
- centre(25, 15, "Unregistered copy.");
- else
- centre(25, 15, string("Registered to ") + registrant + " (" + reginum + ").");
-}
-
-void new_menu() {
- line = 1; /* now that we've got a new menu. */
-}
-
-string two_answers(string ans_true, string ans_false, boolean which) {
- string two_answers_result;
- if (which)
- two_answers_result = string(" (") + ans_true + ')';
- else
- two_answers_result = string(" (") + ans_false + ')';
- return two_answers_result;
-}
-
-string yes_or_no(boolean which) {
- string yes_or_no_result;
- yes_or_no_result = two_answers("yes", "no", which);
- return yes_or_no_result;
-}
-
-string give_name(string what) {
- string give_name_result;
- if (what == "")
- give_name_result = " (none)";
- else
- give_name_result = string(" (\"") + what + "\")";
- return give_name_result;
-}
-
-string sound_card(byte which) {
- string sound_card_result;
- switch (which) {
- case 0:
- sound_card_result = "none";
- break;
- case 1:
- sound_card_result = "SoundBlaster";
- break;
- case 2:
- sound_card_result = "SoundBlaster Pro";
- break;
- case 3:
- sound_card_result = "SoundBlaster 16";
- break;
- case 4:
- sound_card_result = "Pro Audio Spectrum";
- break;
- case 5:
- sound_card_result = "Pro Audio Spectrum+";
- break;
- case 6:
- sound_card_result = "Pro Audio Spectrum 16";
- break;
- case 7:
- sound_card_result = "Aria";
- break;
- case 8:
- sound_card_result = "Windows Sound System or compatible";
- break;
- case 9:
- sound_card_result = "Gravis Ultrasound";
- break;
- case 10:
- sound_card_result = "DAC on LPT1";
- break;
- case 11:
- sound_card_result = "Stereo DACs on LPT1 and LPT2";
- break;
- case 12:
- sound_card_result = "Stereo-on-1 DAC on LPT";
- break;
- case 13:
- sound_card_result = "PC speaker";
- break;
- }
- return sound_card_result;
-}
-
-void get_str(string &n) {
- string x;
- char r;
-
- clear_to(black);
- centre(3, 3, "Enter the new value. Press Enter to accept, or Esc to cancel.");
- x = "";
-
- do {
-
- r = readkey();
-
- switch (r) {
- case cbackspace:
- if (x[0] > '\0') x[0] -= 1;
- break;
- case creturn: {
- n = x;
- return;
- }
- break;
- case cescape:
- return;
- break;
-
- default:
- if (x[0] < '\106') x = x + r;
- }
-
-
- centre(7, 2, string(' ') + x + ' ');
-
- } while (!false);
-
-}
-
-void get_num(longint &n) {
- string x;
- char r;
- integer e;
-
- clear_to(black);
- centre(3, 3, "Enter the new value. Press Enter to accept, or Esc to cancel.");
- centre(4, 3, "Precede with $ for a hex value.");
- x = "";
-
- do {
-
- r = upcase(readkey());
-
- switch (r) {
- case cbackspace:
- if (x[0] > '\0') x[0] -= 1;
- break;
- case creturn: {
- val(x, n, e);
- return;
- }
- break;
- case cescape:
- return;
- break;
-
- default:
- if ((x[0] < '\106') &&
- ((set::of(range('0', '9'), eos).has(r)) || ((x[1] == '$') && (set::of(range('A', 'F'), eos).has(r))) ||
- ((x == "") && (r == '$'))))
- x = x + r;
- }
-
-
- centre(7, 2, string(' ') + x + ' ');
-
- } while (!false);
-
-}
-
-void general_menu() {
- new_menu();
- do {
- clear_to(blue);
-
- centre(3, 15, "General Menu");
-
- centre(5, 7, string("Override EGA check?") + yes_or_no(override_ega));
- centre(6, 7, string("Skip loading screens?") + yes_or_no(skip_loading_screens));
- centre(7, 7, string("Load a particular file by default?") + give_name(load_particular));
- centre(8, 7, string("Force NumLock off?") + yes_or_no(force_numlock));
- /* centre( 9, 7,'Ignore the mouse?'+yes_or_no(ignore_mouse));*/
- centre(10, 7, string("Default controller?") + two_answers("keyboard", "joystick", use_keyboard));
- centre(12, 7, string("Log to printer?") + yes_or_no(log_to_printer));
- centre(13, 7, string("Log to file?") + yes_or_no(log_to_file));
- centre(14, 7, string("Filename to log to?") + give_name(log_filename));
-
- centre(15, 15, "Return to main menu.");
-
- switch (choose_one_of(set::of(5, 6, 7, 8,/*9,*/10, 12, 13, 14, 15, eos))) {
- case 5:
- override_ega = ! override_ega;
- break;
- case 6:
- skip_loading_screens = ! skip_loading_screens;
- break;
- case 7:
- get_str(load_particular);
- break;
- case 8:
- force_numlock = ! force_numlock;
- break;
- /* 9: ignore_mouse:=not ignore_mouse;*/
- case 10:
- use_keyboard = ! use_keyboard;
- break;
- case 12: {
- log_to_printer = ! log_to_printer;
- if (log_to_file && log_to_printer) log_to_file = false;
- }
- break;
- case 13: {
- log_to_file = ! log_to_file;
- if (log_to_file && log_to_printer) log_to_printer = false;
- }
- break;
- case 14:
- get_str(log_filename);
- break;
- case 15: {
- new_menu();
- return;
- }
- break;
- }
-
- } while (!false);
-}
-
-void joystick_menu() {
- new_menu();
- do {
- clear_to(green);
-
- centre(3, 15, "Joystick Menu");
-
- centre(5, 14, string("Do you have a joystick?") + yes_or_no(has_a_joystick));
- centre(6, 14, string("Which joystick to use? ") + chr(whichjoy + 48));
- centre(7, 14, "Select this one to set it up.");
-
- centre(15, 15, "Return to main menu");
-
- switch (choose_one_of(set::of(5, 6, 7, 15, eos))) {
- case 5: {
- has_a_joystick = ! has_a_joystick;
- if (! has_a_joystick) {
- jleft = 0;
- jright = 0;
- jtop = 0;
- jbottom = 0;
- }
- }
- break;
- case 6:
- whichjoy = 3 - whichjoy;
- break; /* Flips between 2 and 1. */
- case 7:
- joysetup();
- break;
- case 15: {
- new_menu();
- return;
- }
- break;
- }
-
- } while (!false);
-}
-
-void cycle(byte &what, byte upper_limit) {
- if (what == upper_limit)
- what = 0;
- else
- what += 1;
-}
-
-void sound_menu() {
- new_menu();
- do {
- clear_to(cyan);
-
- centre(3, 0, "Sound menu");
-
- centre(5, 0, string("Do you want to suppress sound effects?") + yes_or_no(suppress_sfx));
- centre(6, 0, string("Sound output device\? (") + sound_card(your_card) + ')');
- centre(7, 0, string("Sampling rate\? (") + strf(samplerate) + "Hz)");
- centre(8, 0, string("Base address\? (") + strhf(sound_addr) + " *hex*)");
- centre(9, 0, string("IRQ\? (") + strf(sound_irq) + ')');
- centre(10, 0, string("DMA\? (") + strf(sound_dma) + ')');
- centre(11, 0, string("Do you want keyclick?") + yes_or_no(wants_keyclick));
-
- centre(15, 15, "Return to main menu");
-
- centre(17, 1, "WARNING: Incorrect values of IRQ and DMA may damage your computer!");
- centre(18, 1, "Read AVALOT.INI for the correct values.");
-
- switch (choose_one_of(set::of(5, 6, 7, 8, 9, 10, 11, 15, eos))) {
- case 5:
- suppress_sfx = ! suppress_sfx;
- break;
- case 6:
- cycle(your_card, 13);
- break;
- case 7:
- get_num(samplerate);
- break;
- case 8:
- get_num(sound_addr);
- break;
- case 9:
- get_num(sound_irq);
- break;
- case 10:
- get_num(sound_dma);
- break;
- case 11:
- wants_keyclick = ! wants_keyclick;
- break;
- case 15: {
- new_menu();
- return;
- }
- break;
- }
-
- } while (!false);
-}
-
-void printer_menu() {
- byte fv;
- byteset chooseable_lines;
-
- new_menu();
-
- chooseable_lines = set::of(15, eos);
- for (fv = 1; fv <= num_printers; fv ++)
- chooseable_lines = chooseable_lines + set::of(fv + 8, eos);
-
- do {
- clear_to(red);
-
- centre(3, 15, "Printer menu");
-
- centre(5, 15, "Select one of the following printers:");
- centre(6, 15, string("The current choice is ") + this_printer + '.');
-
- for (fv = 1; fv <= num_printers; fv ++)
- centre(8 + fv, 14, printers[fv]);
-
- centre(15, 15, "Return to main menu");
-
- fv = choose_one_of(chooseable_lines);
-
- if (fv == 15) {
- new_menu();
- return;
- }
-
- this_printer = printers[fv - 8];
-
- } while (!false);
-}
-
-void regi_split(string x) {
- byte fv;
-
- regname[0] = chr(107 - ord(x[1]));
- chkname[0] = regname[0];
- regnum[0] = chr(107 - ord(x[2]));
- chknum[0] = chknum[0];
-
- move(x[3], regname[1], ord(regname[0]));
- for (fv = 1; fv <= length(regname); fv ++)
- regname[fv] = chr(abs(((ord(regname[fv]) - 33) - 177 * fv) % 94) + 33);
-}
-
-
-void registration_menu() {
- char r;
- text t, o;
- string x;
- byte fv;
-
- clear_to(black);
-
- centre(3, 15, "REGISTRATION");
- centre(5, 14, "Please insert the disk you were sent when you registered");
- centre(6, 14, "into any drive, and press its letter. For example, if the");
- centre(7, 14, "disk is in drive A:, press A.");
- centre(9, 14, "Press Esc to cancel this menu.");
-
- do {
- r = upcase(readkey());
- } while (!(set::of('\33', range('A', 'Z'), eos).has(r)));
- if (r == '\33') return;
-
- /*$I-*/
- assign(t, string(r) + ":\\REGISTER.DAT");
- reset(t);
- /*$I+*/
- if (ioresult != 0) {
- centre(17, 15, "But it isn't in that drive...");
- centre(19, 15, "Press any key.");
- r = readkey();
- return;
- }
- for (fv = 1; fv <= 54; fv ++) t >> x >> NL;
- regi_split(x);
-
- /* Copy the file... */
-
- assign(o, "register.dat");
- rewrite(o);
- reset(t);
-
- while (! eof(t)) {
- t >> x >> NL;
- o << x << NL;
- }
- close(t);
- close(o);
-
- centre(17, 15, "Done! Press any key...");
- bottom_bar();
- r = readkey();
-
-}
-
-void menu() {
- bottom_bar();
- new_menu();
- do {
- clear_to(black);
-
- centre(3, 15, "Avalot Setup - Main Menu");
-
- centre(5, 9, "General setup");
- centre(6, 10, "Joystick setup");
- centre(7, 11, "Sound setup");
- centre(8, 12, "Printer setup");
- centre(9, 14, "REGISTRATION setup");
-
- centre(15, 15, "--- EXIT SETUP ---");
-
- switch (choose_one_of(set::of(5, 6, 7, 8, 9, 15, eos))) {
- case 5:
- general_menu();
- break;
- case 6:
- joystick_menu();
- break;
- case 7:
- sound_menu();
- break;
- case 8:
- printer_menu();
- break;
- case 9:
- registration_menu();
- break;
- case 15: {
- new_menu();
- clear_to(lightgray);
- centre(3, 0, "Quit: would you like to save changes?");
- centre(5, 1, "Quit and SAVE changes.");
- centre(6, 1, "Quit and DON'T save changes.");
- centre(15, 0, "Cancel and return to the main menu.");
- switch (choose_one_of(set::of(5, 6, 15, eos))) {
- case 5: {
- save_file();
- return;
- }
- break;
- case 6:
- return;
- break;
- }
- new_menu();
- }
- break;
- }
-
- } while (!false);
-}
-
-void defaults() { /* Sets everything to its default value. */
- /* general */
-
- override_ega = false;
- skip_loading_screens = false;
- load_particular = "";
- force_numlock = true;
- ignore_mouse = false;
- use_keyboard = true;
- log_to_printer = false;
- log_to_file = false;
- log_filename = "avalot.log";
-
- /* joystick */
-
- has_a_joystick = false;
- /* jtop,jbottom,jleft,jright,jmidx,jmidy need no initialisation. */
-
- /* sound */
-
- suppress_sfx = false;
- your_card = 0; /* none */
- wants_keyclick = false;
-
- /* other stuff */
-
- registrant = "";
-
- num_printers = 0;
- this_printer = "??";
-}
-
-void parse_file();
-
-const integer parse_weird_field = 1;
-
-const integer parse_not_yes_or_no = 2;
-
-const integer parse_not_numeric = 3;
-
-const integer parse_not_kbd_or_joy = 4;
-
-const integer parse_weird_logcode = 5;
-
-const integer parse_weird_card = 6;
-
-
-static varying_string<80> this_, thiswas;
-
-static boolean error_found, ignoring;
-
-
-static void error(byte what) {
- textattr = 15;
- if (! error_found) {
- clrscr;
- textattr = 12;
- output << "SETUP: *** ERROR FOUND IN AVALOT.INI! ***" << NL;
- textattr = 15;
- }
- output << ' ';
- switch (what) {
- case parse_weird_field:
- output << "Unknown identifier on the left";
- break;
- case parse_not_yes_or_no:
- output << "Value on the right should be Yes or No";
- break;
- case parse_not_numeric:
- output << "Value on the right is not numeric";
- break;
- case parse_not_kbd_or_joy:
- output << "Value on the right should be Keyboard or Joystick";
- break;
- case parse_weird_logcode:
- output << "Value on the right should be No, Printer or Disk";
- break;
- case parse_weird_card:
- output << "Never heard of the card";
- break;
- }
- output << " in:" << NL;
- textattr = 10;
- output << thiswas << NL;
- error_found = true;
-}
-
-
-
-static boolean yesno(string x) {
- boolean yesno_result;
- if (x == "YES")
- yesno_result = true;
- else if (x == "NO")
- yesno_result = false;
- else {
- error(parse_not_yes_or_no);
- yesno_result = false;
- }
- return yesno_result;
-}
-
-
-
-static boolean kbdjoy(string x) {
- boolean kbdjoy_result;
- if (x == "KEYBOARD")
- kbdjoy_result = true;
- else if (x == "JOYSTICK")
- kbdjoy_result = false;
- else {
- error(parse_not_kbd_or_joy);
- kbdjoy_result = false;
- }
- return kbdjoy_result;
-}
-
-
-
-static word numeric(string x) {
- const varying_string<15> hexdigits = "0123456789ABCDEF";
- word answer;
- integer e;
-
- word numeric_result;
- if (x[1] == '$') {
- answer = 0;
- for (e = 2; e <= length(x); e ++) {
- answer = answer << 4;
- answer += pos(upcase(x[e]), hexdigits) - 1;
- }
- } else {
- val(x, answer, e);
- if (e != 0) error(parse_not_numeric);
- }
- numeric_result = answer;
- return numeric_result;
-}
-
-
-
-static void get_logcodes(string x) {
- if (x == "NO") {
- log_to_file = false;
- log_to_printer = false;
- } else if (x == "DISK") {
- log_to_file = true;
- log_to_printer = false;
- } else if (x == "PRINTER") {
- log_to_file = false;
- log_to_printer = true;
- } else
- error(parse_weird_logcode);
-}
-
-
-
-static void get_card(string x) {
- if (x == "NONE") your_card = 0;
- else if (x == "SB") your_card = 1;
- else if (x == "SBPRO") your_card = 2;
- else if (x == "SB16") your_card = 3;
- else if (x == "PAS") your_card = 4;
- else if (x == "PASPLUS") your_card = 5;
- else if (x == "PAS16") your_card = 6;
- else if (x == "ARIA") your_card = 7;
- else if (x == "WINSOUND") your_card = 8;
- else if (x == "GRAVIS") your_card = 9;
- else if (x == "DACLPT") your_card = 10;
- else if (x == "STEREODACS") your_card = 11;
- else if (x == "STEREOON1") your_card = 12;
- else if (x == "SPEAKER") your_card = 13;
- else
- error(parse_weird_card);
-}
-
-void parse_file() {
-
-
- word where;
- byte position;
- varying_string<80> field, data, pure_data;
- option o;
-
-
- error_found = false;
- ignoring = false;
-
- for (where = 1; where <= mobylength; where ++) {
- this_ = (*moby)[where];
- thiswas = this_;
-
- position = pos(";", this_);
- if (position > 0) this_ = copy(this_, 1, position - 1);
-
- if (this_ == "") continue_; /* Don't carry on if by now it's empty. */
-
- if (this_[1] == '[') {
- ignoring = !(trim_and_caps(this_) == "[END]");
-
- if (copy(this_, 1, 8) == "[printer") {
- num_printers += 1;
- printers[num_printers] = copy(this_, 10, length(this_) - 10);
- }
- }
-
- if (ignoring) continue_;
-
- position = pos("=", this_);
- field = trim_and_caps(copy(this_, 1, position - 1));
- if (field == "") continue_;
- pure_data = copy(this_, position + 1, 255);
- data = trim_and_caps(pure_data);
- o = string_2_option(field);
-
- /* general */
-
- if (o == _overrideegacheck) override_ega = yesno(data);
- else if (o == _zoomystart) skip_loading_screens = yesno(data);
- else if (o == _loadfirst) load_particular = data;
- else if (o == _numlockhold) force_numlock = yesno(data);
- else if (o == _usemouse) ignore_mouse = yesno(data);
- else if (o == _controller) use_keyboard = kbdjoy(data);
- else if (o == _logging) get_logcodes(data);
- else if (o == _logfile) log_filename = data;
- else
-
- /* joystick */
-
- if (o == _joystickinstalled) has_a_joystick = yesno(data);
- else if (o == _joytop) jtop = numeric(data);
- else if (o == _joybottom) jbottom = numeric(data);
- else if (o == _joyleft) jleft = numeric(data);
- else if (o == _joyright) jright = numeric(data);
- else if (o == _joymidx) jmidx = numeric(data);
- else if (o == _joymidy) jmidy = numeric(data);
- else if (o == _joycentringfactor) jcentre = numeric(data);
- else if (o == _whichjoy) whichjoy = numeric(data);
- else
-
- /* sound */
-
- if (o == _quiet) suppress_sfx = yesno(data);
- else if (o == _soundcard) get_card(data);
- else if (o == _samplerate) samplerate = numeric(data);
- else if (o == _baseaddress) sound_addr = numeric(data);
- else if (o == _irq) sound_irq = numeric(data);
- else if (o == _dma) sound_dma = numeric(data);
- else if (o == _keyboardclick) wants_keyclick = yesno(data);
- else
-
- /* printer */
-
- if (o == _printer) this_printer = pure_data;
- else
-
- /* others */
-
- error(parse_weird_field);
- }
-
- if (error_found) {
- textattr = 15;
- output << " Try and fix the above errors. As a last resort, try deleting or" << NL;
- output << " renaming AVALOT.INI, and the default values will be used. Good luck." << NL;
- exit(177);
- }
-}
-
-void clear_up() {
- window(1, 1, 80, 25);
- textattr = 31;
- clrscr;
- output << NL;
- output << "Enjoy the game..." << NL;
- output << NL;
- cga_cursor_on;
-}
-
-int main(int argc, const char *argv[]) {
- pio_initialize(argc, argv);
- cursor_off;
-
- moby = new mobytype; /* Allocate memory space */
-
- defaults();
-
- load_file();
-
- parse_file();
-
- menu();
-
- delete moby; /* Deallocate memory space again */
-
- clear_up();
- return EXIT_SUCCESS;
-}
-
-} // End of namespace Avalanche. \ No newline at end of file