/*
 *  Source machine generated by GadToolsBox V1.4
 *  which is (c) Copyright 1991,92 Jaba Development
 */

#define ASL_V38_NAME_ONLY
#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <libraries/asl.h>
#include <clib/asl_protos.h>
#include <clib/exec_protos.h>
#include <string.h>
#include <stdio.h>

#include <pragmas/exec_lib.h>
#include <pragmas/intuition_lib.h>
#include <pragmas/gadtools_lib.h>
#include <pragmas/graphics_lib.h>
#include <pragmas/utility_lib.h>

#include "StarLex.h"
#include "FleetWin.c"

struct Screen         *Scr = NULL;
APTR                   VisualInfo = NULL;
struct Window         *StarLexWnd = NULL;
struct Gadget         *StarLexGList = NULL;
struct  Menu           *StarLexMenus = NULL;
struct Gadget         *StarLexGadgets[7];
UWORD                  StarLexLeft = 0;
UWORD                  StarLexTop = 0;
UWORD                  StarLexWidth = 724;
UWORD                  StarLexHeight = 230;
UBYTE                 *StarLexWdt = (UBYTE *)"StarLexWin";
struct Window         *StrReqWnd = NULL;
struct Gadget         *StrReqGList = NULL;
struct Gadget         *StrReqGadgets[1];
UWORD                  StrReqLeft = 163;
UWORD                  StrReqTop = 86;
UWORD                  StrReqWidth = 277;
UWORD                  StrReqHeight = 54;
UBYTE                 *StrReqWdt = (UBYTE *)"String Request";

UBYTE *MODE0Labels[] = {
	(UBYTE *)"Add Sectorscan",
	(UBYTE *)"Del Sectorscan",
	(UBYTE *)"Add Mark",
	(UBYTE *)"Del Mark",
	(UBYTE *)"Add System",
	(UBYTE *)"Edit System",
	(UBYTE *)"Del System",
	(UBYTE *)"Edit Comment",
	(UBYTE *)"Del Comment",
	(UBYTE *)"Add Fleetpath",
	(UBYTE *)"Del Fleetpath",
	(UBYTE *)"Fill Sectors",
	NULL };

struct TextAttr topaz8 = {
	( STRPTR )"topaz.font", 8, 0x00, 0x00 };

struct NewMenu StarLexNewMenu[] = {
	NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Load", (STRPTR)"l", 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Save", (STRPTR)"s", 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Save stars as ASCII", (STRPTR)"a", 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Save stars as TeX", (STRPTR)"t", 0, 0L, NULL,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"New", (STRPTR)"n", NM_ITEMDISABLED, 0L, NULL,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Quit", (STRPTR)"q", 0, 0L, NULL,
	NM_TITLE, (STRPTR)"Configuration", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Grid 1", (STRPTR)"1", CHECKIT | CHECKED, ~1, NULL,
	NM_ITEM, (STRPTR)"Grid 2", (STRPTR)"2", CHECKIT, ~2, NULL,
	NM_TITLE, (STRPTR)"Utilities", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Find System", (STRPTR)"f", 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Add Fleet", (STRPTR)"g", NM_ITEMDISABLED, 0L, NULL,
	NM_ITEM, (STRPTR)"Delete Fleet", (STRPTR)"d", NM_ITEMDISABLED, 0L, NULL,
	NM_ITEM, (STRPTR)"Move Fleet", (STRPTR)"m", NM_ITEMDISABLED, 0L, NULL,
	NM_END, NULL, NULL, 0, 0L, NULL };

UWORD StarLexGTypes[] = {
	TEXT_KIND,
	SCROLLER_KIND,
	SCROLLER_KIND,
	LISTVIEW_KIND,
	CYCLE_KIND,
	TEXT_KIND,
	TEXT_KIND
};

struct NewGadget StarLexNGad[] = {
	17, 5, 319, 12, NULL, NULL, GD_INFO, 0, NULL, NULL,
	312, 21, 22, 146, NULL, NULL, GD_YAXIS, 0, NULL, NULL,
	19, 168, 292, 11, NULL, NULL, GD_XAXIS, 0, NULL, NULL,
	415, 103, 303, 100, (UBYTE *)"Bemerkungen", NULL, GD_BEM, PLACETEXT_ABOVE, NULL, NULL,
	344, 20, 143, 16, (UBYTE *)"Mode", NULL, GD_MODE, PLACETEXT_ABOVE, NULL, NULL,
	342, 85, 41, 12, (UBYTE *)"Y", NULL, GD_Y, PLACETEXT_RIGHT, NULL, NULL,
	134, 182, 41, 12, (UBYTE *)"X", NULL, GD_X, PLACETEXT_BELOW, NULL, NULL
};

