#include "struct.c"

#define Fail(s) Printf("%s File %s Line %ld\n", s, __FILE__, __LINE__);

char   Version[]  = "$VER: Shanghai 1.0 "__DATE__" "__TIME__;
char   Template[] = "PUBSCREEN/K,DELAY/K/N,COMMAND/F";

#define ArgPub 0
#define ArgDel 1
#define ArgCmd 2
#define NumArg 3


void __saveds main(void)
{
  struct DosLibrary    *DOSBase;
  struct ExecBase      *SysBase;
  struct IntuitionBase *IntuitionBase;

  struct RDArgs *rd;

  ULONG          ArgArray[NumArg];
  char           PubName[MAXPUBSCREENNAME+1], DefaultName[MAXPUBSCREENNAME+1];
  struct Screen *PubScreen;
  UWORD          OldMode;
  LONG           delay = 0;
 
  SysBase = (*((struct ExecBase **)4));
  if (DOSBase = (struct DosLibrary *)OpenLibrary("dos.library", 37))
    {
      if (IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 37))
	{
	  ArgArray[ArgPub] = NULL;
	  ArgArray[ArgCmd] = NULL;
	  ArgArray[ArgDel] = 0;

	  rd = ReadArgs(Template, ArgArray, NULL);
	  if (ArgArray[ArgDel]) delay = *(LONG *)ArgArray[ArgDel];

	  GetDefaultPubScreen(DefaultName);
	  if (!ArgArray[ArgPub]) strcpy(PubName, DefaultName);
	  else strcpy(PubName, (char *)ArgArray[ArgPub]);

	  if (!(PubScreen = LockPubScreen(PubName)))
	      {
		strcpy(PubName, DefaultName);
		PubScreen = LockPubScreen(PubName);
	      }
	  
	  Printf("Name : %s Delay : %ld Cmd : %s\n", PubName, delay, ArgArray[ArgCmd]);

	  OldMode = SetPubScreenModes(SHANGHAI);
	  SetDefaultPubScreen(PubName);

	  SystemTags((char *)ArgArray[ArgCmd],
		     SYS_UserShell, TRUE,
		     TAG_END);

	  Delay(delay);

	  SetPubScreenModes(OldMode);
	  SetDefaultPubScreen(DefaultName);

	  if (PubScreen) UnlockPubScreen(PubName, PubScreen);
	  if (rd) FreeArgs(rd);

	  CloseLibrary(IntuitionBase);
	}
      CloseLibrary(DOSBase);
    }
}

