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

#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 "form.h"

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = NULL;
APTR                   VisualInfo = NULL;
struct Window         *Project0Wnd = NULL;
struct Gadget         *Project0GList = NULL;
struct IntuiMessage    Project0Msg;
struct Gadget         *Project0Gadgets[9];
UWORD                  Project0Left = 120;
UWORD                  Project0Top = 37;
UWORD                  Project0Width = 316;
UWORD                  Project0Height = 136;
UBYTE                 *Project0Wdt = (UBYTE *)"Quick Format v2.3";

UBYTE *Gadget700Labels[] = {
	(UBYTE *)"FFS",
	(UBYTE *)"DCFFS",
	(UBYTE *)"INTL",
	(UBYTE *)"OFS",
	NULL };

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

struct IntuiText Project0IText[] = {
	2, 0, JAM1,177, 47, &topaz8, (UBYTE *)"Format Mode:", NULL };

UWORD Project0GTypes[] = {
	STRING_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	STRING_KIND,
	CYCLE_KIND,
	CHECKBOX_KIND
};


UBYTE status[9]={1,0,0,0,0,0,0,0,0};
char drive[10]="df0:",name[20]="Empty",trashcan[30],quick[30],ffs[10],dcffs[10],ofs[10],intl[10];
char stringa[250],nome[30]=" name ",format[50]="Format drive ";
void form(void);
char *cycle[4]={ " FFS "," DIRCACHE "," INTL "," OFS " };
int count=0;

struct NewGadget Project0NGad[] = {
	76, 21, 176, 13, (UBYTE *)"_Name ", NULL, GD_Gadget00, PLACETEXT_LEFT|NG_HIGHLABEL, NULL, (APTR)Gadget00Clicked,
	96, 45, 26, 11, (UBYTE *)"_Trashcan ", NULL, GD_Gadget10, PLACETEXT_LEFT|NG_HIGHLABEL, NULL, (APTR)Gadget10Clicked,
	96, 59, 26, 11, (UBYTE *)"_Verify   ", NULL, GD_Gadget20, PLACETEXT_LEFT|NG_HIGHLABEL, NULL, (APTR)Gadget20Clicked,
	96, 73, 26, 11, (UBYTE *)"_Quick    ", NULL, GD_Gadget30, PLACETEXT_LEFT|NG_HIGHLABEL, NULL, (APTR)Gadget30Clicked,
	34, 110, 83, 15, (UBYTE *)"_Format!", NULL, GD_Gadget40, PLACETEXT_IN, NULL, (APTR)Gadget40Clicked,
	180, 110, 83, 15, (UBYTE *)"_Cancel", NULL, GD_Gadget50, PLACETEXT_IN, NULL, (APTR)Gadget50Clicked,
	76, 6, 175, 12, (UBYTE *)"_Drive", NULL, GD_Gadget60, PLACETEXT_LEFT|NG_HIGHLABEL, NULL, (APTR)Gadget60Clicked,
	176, 66, 88, 13, NULL, NULL, GD_Gadget70, 0, NULL, (APTR)Gadget70Clicked,
	96, 87, 26, 11, (UBYTE *)"_Install  ", NULL, GD_Gadget80, PLACETEXT_LEFT|NG_HIGHLABEL, NULL, (APTR)Gadget80Clicked
};

ULONG Project0GTags[] = {
	(GTST_String), (ULONG)"Empty", (GTST_MaxChars), 20, (STRINGA_Justification), (GACT_STRINGCENTER), (GT_Underscore), '_', (TAG_DONE),
	(GTCB_Checked), TRUE, (GT_Underscore), '_', (TAG_DONE),
	(GTCB_Checked), TRUE, (GT_Underscore), '_', (GA_Disabled), TRUE, (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GTST_String), (ULONG)"DF0:", (GTST_MaxChars), 10, (STRINGA_Justification), (GACT_STRINGCENTER), (GT_Underscore), '_', (TAG_DONE),
	(GTCY_Labels), (ULONG)&Gadget700Labels[ 0 ], (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE)
};