ULONG *StarLexGTags[] = {
	(ULONG *)(GTTX_Border), (ULONG *)TRUE, (ULONG *)(TAG_DONE),
	(ULONG *)(GTSC_Top), (ULONG *)28, (ULONG *)(GTSC_Total), (ULONG *)61, (ULONG *)(GTSC_Visible), (ULONG *)5, (ULONG *)(GTSC_Arrows), (ULONG *)8, (ULONG *)(PGA_Freedom), (ULONG *)LORIENT_VERT, (ULONG *)(GA_RelVerify), (ULONG *)TRUE, (ULONG *)(TAG_DONE),
	(ULONG *)(GTSC_Top), (ULONG *)28, (ULONG *)(GTSC_Total), (ULONG *)61, (ULONG *)(GTSC_Visible), (ULONG *)5, (ULONG *)(GTSC_Arrows), (ULONG *)16, (ULONG *)(PGA_Freedom), (ULONG *)LORIENT_HORIZ, (ULONG *)(GA_RelVerify), (ULONG *)TRUE, (ULONG *)(TAG_DONE),
	(ULONG *)(GTLV_ReadOnly), (ULONG *)TRUE, (ULONG *)(TAG_DONE),
        (ULONG * )(GTCY_Labels), (ULONG *)&MODE0Labels[ 0 ], (ULONG *)(TAG_DONE),
	(ULONG *)(GTTX_Text), (ULONG *)"   0", (ULONG *)(GTTX_Border), (ULONG *)TRUE, (ULONG *)(TAG_DONE),
	(ULONG *)(GTTX_Text), (ULONG *)"   0", (ULONG *)(GTTX_Border), (ULONG *)TRUE, (ULONG *)(TAG_DONE)
};

UWORD DriPens[] = {
	~0 };

int SetupScreen( void )
{
  BOOL res;
  struct ScreenModeRequester *smrequest;

  smrequest=AllocAslRequestTags(ASL_ScreenModeRequest, 
                                ASL_Hail, "Choose a Screenmode ...",
                                ASLSM_InitialDisplayID, NTSC_MONITOR_ID|HIRES_KEY, 
                                ASLSM_DoOverscanType, TRUE,
                                ASLSM_PropertyMask, DIPF_IS_DUALPF|DIPF_IS_HAM|DIPF_IS_EXTRAHALFBRITE|DIPF_IS_LACE, 
                                TAG_DONE);
  if (!smrequest) { fprintf(stderr, "Cannot allocate requester"); _abort(); }
  
  if (WBenchToFront()) 
  if (AslRequestTags(smrequest, TAG_DONE)==FALSE) 
  {
     if (smrequest) FreeAslRequest(smrequest);                                          
    _abort();
  }
  else
	if ( ! ( Scr = OpenScreenTags( NULL, SA_Left,	0,
					SA_Top,		0,
					SA_Width,	724,
					SA_Height,	241,
					SA_Depth,	4,
					SA_Font,	&topaz8,
                                        SA_Overscan,    smrequest->sm_OverscanType,
					SA_Type,	CUSTOMSCREEN,
                                        SA_DisplayID,   smrequest->sm_DisplayID,
					SA_Pens,	&DriPens[0],
					SA_Title,	"SuperNova II StarLex",
					TAG_DONE )))
      {
          if (smrequest) FreeAslRequest(smrequest);                                          
          return( 1L );
      }
      if (smrequest) FreeAslRequest(smrequest);                                          

	if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
		return( 2L );

	return( 0L );
}

void CloseDownScreen( void )
{
	if ( VisualInfo ) {
		FreeVisualInfo( VisualInfo );
		VisualInfo = NULL;
	}

	if ( Scr        ) {
		CloseScreen( Scr );
		Scr = NULL;
	}
}

void StarLexRender( void )
{
	UWORD		offx, offy;

	offx = 0;
	offy = Scr->WBorTop + Scr->Font->ta_YSize + 1;


	DrawBevelBox( StarLexWnd->RPort, offx + 15, offy + 19, 323, 162, GT_VisualInfo, VisualInfo, TAG_DONE );
}

int OpenStarLexWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	UWORD		lc, tc;
	UWORD		offx = 0, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

	if ( ! ( g = CreateContext( &StarLexGList )))
		return( 1L );

	for( lc = 0, tc = 0; lc < StarLex_CNT; lc++ ) {

		CopyMem((char * )&StarLexNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &topaz8;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		StarLexGadgets[ lc ] = g = CreateGadgetA((ULONG)StarLexGTypes[ lc ], g, &ng, ( struct TagItem * )&StarLexGTags[ tc ] );

		while( StarLexGTags[ tc ] ) tc += 2;
		tc++;

		if ( NOT g )
			return( 2L );
	}

	if ( ! ( StarLexMenus = CreateMenus( StarLexNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
		return( 3L );

	LayoutMenus( StarLexMenus, VisualInfo, GTMN_TextAttr, &topaz8, TAG_DONE );

	if ( ! ( StarLexWnd = OpenWindowTags( NULL,
				WA_Left,	StarLexLeft,
				WA_Top,		StarLexTop,
				WA_Width,	StarLexWidth,
				WA_Height,	StarLexHeight + offy,
				WA_IDCMP,	TEXTIDCMP|SCROLLERIDCMP|ARROWIDCMP|LISTVIEWIDCMP|CYCLEIDCMP|IDCMP_MENUPICK|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_SMART_REFRESH|WFLG_BACKDROP|WFLG_REPORTMOUSE|WFLG_GIMMEZEROZERO|WFLG_BORDERLESS|WFLG_ACTIVATE,
				WA_Gadgets,	StarLexGList,
				WA_ScreenTitle,	version,
				WA_CustomScreen,	Scr,
				WA_AutoAdjust,	TRUE,
				TAG_DONE )))
	return( 4L );

        SetFont(StarLexWnd->RPort, OpenFont(&topaz8));
 
	SetMenuStrip( StarLexWnd, StarLexMenus );
	GT_RefreshWindow( StarLexWnd, NULL );

	StarLexRender();

	return( 0L );
}

void CloseStarLexWindow( void )
{
	if ( StarLexMenus      ) {
		ClearMenuStrip( StarLexWnd );
		FreeMenus( StarLexMenus );
		StarLexMenus = NULL;	}

	if ( StarLexWnd        ) {
		CloseWindow( StarLexWnd );
		StarLexWnd = NULL;
	}

	if ( StarLexGList      ) {
		FreeGadgets( StarLexGList );
		StarLexGList = NULL;
	}
}

long OpenStrReqWindow( void )
{
    struct NewGadget     ng;
    struct Gadget       *g;
    UWORD               offx, offy;

    offx = Scr->WBorLeft;
    offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

    if ( NOT( g = CreateContext( &StrReqGList )))
        return( 1L );

    ng.ng_LeftEdge        =    offx + 26;
    ng.ng_TopEdge         =    offy + 24;
    ng.ng_Width           =    222;
    ng.ng_Height          =    12;
    ng.ng_GadgetText      =    (UBYTE *)"Bitte Text eingeben";
    ng.ng_TextAttr        =    &topaz8;
    ng.ng_GadgetID        =    GD_TEXT;
    ng.ng_Flags           =    PLACETEXT_ABOVE;
    ng.ng_VisualInfo      =    VisualInfo;

    g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 256, TAG_DONE );

    StrReqGadgets[ 0 ] = g;

    if ( NOT g )
        return( 2L );

    if ( NOT( StrReqWnd = OpenWindowTags( NULL,
                    WA_Left,          StrReqLeft,
                    WA_Top,           StrReqTop,
                    WA_Width,         StrReqWidth,
                    WA_Height,        StrReqHeight + offy,
                    WA_IDCMP,         STRINGIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
                    WA_Flags,         WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
                    WA_Gadgets,       StrReqGList,
                    WA_Title,         StrReqWdt,
                    WA_CustomScreen,  Scr,
                        TAG_DONE )))
        return( 4L );

    GT_RefreshWindow( StrReqWnd, NULL );

    return( NULL );
}

void CloseStrReqWindow( void )
{
    if ( StrReqWnd        ) {
        CloseWindow( StrReqWnd );
        StrReqWnd = NULL;
    }

    if ( StrReqGList      ) {
        FreeGadgets( StrReqGList );
        StrReqGList = NULL;
    }
}

