/*

  Select Mode by Dominic Clifton - Aka Hydra/cP!

  Defines a screenmode for HBBS to use!

*/

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <time.h>

#include <exec/types.h>
#include <exec/memory.h>

#include <libraries/reqtools.h>
#include <dos/dos.h>

#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/reqtools_protos.h>

#include <HBBS/release.h>
char *versionstr="$VER: SelectMode "RELEASE_STR;

struct ReqToolsBase *ReqToolsBase;

UBYTE *FILE_SCRMODEPREFS           = "HBBS:System/Data/CtrlScrPrefs.CFG";

static VOID cleanup( void )
{
  if (ReqToolsBase)
    CloseLibrary ((struct Library *)ReqToolsBase);
}

static VOID init( void )
{
  if (!(ReqToolsBase = (struct ReqToolsBase *) OpenLibrary (REQTOOLSNAME, REQTOOLSVERSION)))
  {
    cleanup();
  }

}

void PickScreen( void )
{
  struct rtScreenModeRequester *scrmodereq;
  char outstr[255];

  BPTR CfgFile=NULL;

  if (scrmodereq = rtAllocRequestA (RT_SCREENMODEREQ, NULL))
  {
    if (rtScreenModeRequest (scrmodereq, "Select Screen mode:",RTSC_Flags,SCREQF_GUIMODES | SCREQF_DEPTHGAD | SCREQF_SIZEGADS,
                                                               RTSC_MinHeight,200,
                                                               RTSC_MinWidth,640,
                                                               RTSC_MinDepth,2,
                                                               RTSC_MaxDepth,8,

                                                               TAG_END))
    {

      if (CfgFile=Open(FILE_SCRMODEPREFS,MODE_NEWFILE))
      {
        sprintf(outstr,"ScrModeID=%ld\n",scrmodereq->DisplayID);
        Write(CfgFile,outstr,strlen(outstr));
        sprintf(outstr,"ScrHeight=%ld\n",scrmodereq->DisplayHeight);
        Write(CfgFile,outstr,strlen(outstr));
        sprintf(outstr,"ScrWidth=%ld\n",scrmodereq->DisplayWidth);
        Write(CfgFile,outstr,strlen(outstr));
        sprintf(outstr,"ScrDepth=%ld\n",scrmodereq->DisplayDepth);
        Write(CfgFile,outstr,strlen(outstr));

        Close(CfgFile);
      }
      else
      {
        rtEZRequestTags("Error Saving Screenmode Prefs!","Doh!",NULL,NULL,RTGS_Flags, GSREQF_CENTERTEXT,TAG_END);
      }
    }
    rtFreeRequest(scrmodereq);
  }
}

void main( void )
{
  init();

  PickScreen();

  cleanup();
}
