/* AppServerServer 1.0 by Juha Tuominen 11-Jan-92

	NOTE:	If you're a fanatic noise module listener don't use
			this program. The detecting part is quite simple and
			it won't detect noise modules if you've changed modules' file
			names. But who listens noise modules anyways? :-) */

#include <exec/types.h>
#include <libraries/dos.h>
#include <dos/dostags.h>
#include <libraries/dosextens.h>
#include <proto/dos.h>
#include <stdio.h>
#include <stdlib.h>

char	picviewer[81]="c:show",
		textviewer[81]="c:more",
		sampleplayer[81]="c:play",
		defa[81]="c:more",
		itextviewer[81]="sys:system/notepad",
		gifviewer[81]="c:virtgif",
		modplayer[81]="c:modplayer",
		lhunarc[81]="c:lhunarc",
		unzip[81]="c:unzip",
		unzoo[81]="c:unzoo",
		animplayer[81]="c:rtap";


BOOL	readconfig(void);
void	lowercase(register char *dst,register char *src);


BOOL readconfig(void)
{	FILE	*fp;
	char	thisline[81],nextline[81];

	if(fp=fopen("s:ass-config","r"))
	{	while(!feof(fp))
		{	fgets(thisline,80,fp);
			if(thisline[0]=='%')
			{	fgets(nextline,80,fp);
				nextline[strlen(nextline)-1]=0;
				if(!strncmp("%picviewer:",thisline,11))		strcpy(picviewer,nextline);
				if(!strncmp("%textviewer:",thisline,12))	strcpy(textviewer,nextline);
				if(!strncmp("%itextviewer:",thisline,13))	strcpy(itextviewer,nextline);
				if(!strncmp("%sampleplayer:",thisline,14))	strcpy(sampleplayer,nextline);
				if(!strncmp("%gifviewer:",thisline,11))		strcpy(gifviewer,nextline);
				if(!strncmp("%default:",thisline,9))		strcpy(defa,nextline);
				if(!strncmp("%modplayer:",thisline,11))		strcpy(modplayer,nextline);
				if(!strncmp("%lhunarc:",thisline,9))		strcpy(lhunarc,nextline);
				if(!strncmp("%unzip:",thisline,7))			strcpy(unzip,nextline);
				if(!strncmp("%unzoo:",thisline,7))			strcpy(unzoo,nextline);
				if(!strncmp("%animplayer:",thisline,12))	strcpy(animplayer,nextline);
			}
		}
		fclose(fp);
		return TRUE;
	}

	return FALSE;
}

void lowercase(register char *dst,register char *src)
{	while(*dst++=tolower(*src++));
}

void main(int argc, char *argv[])
{	FILE	*fp;
	UBYTE	buffer[81];
	LONG	err=0;
	BOOL	i=FALSE;

	struct TagItem	taglist[]={
		{SYS_Input,NULL},
		{SYS_Output,NULL},
		{0,}
	};

	if(readconfig())
	{	if(argc>1)
		{	if(fp=fopen(argv[1],"rb"))
			{	fgets(buffer,12,fp);
				fclose(fp);
				if(strncmp(buffer,"FORM",4))
				{	if(!strncmp(buffer,"GIF87",5))
						sprintf(buffer,"%s %s",gifviewer,argv[1]);
					else
					{	if(!strncmp(buffer+2,"-lh",3))
							sprintf(buffer,"%s %s",lhunarc,argv[1]);
						else
						{	if(!strncmp(buffer,"ZOO",3))
								sprintf(buffer,"%s %s",unzoo,argv[1]);
							else
							{	if(!strncmp(buffer,"PK",2))
									sprintf(buffer,"%s %s",unzip,argv[1]);
								else
								{	while(err++<80 || !i)
									{	if(buffer[err]>127)
											i=TRUE;
									}
									if(!i)
										sprintf(buffer,"%s %s",textviewer,argv[1]);
									else
									{	err=strlen(argv[1]);
										lowercase(argv[1],argv[1]);
										for(i=0;i<=err;i++)
											buffer[i]=tolower(buffer[i]);
										if(!strncmp(buffer,argv[1]+err-strlen(buffer),strlen(buffer)))
											sprintf(buffer,"%s %s",modplayer,argv[1]);
										else
											sprintf(buffer,"%s %s",defa,argv[1]);
										
									}
								}
							}
						}
					}
				}
				else
				{	if(!strncmp(buffer+8,"ILBM",4))
						sprintf(buffer,"%s %s",picviewer,argv[1]);
					else
					{	if(!strncmp(buffer+8,"WORD",4))
							sprintf(buffer,"%s %s",itextviewer,argv[1]);
						else
						{	if(!strncmp(buffer+8,"8SVX",4))
								sprintf(buffer,"%s %s",sampleplayer,argv[1]);
							else
							{	if(!strncmp(buffer+8,"ANIM",4))
									sprintf(buffer,"%s %s",animplayer,argv[1]);
							}
						}
					}
				}
				err=System(buffer,taglist);
			}
		}
	}
}
