aboutsummaryrefslogtreecommitdiff
path: root/morphos/morphos_start.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'morphos/morphos_start.cpp')
-rw-r--r--morphos/morphos_start.cpp359
1 files changed, 0 insertions, 359 deletions
diff --git a/morphos/morphos_start.cpp b/morphos/morphos_start.cpp
deleted file mode 100644
index d3305cbe14..0000000000
--- a/morphos/morphos_start.cpp
+++ /dev/null
@@ -1,359 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2002 Rüdiger Hanke (MorphOS port)
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * MorphOS startup handling
- *
- * $Header$
- *
- */
-
-#include <exec/types.h>
-#include <exec/devices.h>
-#include <exec/memory.h>
-#include <exec/libraries.h>
-#include <workbench/startup.h>
-#include <workbench/workbench.h>
-
-#include <proto/exec.h>
-#include <proto/dos.h>
-#include <proto/cdda.h>
-#include <proto/cybergraphics.h>
-#include <proto/icon.h>
-
-#include "stdafx.h"
-#include "scumm.h"
-#include "morphos.h"
-#include "morphos_scaler.h"
-
-extern "C" WBStartup *_WBenchMsg;
-
-// For command line parsing
-static STRPTR usageTemplate = "STORY/A,DATAPATH/K,WBWINDOW/S,SCALER/K,AMIGA/S,MIDIUNIT/K/N,MUSIC/K,MUSICVOL/K/N,SFXVOL/K/N,TEMPO/K/N,TALKSPEED/K/N,NOSUBTITLES=NST/S";
-typedef enum { USG_STORY = 0, USG_DATAPATH, USG_WBWINDOW, USG_SCALER, USG_AMIGA, USG_MIDIUNIT, USG_MUSIC, USG_MUSICVOL, USG_SFXVOL, USG_TEMPO, USG_TALKSPEED, USG_NOSUBTITLES } usageFields;
-static LONG args[13] = { (ULONG) NULL, (ULONG) NULL, FALSE, (ULONG) NULL, false, (ULONG) NULL, (ULONG) NULL, (ULONG) NULL, (ULONG) NULL, (ULONG) NULL, (ULONG) NULL, false };
-static RDArgs *ScummArgs = NULL;
-
-static char*ScummStory = NULL;
-static char*ScummPath = NULL;
- STRPTR ScummMusicDriver = NULL;
- LONG ScummMidiUnit = 0;
-static LONG ScummMidiVolume = 0;
-static LONG ScummMidiTempo = 0;
-static LONG ScummSfxVolume = 0;
-static LONG ScummTalkSpeed = 0;
-static SCALERTYPE ScummGfxScaler = ST_INVALID;
-
-static BPTR OrigDirLock = 0;
-
-Library *CDDABase = NULL;
-Device *TimerBase = NULL;
-
-OSystem_MorphOS *TheSystem = NULL;
-
-OSystem *OSystem_MorphOS_create(int game_id, int gfx_mode, bool full_screen)
-{
- if (TheSystem)
- delete TheSystem;
-
- SCALERTYPE gfx_scaler = ST_NONE;
- switch (gfx_mode)
- {
- case GFX_DOUBLESIZE:
- gfx_scaler = ST_POINT;
- break;
-
- case GFX_SUPEREAGLE:
- gfx_scaler = ST_SUPEREAGLE;
- break;
-
- case GFX_SUPER2XSAI:
- gfx_scaler = ST_SUPER2XSAI;
- break;
- }
-
- TheSystem = OSystem_MorphOS::create(game_id, gfx_scaler, full_screen);
- return TheSystem;
-}
-
-void close_resources()
-{
- if (TheSystem)
- delete TheSystem;
-
- if (g_scumm)
- delete g_scumm;
-
- if (ScummPath)
- FreeVec(ScummPath);
-
- if (ScummStory)
- FreeVec(ScummStory);
-
- if (ScummArgs)
- FreeArgs(ScummArgs);
-
- if (OrigDirLock)
- CurrentDir(OrigDirLock);
-
- if (CDDABase)
- CloseLibrary(CDDABase);
-}
-
-static STRPTR FindMusicDriver(STRPTR argval)
-{
- if (!stricmp(argval, "off")) return "-enull";
- if (!stricmp(argval, "midi")) return "-eamidi";
- if (!stricmp(argval, "midiemu")) return "-emidiemu";
- if (!stricmp(argval, "adlib")) return "-eadlib";
-
- error("No such music driver supported. Possible values are off, Midi, MidiEmu and Adlib.");
- return NULL;
-}
-
-static void ReadToolTypes(WBArg *OfFile)
-{
- DiskObject *dobj;
- char *ToolValue;
- char IconPath[256];
-
- NameFromLock(OfFile->wa_Lock, IconPath, 256);
- AddPart(IconPath, OfFile->wa_Name, 256);
-
- dobj = GetDiskObject(IconPath);
- if (dobj == NULL)
- return;
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "STORY"))
- {
- if (ScummStory)
- FreeVec(ScummStory);
- ScummStory = (char *) AllocVec(strlen(ToolValue)+1, MEMF_PUBLIC);
- strcpy(ScummStory, ToolValue);
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "DATAPATH"))
- {
- if (ScummPath)
- FreeVec(ScummPath);
- ScummPath = (char *) AllocVec(strlen(ToolValue)+4, MEMF_PUBLIC);
- strcpy(ScummPath, "-p");
- strcat(ScummPath, ToolValue);
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "WBWINDOW"))
- {
- if (MatchToolValue(ToolValue, "YES"))
- args[USG_WBWINDOW] = TRUE;
- else if (MatchToolValue(ToolValue, "NO"))
- args[USG_WBWINDOW] = FALSE;
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "SCALER"))
- {
- if ((ScummGfxScaler = MorphOSScaler::FindByName(ToolValue)) == ST_INVALID)
- {
- FreeDiskObject(dobj);
- exit(1);
- }
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "MUSIC"))
- {
- if (!(ScummMusicDriver = FindMusicDriver(ToolValue)))
- {
- FreeDiskObject(dobj);
- exit(1);
- }
- args[USG_MUSIC] = (ULONG) &ScummMusicDriver;
- }
-
- if( ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "MIDIUNIT"))
- ScummMidiUnit = atoi(ToolValue);
-
- if( ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "MUSICVOL"))
- {
- int vol = atoi(ToolValue);
- if (vol >= 0 && vol <= 100)
- {
- ScummMidiVolume = vol;
- args[USG_MUSICVOL] = (ULONG) &ScummMidiVolume;
- }
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "SFXVOL"))
- {
- int vol = atoi(ToolValue);
- if (vol >= 0 && vol <= 255)
- {
- ScummSfxVolume = vol;
- args[USG_SFXVOL] = (ULONG) &ScummSfxVolume;
- }
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "TEMPO"))
- {
- ScummMidiTempo = atoi(ToolValue);
- args[USG_TEMPO] = (ULONG) &ScummMidiTempo;
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "TALKSPEED"))
- {
- ScummTalkSpeed = atoi(ToolValue);
- args[USG_TALKSPEED] = (ULONG) &ScummMidiTempo;
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "SUBTITLES"))
- {
- if (MatchToolValue(ToolValue, "YES"))
- args[USG_NOSUBTITLES] = FALSE;
- else if (MatchToolValue(ToolValue, "NO"))
- args[USG_NOSUBTITLES] = TRUE;
- }
-
- if (ToolValue = (char *) FindToolType(dobj->do_ToolTypes, "AMIGA"))
- {
- if (MatchToolValue(ToolValue, "YES"))
- args[USG_AMIGA] = FALSE;
- else if (MatchToolValue(ToolValue, "NO"))
- args[USG_AMIGA] = TRUE;
- }
-
- FreeDiskObject(dobj);
-}
-
-#undef main
-
-int main()
-{
- int delta;
- int last_time, new_time;
- char *argv[20];
- char musicvol[6], sfxvol[6], talkspeed[12], tempo[12], scaler[14];
- int argc = 0;
-
- InitSemaphore(&ScummSoundThreadRunning);
- InitSemaphore(&ScummMusicThreadRunning);
-
- g_scumm = NULL;
- atexit(&close_resources);
-
- if (_WBenchMsg == NULL)
- {
- /* Parse the command line here */
- ScummArgs = ReadArgs(usageTemplate, args, NULL);
- if (ScummArgs == NULL)
- {
- puts("Error in command line - type \"ScummVM ?\" for usage.");
- exit(1);
- }
-
- if (args[USG_STORY])
- {
- ScummStory = (char *) AllocVec(strlen((char *) args[USG_STORY])+1, MEMF_PUBLIC);
- strcpy(ScummStory, (char *) args[USG_STORY]);
- }
-
- if (args[USG_DATAPATH])
- {
- ScummPath = (char *) AllocVec(strlen((char *) args[USG_DATAPATH])+4, MEMF_PUBLIC);
- strcpy(ScummPath, "-p");
- strcat(ScummPath, (char *) args[USG_DATAPATH]);
- }
-
- if (args[USG_SCALER])
- {
- if ((ScummGfxScaler = MorphOSScaler::FindByName((char *) args[USG_SCALER])) == ST_INVALID)
- exit(1);
- }
-
- if (args[USG_MUSIC])
- {
- if (!(ScummMusicDriver = FindMusicDriver((char *) args[USG_MUSIC])))
- exit(1);
- }
-
- if (args[USG_MIDIUNIT])
- ScummMidiUnit = *((LONG *) args[USG_MIDIUNIT]);
-
- if (args[USG_TEMPO])
- ScummMidiTempo = *((LONG *) args[USG_TEMPO]);
-
- if (args[USG_MUSICVOL])
- ScummMidiVolume = *((LONG *) args[USG_MUSICVOL]);
-
- if (args[USG_SFXVOL])
- ScummSfxVolume = *((LONG *) args[USG_SFXVOL]);
-
- if (args[USG_TALKSPEED])
- ScummTalkSpeed = *((LONG *) args[USG_TALKSPEED]);
- }
- else
- {
- /* We've been started from Workbench */
- ReadToolTypes(&_WBenchMsg->sm_ArgList[0]);
- if (_WBenchMsg->sm_NumArgs > 1)
- {
- ReadToolTypes(&_WBenchMsg->sm_ArgList[1]);
- OrigDirLock = CurrentDir(_WBenchMsg->sm_ArgList[1].wa_Lock);
- }
- }
-
- if (ScummPath)
- {
- char c = ScummPath[strlen(ScummPath)-1];
- if (c != '/' && c != ':')
- strcat(ScummPath, "/");
- }
-
- argv[argc++] = "ScummVM";
- if (ScummPath) argv[argc++] = ScummPath;
- if (!args[ USG_WBWINDOW ]) argv[argc++] = "-f";
- if (args[ USG_NOSUBTITLES ]) argv[argc++] = "-n";
- if (args[ USG_AMIGA ]) argv[argc++] = "-a";
- if (args[ USG_MUSIC ]) argv[argc++] = ScummMusicDriver;
- if (ScummGfxScaler != ST_INVALID)
- {
- sprintf(scaler, "-g%s", MorphOSScaler::GetParamName(ScummGfxScaler));
- argv[argc++] = scaler;
- }
- else
- argv[argc++] = "-gsuper2xsai";
- if (args[USG_MUSICVOL] && ScummMidiVolume >= 0 && ScummMidiVolume <= 100)
- {
- sprintf(musicvol, "-m%d", ScummMidiVolume);
- argv[argc++] = musicvol;
- }
- if (args[USG_SFXVOL] && ScummSfxVolume >= 0 && ScummSfxVolume <= 255)
- {
- sprintf(sfxvol, "-s%d", ScummSfxVolume);
- argv[argc++] = sfxvol;
- }
- if (args[USG_TEMPO] && ScummMidiTempo > 0)
- {
- sprintf(tempo, "-t%lx", ScummMidiTempo);
- argv[argc++] = tempo;
- }
- if (args[USG_TALKSPEED] && ScummTalkSpeed >= 0 && ScummTalkSpeed <= 255)
- {
- sprintf(talkspeed, "-y%d", ScummTalkSpeed);
- argv[argc++] = talkspeed;
- }
- argv[argc++] = ScummStory;
-
- return morphos_main(argc, argv);
-}
-