/*
 *  Source machine generated by GadToolsBox V2.0b
 *  which is (c) Copyright 1991-1993 Jaba Development
 *
 *  GUI Designed by : (ray-1
 */

#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 <string.h>
#include "Hacker.h"

static struct Screen         *Scr = NULL;
static UBYTE                 *PubScreenName = "Workbench";
static APTR                   VisualInfo = NULL;
static struct Window         *HackersWnd = NULL;
static struct Gadget         *HackersGList = NULL;
static struct Menu           *HackersMenus = NULL;
static struct Gadget         *HackersGadgets[14];
static UWORD                  HackersLeft = 58;
static UWORD                  HackersTop = 53;
static UWORD                  HackersWidth = 564;
static UWORD                  HackersHeight = 149;
static UBYTE                 *HackersWdt = (UBYTE *)"NexHack Frontend";
static struct TextAttr       *Font, Attr;
static UWORD                  FontX, FontY;
static UWORD                  OffX, OffY;

static struct NewMenu HackersNewMenu[] = {
        NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
        NM_ITEM, (STRPTR)"New Project", (STRPTR)"N", CHECKIT|CHECKED, 0L, NULL,
        NM_ITEM, (STRPTR)"About Program", NULL, MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
        NM_ITEM, (STRPTR)"Sleep", NULL, MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"Quit", NULL, MENUTOGGLE, 0L, NULL,
        NM_TITLE, (STRPTR)"Current User", NULL, 0, NULL, NULL,
        NM_ITEM, (STRPTR)"Add Comment To..", NULL, MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"Save Single", NULL, MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"Move Single", NULL, NM_ITEMDISABLED|MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"Change Single", NULL, NM_ITEMDISABLED|MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
        NM_ITEM, (STRPTR)"Print Single", NULL, MENUTOGGLE, 0L, NULL,
        NM_TITLE, (STRPTR)"Users File", NULL, 0, NULL, NULL,
        NM_ITEM, (STRPTR)"Open..", NULL, MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"Save..", NULL, NM_ITEMDISABLED|MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"About..", NULL, MENUTOGGLE, 0L, NULL,
        NM_TITLE, (STRPTR)"Output", NULL, 0, NULL, NULL,
        NM_ITEM, (STRPTR)"Pick File...", NULL, MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"Compare With..", NULL, NM_ITEMDISABLED|MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)"Append To File..", NULL, NM_ITEMDISABLED|MENUTOGGLE, 0L, NULL,
        NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
        NM_ITEM, (STRPTR)"Print", NULL, MENUTOGGLE, 0L, NULL,
        NM_END, NULL, NULL, 0, 0L, NULL };

static UWORD HackersGTypes[] = {
        BUTTON_KIND,
        BUTTON_KIND,
        TEXT_KIND,
        TEXT_KIND,
        NUMBER_KIND,
        NUMBER_KIND,
        NUMBER_KIND,
        TEXT_KIND,
        BUTTON_KIND,
        BUTTON_KIND,
        BUTTON_KIND,
        BUTTON_KIND,
        TEXT_KIND,
        TEXT_KIND
};

static struct NewGadget HackersNGad[] = {
        2, 109, 276, 23, (UBYTE *)"<=-", NULL, GD_ADVANCE, PLACETEXT_IN, NULL, NULL,
        277, 109, 285, 23, (UBYTE *)"-=>", NULL, GD_BACK, PLACETEXT_IN, NULL, NULL,
        271, 46, 169, 11, (UBYTE *)"Name", NULL, GD_NAME, PLACETEXT_LEFT, NULL, NULL,
        271, 57, 169, 11, (UBYTE *)"Password", NULL, GD_PASSWORD, PLACETEXT_LEFT, NULL, NULL,
        497, 96, 52, 11, (UBYTE *)"File Position", NULL, GD_POSITION, PLACETEXT_LEFT, NULL, NULL,
        498, 82, 52, 11, (UBYTE *)"Magic Number", NULL, GD_MAGIC, PLACETEXT_LEFT, NULL, NULL,
        486, 60, 37, 11, (UBYTE *)"User Number", NULL, GD_NUMBER, PLACETEXT_ABOVE, NULL, NULL,
        228, 89, 76, 11, (UBYTE *)"Status", NULL, GD_STATUS, PLACETEXT_ABOVE, NULL, NULL,
        9, 2, 132, 26, (UBYTE *)"Open Users File", NULL, GD_OPEN, PLACETEXT_IN, NULL, NULL,
        426, 3, 130, 25, (UBYTE *)"Save Output", NULL, GD_SAVE, PLACETEXT_IN, NULL, NULL,
        156, 4, 124, 22, (UBYTE *)"Make List", NULL, GD_LIST, PLACETEXT_IN, NULL, NULL,
        289, 4, 122, 23, (UBYTE *)"Print Output", NULL, GD_PRINT, PLACETEXT_IN, NULL, NULL,
        271, 31, 285, 11, (UBYTE *)"Users File", NULL, GD_FILENAME, PLACETEXT_LEFT, NULL, NULL,
        18, 134, 531, 13, NULL, NULL, GD_DOING, 0, NULL, NULL
};