void main(void)
{
        SetupScreen();
        OpenProject0Window();
        HandleProject0IDCMP();
        CloseProject0Window();
        CloseDownScreen();
}

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

	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 Project0Render( void )
{
	UWORD		offx, offy;

	offx = Project0Wnd->BorderLeft;
	offy = Project0Wnd->BorderTop;


	DrawBevelBox( Project0Wnd->RPort, offx + 5, offy + 40, 138, 63, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	DrawBevelBox( Project0Wnd->RPort, offx + 20, offy + 3, 244, 36, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	DrawBevelBox( Project0Wnd->RPort, offx + 149, offy + 40, 154, 63, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	PrintIText( Project0Wnd->RPort, Project0IText, offx, offy );
}

int HandleProject0IDCMP( void )
{
	struct IntuiMessage	*m;
	struct Gadget		*func;
	BOOL			running = TRUE;
        int num;
        ActivateGadget(Project0Gadgets[6],Project0Wnd,NULL);
        while (running)
        {
                while((running)&&(m = GT_GetIMsg( Project0Wnd->UserPort ))) {

		GT_ReplyIMsg( m );

		switch ( m->Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( Project0Wnd );
				Project0Render();
				GT_EndRefresh( Project0Wnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = FALSE;
				break;

			case	IDCMP_GADGETUP:
				func = ( struct Gadget * )m->IAddress;
                                num=func->GadgetID;
                                switch(num)
                                {
                                        case 6:
                                           strcpy(drive,((struct StringInfo *)func->SpecialInfo)->Buffer);
                                           ActivateGadget(Project0Gadgets[0],Project0Wnd,NULL);
                                           break;
                                        case 0:
                                           strcpy(name,((struct StringInfo *)func->SpecialInfo)->Buffer);
                                           if (!strcmp(name,""))
                                           {
                                                DisplayBeep(Scr);
                                                ActivateGadget(Project0Gadgets[0],Project0Wnd,NULL);
                                           }
                                           break;
                                        case 1:
                                        case 2:
                                        case 3:
                                        case 8:
                                           checked(num);
                                           break;
                                        case 7:
                                           count=(count+1)%4;
                                           break;
                                        case 4:
                                           form();
                                           break;
                                        case 5:
                                           running=FALSE;
                                           break;
                                }
                                break;
		}
	}
    }
}

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

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

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

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

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

		Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );

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

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

	if ( ! ( Project0Wnd = OpenWindowTags( NULL,
				WA_Left,	Project0Left,
				WA_Top,		Project0Top,
				WA_Width,	Project0Width,
				WA_Height,	Project0Height + offy,
				WA_IDCMP,	STRINGIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|CYCLEIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|IDCMP_VANILLAKEY,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	Project0GList,
				WA_Title,	Project0Wdt,
				WA_ScreenTitle,	"Quick Format V2.3 ©1994 By Mirko Zappitelli",
				WA_PubScreen,	Scr,
				WA_AutoAdjust,	TRUE,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Project0Wnd, NULL );

	Project0Render();

	return( 0L );
}

void CloseProject0Window( void )
{
	if ( Project0Wnd        ) {
		CloseWindow( Project0Wnd );
		Project0Wnd = NULL;
	}

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

void checked(int num)
{
        BOOL verify;
        status[num-1]=1-status[num-1];

        if (status[0]==0) strcpy(trashcan," NOICONS"); else strcpy(trashcan,"");

        //if (status[1]==1) verify=TRUE;else verify=FALSE;

        if (status[2]==1) strcpy(quick," QUICK"); else strcpy(quick,"");
        
}
void form(void)
{
        struct Window *win;
        int err,a;
        char buf[120],directories[30],*dir[13]={ "S","L","C","Devs","Libs","System","Utilities","Fonts","Prefs","Prefs/Env-Archive","Devs/Printers","Devs/Keymaps","Prefs/Env-Archive/Sys" };
        char copy[30];
        
        sprintf(stringa,"SYS:System/Format >NIL: drive %s name %s %s %s %s",drive,name,trashcan,quick,cycle[count]);
        win=OpenWindowTags(NULL,
                      WA_Width,500,
                      WA_Height,100,
                      WA_Top,90,
                      WA_Left,80,
                      WA_DragBar,TRUE,
                      WA_Activate,TRUE,
                      WA_DepthGadget,TRUE,
                      WA_PubScreen,Scr,
                      TAG_DONE);
        SetAPen(win->RPort,1);
        Move(win->RPort,win->BorderLeft+16,win->BorderTop+8);
        Text(win->RPort,"Formatting disk...",18);
        Move(win->RPort,win->BorderLeft+170,win->BorderTop+8);
        system(stringa);
        err=IoErr();
        if (err)
        {
                DisplayBeep(Scr);
                Move(win->RPort,win->BorderLeft+16,win->BorderTop+16);
                Fault(err,"ERRORE",buf,120);
                Text(win->RPort,buf,strlen(buf));
                goto fine;
        }
        else Text(win->RPort,"OK",2);
        if (status[7]==1) 
        {
                Move(win->RPort,win->BorderLeft+16,win->BorderTop+24);
                Text(win->RPort,"Installing disk...",18);
                sprintf(copy,"C:Install >NIL: %s",drive);
                system(copy);
                Move(win->RPort,win->BorderLeft+170,win->BorderTop+24);
                Text(win->RPort,"OK",2);
                Move(win->RPort,win->BorderLeft+16,win->BorderTop+32);
                Text(win->RPort,"Making Directories...",21);
                for (a=0;a<13;a++)
                {
                        strcpy(directories,"");
                        sprintf(directories,"makedir %s%s",drive,dir[a]);
                        system(directories);
                }
                Move(win->RPort,win->BorderLeft+188,win->BorderTop+32);
                Text(win->RPort,"OK",2);
                Move(win->RPort,win->BorderLeft+16,win->BorderTop+40);
                Text(win->RPort,"Copying files...",16);
                copystartup(drive);
                copyc(drive);
                copyl(drive);
                copylibs(drive);
                copyprefs(drive);
                Move(win->RPort,win->BorderLeft+170,win->BorderTop+40);
                Text(win->RPort,"Done.",5);
        }
        fine:
         Delay(200);
         CloseWindow(win);
}       

void copystartup(char *drive)
{
        char copia[57];
        sprintf(copia,"C:copy >NIL: SYS:S/QFormat.confg %sS/startup-sequence",drive);
        system(copia);
        strcpy(copia,"");
        sprintf(copia,"C:copy >NIL: SYS:S/shell-startup %sS",drive);
        system(copia);
}

void copyc(char *drive)
{
        char copie[50];
        sprintf(copie,"C:copy >NIL: SYS:C/dir %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/list %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/delete %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/copy %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/IPrefs %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/makedir %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/assign %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/SetPatch %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/Binddrivers %sC",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:C/LoadWB %sC",drive);
        system(copie);
}
        
void copyl(char *drive)
{
        char copy[50];
        sprintf(copy,"C:copy >NIL: SYS:L/port-handler %sL",drive);
        system(copy);
}

void copylibs(char *drive)
{
        char copia[50];
        sprintf(copia,"C:copy >NIL: SYS:Libs/asl.library %sLibs",drive);
        system(copia);
        strcpy(copia,"");
        sprintf(copia,"C:copy >NIL: SYS:Libs/version.library %sLibs",drive);
        system(copia);
        strcpy(copia,"");
        sprintf(copia,"C:copy >NIL: SYS:Libs/diskfont.library %sLibs",drive);
        system(copia);
        strcpy(copia,"");
        sprintf(copia,"C:copy >NIL: SYS:Libs/iffparse.library %sLibs",drive);
        system(copia);
}

int copyprefs(char *drive)
{
        char copie[80];
        sprintf(copie,"C:copy >NIL: SYS:Prefs/env-archive/sys/wbconfig.prefs %sPrefs/env-archive/sys",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:Prefs.info %s",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:System.info %s",drive);
        system(copie);
        strcpy(copie,"");
        sprintf(copie,"C:copy >NIL: SYS:Utilities.info %s",drive);
        system(copie);
        return (0);
}
