/* main - karl's smus loader */

/* Copyright (C) 1989 by Karl Lehenbauer, All Rights Reserved */

#include <exec/types.h>
#include <exec/memory.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <functions.h>
#include <devices/audio.h>
#include <workbench/workbench.h>
#include <workbench/startup.h>
#include <fcntl.h>
#include <stdio.h>

#include "smus_requests.h"


extern struct MsgPort *player_request_port;

#define YES 1
#define NO 0

main(argc,argv)
int argc;
char *argv[];
{
	int songnameindex;
	int i;
	void *songptr;
	void *LoadSong();

	printf("Lehenbauer SMUS player V2.2 beta\nCopyright 1989 Karl Lehenbauer, All Rights Reserved\n");

	SMUSInitServer();

	docommands();

	SMUSTerminateServer();

	cleanup();
	exit(0);
}

docommands()
{
	char cmd[80];
	int Running = YES;
	void *songptr = NULL;

	while (Running)
	{
		printf("command (a q l L p i t u f A z P C s S ?): ");
		if (gets(cmd) == NULL)
		{
			printf("EOF -- goodbye\n");
			Running = NO;
		}

		switch(cmd[0])
		{
			case 'a':
				if (songptr)
					AttachSamples(songptr);
				else
					printf("no current song\n");
				break;

			case 'q':
				Running = NO;
				break;

			case 'l':
				songptr = LoadSong(&cmd[2]);
				break;

			case 'L':
				LoadCATArchive(&cmd[2]);
				break;

			case 'p':
				if (songptr)
					PlaySong(songptr);
				else
					printf("no current song\n");
				break;

			case 'i':
				if (songptr)
					StartSong(songptr);
				else
					printf("no current song\n");
				break;

			case 'u':
				if (songptr)
				{
					UnloadSong(songptr);
					songptr = NULL;
				}
				else
					printf("no current song\n");
				break;

			case 't':
				TerminateServerWhenFinished();
				Running = NO;
				break;

			case 'f':
				StartFadeOut();
				break;

			case 'A':
				AbortSongImmediately();
				break;

			case 'z':
				WaitTilSongFinishes();
				break;

			case 'P':
				PurgeUntaggedSamples();
				break;

			case 'C':
				ClearSampleTags();
				break;

			case 's':
				SetSampleTag(&cmd[2]);
				break;

			case 'S':
				if (songptr)
					SetSampleTagsOfSong(songptr);
				else
					printf("no current song\n");
				break;

			case '?':
			default:
				printf("a       attach samples for current song\n");
				printf("f       start fade-out\n");
				printf("i       start song (play with immediate return)\n");
				printf("l file  load song 'file'\n");
				printf("s name	set sample tag of named sample\n");
				printf("t       terminate server when song is finished\n");
				printf("u       unload current song\n");
				printf("L file  load samples from IFF CAT 'file'\n");
				printf("p       play current song\n");
				printf("q       quit, terminating servers\n");
				printf("z       wait 'til song finishes\n");
				printf("\n");
				printf("A       abort song immediately\n");
				printf("C       clear all sample tags\n");
				printf("P       purge all untagged samples\n");
				printf("S       set tags for samples of current song\n");
				break;
		}
	}
}