static ULONG HackersGTags[] = {
        (TAG_DONE),
        (TAG_DONE),
        (GTTX_Border), TRUE, (TAG_DONE),
        (GTTX_Border), TRUE, (TAG_DONE),
        (GTNM_Border), TRUE, (TAG_DONE),
        (GTNM_Border), TRUE, (TAG_DONE),
        (GTNM_Border), TRUE, (TAG_DONE),
        (GTTX_Border), TRUE, (TAG_DONE),
        (TAG_DONE),
        (TAG_DONE),
        (TAG_DONE),
        (TAG_DONE),
        (GTTX_Border), TRUE, (TAG_DONE),
        (GTTX_Border), TRUE, (TAG_DONE)
};

static UWORD ComputeX( UWORD value )
{
        return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
}

static UWORD ComputeY( UWORD value )
{
        return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
}

static void ComputeFont( UWORD width, UWORD height )
{
        Font = &Attr;
        Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
        Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
        FontX = Scr->RastPort.Font->tf_XSize;

        OffX = Scr->WBorLeft;
        OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;

        if ( width && height ) {
                if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
                        goto UseTopaz;
                if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
                        goto UseTopaz;
        }
        return;

UseTopaz:
        Font->ta_Name = (STRPTR)"topaz.font";
        FontX = FontY = Font->ta_YSize = 8;
}

int SetupScreen( void )
{
        if ( ! ( Scr = LockPubScreen( PubScreenName )))
                return( 1L );

        ComputeFont( 0, 0 );

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

        return( 0L );
}

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

        if ( Scr        ) {
                UnlockPubScreen( NULL, Scr );
                Scr = NULL;
        }
}

void HackersRender( void )
{
        ComputeFont( HackersWidth, HackersHeight );

        DrawBevelBox( HackersWnd->RPort, OffX + ComputeX( 13 ),
                                        OffY + ComputeY( 32 ),
                                        ComputeX( 160 ),
                                        ComputeY( 72 ),
                                        GT_VisualInfo, VisualInfo, TAG_DONE );
        DrawBevelBox( HackersWnd->RPort, OffX + ComputeX( 17 ),
                                        OffY + ComputeY( 34 ),
                                        ComputeX( 152 ),
                                        ComputeY( 68 ),
                                        GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
}

int OpenHackersWindow( void )
{
        struct NewGadget        ng;
        struct Gadget   *g;
        UWORD           lc, tc;
        UWORD           wleft = HackersLeft, wtop = HackersTop, ww, wh;

        ComputeFont( HackersWidth, HackersHeight );

        ww = ComputeX( HackersWidth );
        wh = ComputeY( HackersHeight );

        if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
        if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;

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

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

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

                ng.ng_VisualInfo = VisualInfo;
                ng.ng_TextAttr   = Font;
                ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
                ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
                ng.ng_Width      = ComputeX( ng.ng_Width );
                ng.ng_Height     = ComputeY( ng.ng_Height);

                HackersGadgets[ lc ] = g = CreateGadgetA((ULONG)HackersGTypes[ lc ], g, &ng, ( struct TagItem * )&HackersGTags[ tc ] );

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

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

        if ( ! ( HackersMenus = CreateMenus( HackersNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
                return( 3L );

        LayoutMenus( HackersMenus, VisualInfo, TAG_DONE );

        if ( ! ( HackersWnd = OpenWindowTags( NULL,
                                WA_Left,        wleft,
                                WA_Top,         wtop,
                                WA_Width,       ww + OffX + Scr->WBorRight,
                                WA_Height,      wh + OffY + Scr->WBorBottom,
                                WA_IDCMP,       BUTTONIDCMP|TEXTIDCMP|NUMBERIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_MENUVERIFY|
IDCMP_REFRESHWINDOW,
                                WA_Flags,       WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
                                WA_Gadgets,     HackersGList,
                                WA_Title,       HackersWdt,
                                WA_ScreenTitle, "PassWord_Hacker",
                                TAG_DONE )))
        return( 4L );

        SetMenuStrip( HackersWnd, HackersMenus );
        HackersRender();

        return( 0L );
}

void CloseHackersWindow( void )
{
        if ( HackersMenus      ) {
                ClearMenuStrip( HackersWnd );
                FreeMenus( HackersMenus );
                HackersMenus = NULL;    }

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

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

