/* 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. */ /* ÛßÜ ÛßÜ ÜßßÜ ßÛß Ûßß Üß ßÛß ÜßÛßÜ ßÛß ÛÜ Û ÜÛßß ßÛß ÛßÜ Ûßß Û Ûß ÛÛ Û Û Ü Û Ûßß ßÜ Û Û Û Û Û Û ÛÜÛ ßßßÜ Û ÛÛ Ûßß Û ß ß ß ßß ßß ßßß ß ß ß ß ß ßßß ß ßß ßßß ß ß ß ßßß ßßß INCLINE The command-line parser. */ #define __incline_implementation__ #include "oldincln.h" #include "gyro.h" #include "logger.h" namespace Avalanche { const integer bug_twonames = 255; const integer bug_pandl = 254; const integer bug_weirdswitch = 253; const integer bug_invalidini = 252; const integer bug_notyesorno = 251; byte fv; char t; string bugline; boolean usingp,usingl; boolean zoomy,numlockhold; boolean filename_specified; string inihead,initail; /* For reading the .INI file. */ void linebug(byte which) {; output << "AVALOT : "; switch (which) { case bug_twonames : output << "You may only specify ONE filename." << NL; break; case bug_pandl : output << "/p and /l cannot be used together." << NL; break; case bug_weirdswitch : output << "Unknown switch (\"" << bugline << "\"). Type AVALOT /? for a list of switches." << NL; break; case bug_invalidini: output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL; break; case bug_notyesorno: output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL; break; } exit(which); } void syntax() {; assign(output,""); rewrite(output); output << NL; output << string("Lord Avalot d'Argent\n\n(c) ")+copyright+" Mark, Mike and Thomas Thurman." << NL; output << string("~~~~~~~~~~~~~~~~~~~~~\n\n")+vernum << NL; output << NL; output << "Syntax:" << NL; output << "\n/?\ndisplays this screen," << NL; output << "\n/O\noverrides EGA check," << NL; output << "\n/L\nlogs progress to , default AVVY.LOG," << NL; output << "\n/P\nlogs with Epson codes to , default PRN," << NL; output << "\n/Q\ncancels sound effects," << NL; output << "\n/S\ndisables Soundblaster," << NL; output << "\n/Z\ngoes straight into the game." << NL; output << NL; output << "\n\n\n\n\n\n\n... Have fun!" << NL; exit(177); } void upstr(string& x) { byte fv; ; for( fv=1; fv <= length(x); fv ++) x[fv]=upcase(x[fv]); } boolean yesno() {boolean yesno_result; ; if (initail=="YES") yesno_result=true; else if (initail=="NO") yesno_result=false; else linebug(bug_notyesorno); return yesno_result; } void ini_parse() {; upstr(inihead); upstr(initail); if (inihead=="QUIET") soundfx=! yesno(); else if (inihead=="ZOOMYSTART") zoomy=yesno(); else if (inihead=="NUMLOCKHOLD") numlockhold=yesno(); else if (inihead=="LOADFIRST") filetoload=initail; else if (inihead=="OVERRIDEEGACHECK") cl_override=yesno(); else if (inihead=="KEYBOARDCLICK") keyboardclick=yesno(); } void strip_ini() { byte fv; ; if (inihead=="") return; /* Firstly, delete any comments. */ fv=pos(";",inihead); if (fv>0) Delete(inihead,fv,255); /* Lose the whitespace... */ while (inihead[length(inihead)]==' ') inihead[0] -= 1; while ((inihead!="") && (inihead[1]==' ')) Delete(inihead,1,1); /* It's possible that now we'll end up with a blank line. */ if ((inihead=="") || (inihead[1]=='[')) return; fv=pos("=",inihead); if (fv==0) {; /* No "="! Weird! */ bugline=inihead; linebug(bug_invalidini); } initail=copy(inihead,fv+1,255); inihead[0]=chr(fv-1); } void load_ini() { text ini; ; assign(ini,"AVALOT.INI"); reset(ini); while (! eof(ini)) {; ini >> inihead >> NL; strip_ini(); if (inihead!="") ini_parse(); } close(ini); } void parse(string x); static string arg; static string getarg(string otherwis) {string getarg_result; ; if (arg=="") getarg_result=otherwis; else getarg_result=""; return getarg_result; } void parse(string x) {; switch (x[1]) { case '/':case '-': {; arg=copy(x,3,255); switch (upcase(x[2])) { case '?': syntax(); break; case 'O': cl_override=true; break; case 'L': if (! usingp) {; log_setup(getarg("avvy.log"),false); usingl=true; } else {; close(logfile); linebug(bug_pandl); } break; case 'P': if (! usingl) {; log_setup(getarg("prn"),true); usingp=true; } else {; close(logfile); linebug(bug_pandl); } break; case 'Q': soundfx=false; break; case 'Z': zoomy=true; break; case 'K': keyboardclick=true; break; case 'D': demo=true; break; default: {; bugline=x; linebug(bug_weirdswitch); } } } break; case '*': {; inihead=copy(x,2,255); strip_ini(); if (inihead!="") ini_parse(); } break; default: {; /* filename */ if (filename_specified) linebug(bug_twonames); else filetoload=x; filename_specified=true; } } } void not_through_bootstrap() { output << "Avalot must be loaded through the bootstrap." << NL; exit(0); } void get_storage_addr() { integer e; val(paramstr(2),storage_seg,e); if (e!=0) not_through_bootstrap(); val(paramstr(3),storage_ofs,e); if (e!=0) not_through_bootstrap(); skellern=storage_ofs+1; } class unit_incline_initialize { public: unit_incline_initialize(); }; static unit_incline_initialize incline_constructor; unit_incline_initialize::unit_incline_initialize() {; filetoload=""; usingl=false; usingp=false; logging=false; cl_override=false; soundfx=true; zoomy=false; numlockhold=false; filename_specified=false; keyboardclick=false; load_ini(); if ((paramcount<3) || ((paramstr(1)!="Go") && (paramstr(1)!="et"))) not_through_bootstrap(); reloaded=paramstr(1)=="et"; get_storage_addr(); for( fv=4; fv <= paramcount; fv ++) parse(paramstr(fv)); } } // End of namespace Avalanche.