/*
 *  Name    : Do5extPrefs.c
 *  Version : 1.5  (30-Apr-1998)
 *  Compiler: MaxonC++ V4.0 Pro
 *  Author  : Jens Weyer (stealth@sol.de)
 *  Status  : FREEWARE
 *
 *
 *  LEGAL STUFF
 *  -----------
 *    You may use any source in your own project,
 *  as long as you say, where you got it from and
 *  who is the (original) author.
 *    It would be nice, if you would include this
 *  header in your guide then.
 *
 *    This source is given "AS IS" ! The author
 *  (= me = Jens Weyer) neither does NOT take any
 *  responsibilty for lost data / hard- & software
 *  crashes nor will pay something for these.
 *
 *    This source MUST NOT removed from the archive.
 *  It has to be distributed with it.
 *
 * ----
 *
 *    Please read the documentation for further
 *  information !
 */

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

// General includes

#include <exec/types.h>
#include <exec/lists.h>
#include <exec/memory.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 <libraries/asl.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 <stdio.h>
#include <stdlib.h>
#include <clib/diskfont_protos.h>

// pragmas

#include <pragmas/exec_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/gadtools_pragmas.h>
#include <pragmas/graphics_pragmas.h>
#include <pragmas/utility_pragmas.h>
#include <pragma/diskfont_lib.h>
#include <pragma/dos_lib.h>
#include <pragma/icon_lib.h>
#include <pragma/asl_lib.h>

// my EasyRequestArgs() Template include

#include <my/EasyReq.h>

// Maxon startup include (very well done by Maxon !)

#include <wbstartup.h>

#include "Do5extPrefs15_1.h"

// some declarations

int EasyReq(struct Window *, char *, char *, char *);
int ListLength(void);
int SwapState(int,int);
int GetEnv(char *,int);
int GetNum(int);
int Exists(char *);
void LoadENVars(void);
void SwapCheck(int,int);
void SetEnv(char *, int,int);
void InitVarExist(void);
void PrepSetEnv(char *,int,int);
void SetNum(int,int);
void GetToolTypes(char *);
void LoadOW(void);
void SetList(int);
void FreeOWList(void);
void PrintOWName(int);
void DisableAll(void);
void EnableAll(void);

int NewList(struct List *);   // normally not necessary, but MaxonC gives a warning...

static unsigned char *version = "$VER:DO5extPrefs 1.5  ("__DATE__") by Jens Weyer for DOpus 5.65+";

struct Library     *GadToolsBase;
struct Library     *AslBase;
struct List           OWList;
static char          *OWPath = "Dopus5:System/OpenWith";
int                        ActOWE = -1;

int                        VarExist[VarMemSize];
int                        VarDefault[VarMemSize];
int                        NoNoLabel = 0;
int                        DLook = 0;
int                        NoCustomDrag = 0;
int                        ShowUseDTFirst = 0;
int                        UseWBInfo = 0;
int                        WBTitle = 0;
int                        QuickIconDrag = 0;
int                        PopTime = 10;
int                        NoMUFS = 0;
int                        Benefy = 0;
int                        HidePadLock = 0;
int                        CmdLineLength = 512;
int                        IconSpaceX = 3;
int                        IconSpaceY = 5;
int                        IconGridX = 0;
int                        IconGridY = 0;
int                        ListerEditing = 0;
int                        DOSPatch = 0;
char                    AGHelp[500];

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = "Workbench";
APTR                   VisualInfo = NULL;
struct Window         *Project0Wnd = NULL;
struct Window         *Project1Wnd = NULL;
struct Gadget         *Project0GList = NULL;
struct Gadget         *Project1GList = NULL;
struct Menu           *Project0Menus = NULL;
struct IntuiMessage    Project0Msg;
struct IntuiMessage    Project1Msg;
struct Gadget         *Project0Gadgets[21];
struct Gadget         *Project1Gadgets[7];
UWORD                  Project0Left = 10;
UWORD                  Project0Top = 15;
UWORD                  Project0Width = 334;
UWORD                  Project0Height = 241;
UWORD                  Project1Left = 10;
UWORD                  Project1Top = 15;
UWORD                  Project1Width = 231;
UWORD                  Project1Height = 221;
UBYTE                 *Project0Wdt = (UBYTE *)"DO5extPrefs v1.5";
UBYTE                 *Project1Wdt = Project0Wdt;
struct TextAttr       *Font, Attr;
UWORD                  FontX, FontY;
UWORD                  OffX, OffY;
struct TextFont       *Project0Font = NULL;
struct TextFont       *Project1Font = NULL;

struct NewMenu Project0NewMenu[] = {
	NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"About...", (STRPTR)"?", 0, 0L, (APTR)Project0About,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)Project0Quit,
	NM_TITLE, (STRPTR)"Data", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"ENVars", NULL, 0, NULL, NULL,
	NM_SUB, (STRPTR)"Use", (STRPTR)"U", 0, 0L, (APTR)Project0Use,
	NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_SUB, (STRPTR)"Save", (STRPTR)"S", 0, 0L, (APTR)Project0Save,
	NM_ITEM, (STRPTR)"Open with", NULL, 0, NULL, NULL,
	NM_SUB, (STRPTR)"Save", NULL, 0, 0L, (APTR)Project0SaveOWE,
	NM_END, NULL, NULL, 0, 0L, NULL };

UWORD Project0GTypes[] = {
	BUTTON_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	INTEGER_KIND,
	BUTTON_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	BUTTON_KIND
};

UWORD Project1GTypes[] = {
	BUTTON_KIND,
	LISTVIEW_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	TEXT_KIND
};

struct NewGadget Project0NGad[] = {
	5, 198, 147, 16, (UBYTE *)"_Save", NULL, GD_Save, PLACETEXT_IN, NULL, (APTR)SaveClicked,
	121, 7, 26, 11, (UBYTE *)"_NoNoLabel", NULL, GD_Label, PLACETEXT_LEFT, NULL, (APTR)LabelClicked,
	121, 24, 26, 11, (UBYTE *)"No_CustomDrag", NULL, GD_NoCustomDrag, PLACETEXT_LEFT, NULL, (APTR)NoCustomDragClicked,
	121, 42, 26, 11, (UBYTE *)"_WorkbenchTitle", NULL, GD_WBTitle, PLACETEXT_LEFT, NULL, (APTR)WBTitleClicked,
	121, 61, 26, 11, (UBYTE *)"_QuickIconDrag", NULL, GD_QuickIconDrag, PLACETEXT_LEFT, NULL, (APTR)QuickIconDragClicked,
	161, 7, 26, 11, (UBYTE *)"_UseWBInfo", NULL, GD_UseWBInfo, PLACETEXT_RIGHT, NULL, (APTR)UseWBInfoClicked,
	161, 24, 26, 11, (UBYTE *)"Sh_owUseDatatypesFirst", NULL, GD_DTF, PLACETEXT_RIGHT, NULL, (APTR)DTFClicked,
	161, 42, 26, 11, (UBYTE *)"3D_Look", NULL, GD_DLook, PLACETEXT_RIGHT, NULL, (APTR)DLookClicked,
	197, 134, 53, 16, (UBYTE *)"PopUpDelay (in 1/50 secs.)", NULL, GD_TimePopUpDelay, PLACETEXT_LEFT, NULL, (APTR)TimePopUpDelayClicked,
	182, 197, 147, 16, (UBYTE *)"Us_e", NULL, GD_Use, PLACETEXT_IN, NULL, (APTR)UseClicked,
	161, 61, 26, 11, (UBYTE *)"No_MultiUser", NULL, GD_NoMUFS, PLACETEXT_RIGHT, NULL, (APTR)NoMUFSClicked,
	121, 80, 26, 11, (UBYTE *)"_Benefy", NULL, GD_Benefy, PLACETEXT_LEFT, NULL, (APTR)BenefyClicked,
	161, 80, 26, 11, (UBYTE *)"_HidePadLock", NULL, GD_HidePadLock, PLACETEXT_RIGHT, NULL, (APTR)HidePadLockClicked,
	197, 152, 53, 16, (UBYTE *)"CommandLineLength (in chars)", NULL, GD_LengthOfCmdLine, PLACETEXT_LEFT, NULL, (APTR)LengthOfCmdLineClicked,
	95, 171, 53, 16, (UBYTE *)"IconSpaceX", NULL, GD_IconSpaceX, PLACETEXT_LEFT, NULL, (APTR)IconSpaceXClicked,
	166, 171, 53, 16, (UBYTE *)"Y", NULL, GD_IconSpaceY, PLACETEXT_LEFT, NULL, (APTR)IconSpaceYClicked,
	121, 98, 26, 11, (UBYTE *)"IconGrid_X", NULL, GD_IconGridX, PLACETEXT_LEFT, NULL, (APTR)IconGridXClicked,
	161, 98, 26, 11, (UBYTE *)"IconGrid_Y", NULL, GD_IconGridY, PLACETEXT_RIGHT, NULL, (APTR)IconGridYClicked,
	121, 116, 26, 11, (UBYTE *)"L_isterEditing", NULL, GD_LEd, PLACETEXT_LEFT, NULL, (APTR)LEdClicked,
	161, 116, 26, 11, (UBYTE *)"_DOSPatch", NULL, GD_DOSPatch, PLACETEXT_RIGHT, NULL, (APTR)DOSPatchClicked,
	5, 221, 324, 16, (UBYTE *)"Edit 'Open with'...", NULL, GD_WinGadCycOW, PLACETEXT_IN, NULL, (APTR)WinGadCycOWClicked
};

struct NewGadget Project1NGad[] = {
	44, 197, 147, 16, (UBYTE *)"Save", NULL, GD_SaveOW, PLACETEXT_IN, NULL, (APTR)SaveOWClicked,
	11, 25, 149, 154, (UBYTE *)"'Open with' entries:", NULL, GD_OWEntries, PLACETEXT_ABOVE, NULL, (APTR)OWEntriesClicked,
	163, 25, 58, 18, (UBYTE *)"Add", NULL, GD_AddOWEntry, PLACETEXT_IN, NULL, (APTR)AddOWEntryClicked,
	163, 45, 58, 18, (UBYTE *)"Del", NULL, GD_DelOWEntry, PLACETEXT_IN, NULL, (APTR)DelOWEntryClicked,
	163, 81, 58, 18, (UBYTE *)"Up", NULL, GD_MoveOWEUp, PLACETEXT_IN, NULL, (APTR)MoveOWEUpClicked,
	163, 101, 58, 18, (UBYTE *)"Down", NULL, GD_MoveOWEDown, PLACETEXT_IN, NULL, (APTR)MoveOWEDownClicked,
	11, 172, 209, 20, NULL, NULL, GD_DisplayOWName, 0, NULL, NULL
};

ULONG Project0GTags[] = {
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GA_TabCycle), FALSE, (GTIN_Number), 10, (GTIN_MaxChars), 10, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GA_TabCycle), FALSE, (GTIN_Number), 512, (GTIN_MaxChars), 4, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
	(GA_TabCycle), FALSE, (GTIN_Number), 3, (GTIN_MaxChars), 2, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
	(GA_TabCycle), FALSE, (GTIN_Number), 5, (GTIN_MaxChars), 2, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE)
};

ULONG Project1GTags[] = {
	(GT_Underscore), '_', (TAG_DONE),
	(GTLV_ShowSelected), NULL, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE)
};

static UWORD ComputeX( UWORD value )
{
	return(( UWORD )((( FontX * value ) + 3 ) / 6 ));
}

static UWORD ComputeY( UWORD value )
{
	return(( UWORD )((( FontY * value ) + 5 ) / 11 ));
}

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

	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 Project0Render( void )
{
	ComputeFont( Project0Width, Project0Height );

	DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 2 ),
					OffY + ComputeY( 219 ),
					ComputeX( 330 ),
					ComputeY( 21 ),
					GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 5 ),
					OffY + ComputeY( 4 ),
					ComputeX( 323 ),
					ComputeY( 190 ),
					GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 2 ),
					OffY + ComputeY( 1 ),
					ComputeX( 330 ),
					ComputeY( 217 ),
					GT_VisualInfo, VisualInfo, TAG_DONE );
}

int HandleProject0IDCMP( void )
{
	struct IntuiMessage	*m;
	struct MenuItem		*n;
	int			(*func)();
	BOOL			running = TRUE;

	while( m = GT_GetIMsg( Project0Wnd->UserPort )) {

		CopyMem(( char * )m, ( char * )&Project0Msg, (long)sizeof( struct IntuiMessage ));

		GT_ReplyIMsg( m );

		switch ( Project0Msg.Class ) {

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

			case	IDCMP_CLOSEWINDOW:
				running = Project0CloseWindow();
				break;

			case	IDCMP_VANILLAKEY:
				running = Project0VanillaKey();
				break;
			case	IDCMP_RAWKEY:
				running = Project0RawKey();
				break;

			case	IDCMP_GADGETUP:
			case	IDCMP_GADGETDOWN:
				func = ( void * )(( struct Gadget * )Project0Msg.IAddress )->UserData;
				running = func();
				break;

			case	IDCMP_MENUPICK:
				while( Project0Msg.Code != MENUNULL ) {
					n = ItemAddress( Project0Menus, Project0Msg.Code );
					func = (void *)(GTMENUITEM_USERDATA( n ));
					running = func();
					Project0Msg.Code = n->NextSelect;
				}
				break;
		}
	}
	return( running );
}

int OpenProject0Window( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	UWORD		lc, tc;
	UWORD		wleft = Project0Left, wtop = Project0Top, ww, wh;

	ComputeFont( Project0Width, Project0Height );

	ww = ComputeX( Project0Width );
	wh = ComputeY( Project0Height );

	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 ( ! ( Project0Font = OpenDiskFont( Font )))
		return( 5L );

	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   = 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);

		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 ( ! ( Project0Menus = CreateMenus( Project0NewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
		return( 3L );

	LayoutMenus( Project0Menus, VisualInfo, TAG_DONE );

	if ( ! ( Project0Wnd = OpenWindowTags( NULL,
				 WA_Left, ((Scr->Width) / 2) - (Project0Width / 2),
				 WA_Top, ((Scr->Height) / 2) - (Project0Height / 2),
				WA_Width,	ww + OffX + Scr->WBorRight,
				WA_Height,	wh + OffY + Scr->WBorBottom,
				WA_IDCMP,	BUTTONIDCMP|CHECKBOXIDCMP|INTEGERIDCMP|IDCMP_GADGETDOWN|IDCMP_INTUITICKS|IDCMP_MOUSEMOVE|IDCMP_MOUSEBUTTONS|
						
						IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|
						
						IDCMP_VANILLAKEY|
						IDCMP_RAWKEY|
						IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	Project0GList,
				WA_Title,	Project0Wdt,
				WA_ScreenTitle,	"extended Preferences for DOpus5 - (c)1997-98 by Jens Weyer",
				TAG_DONE )))
	return( 4L );

	SetMenuStrip( Project0Wnd, Project0Menus );
	GT_RefreshWindow( Project0Wnd, NULL );

	Project0Render();

	return( 0L );
}

void CloseProject0Window( void )
{
	if ( Project0Menus      ) {
		ClearMenuStrip( Project0Wnd );
		FreeMenus( Project0Menus );
		Project0Menus = NULL;	}

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

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

	if ( Project0Font ) {
		CloseFont( Project0Font );
		Project0Font = NULL;
	}
}

void Project1Render( void )
{
	ComputeFont( Project1Width, Project1Height );

	DrawBevelBox( Project1Wnd->RPort, OffX + ComputeX( 6 ),
					OffY + ComputeY( 4 ),
					ComputeX( 219 ),
					ComputeY( 190 ),
					GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	DrawBevelBox( Project1Wnd->RPort, OffX + ComputeX( 2 ),
					OffY + ComputeY( 1 ),
					ComputeX( 227 ),
					ComputeY( 217 ),
					GT_VisualInfo, VisualInfo, TAG_DONE );
}

int HandleProject1IDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

	while( m = GT_GetIMsg( Project1Wnd->UserPort )) {

		CopyMem(( char * )m, ( char * )&Project1Msg, (long)sizeof( struct IntuiMessage ));

		GT_ReplyIMsg( m );

		switch ( Project1Msg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( Project1Wnd );
				Project1Render();
				GT_EndRefresh( Project1Wnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = Project1CloseWindow();
				break;

			case	IDCMP_RAWKEY:
				running = Project0RawKey();
				break;

			case	IDCMP_GADGETUP:
			case	IDCMP_GADGETDOWN:
				func = ( void * )(( struct Gadget * )Project1Msg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenProject1Window( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	UWORD		lc, tc;
	UWORD		wleft = Project1Left, wtop = Project1Top, ww, wh;

	ComputeFont( Project1Width, Project1Height );

	ww = ComputeX( Project1Width );
	wh = ComputeY( Project1Height );

	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 ( ! ( Project1Font = OpenDiskFont( Font )))
		return( 5L );

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

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

		CopyMem((char * )&Project1NGad[ 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);

		Project1Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project1GTypes[ lc ], g, &ng, ( struct TagItem * )&Project1GTags[ tc ] );

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

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

	if ( ! ( Project1Wnd = OpenWindowTags( NULL,
				 WA_Left, ((Scr->Width) / 2) - (Project1Width / 2),
				 WA_Top, ((Scr->Height) / 2) - (Project1Height / 2),
				WA_Width,	ww + OffX + Scr->WBorRight,
				WA_Height,	wh + OffY + Scr->WBorBottom,
				WA_IDCMP,	BUTTONIDCMP|LISTVIEWIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	Project1GList,
				WA_Title,	Project1Wdt,
				WA_ScreenTitle,	"extended Preferences for DOpus5 - (c)1997-98 by Jens Weyer",
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Project1Wnd, NULL );

	Project1Render();

	return( 0L );
}

void CloseProject1Window( void )
{
	if ( Project1Wnd        ) {
		CloseWindow( Project1Wnd );
		Project1Wnd = NULL;
	}

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

	if ( Project1Font ) {
		CloseFont( Project1Font );
		Project1Font = NULL;
	}
}

// everything above this point was generated by GadToolsBox

void main(int argc, char *argv[])
{
  BOOL running = TRUE;
  GadToolsBase = OpenLibrary("gadtools.library",39L);
  AslBase = OpenLibrary("asl.library",39L);
  if (GadToolsBase && AslBase)  // Got it ?
  {
    memset(AGHelp,0,499);
    GetToolTypes(argv[0]);
    SetupScreen();
    OpenProject0Window();
    InitVarExist();  // Initialise memory and defaults
    LoadENVars(); // ---"--- envars
    while(running == TRUE)
    {
      WaitPort(Project0Wnd->UserPort);   // sleep until message
      running = HandleProject0IDCMP();     // and handle it then
    }
    CloseProject0Window();
    CloseDownScreen();
    CloseLibrary(GadToolsBase);
    CloseLibrary(AslBase);
  } // if (GadToolsBase)
  else
  {
    if (AslBase)
    {
      CloseLibrary(AslBase);
    }
    if (GadToolsBase)
    {
      CloseLibrary(GadToolsBase);
    }
    exit(40);
  }
}

/* This file contains empty template routines that
 * the IDCMP handler will call uppon. Fill out these
 * routines with your code or use them as a reference
 * to create your program.
 */

// Save actual envar values to disk AND memory for instant use

int SaveClicked( void )
{
	/* routine when gadget "_Save" is clicked. */
  PrepSetEnv("ENVARC:DOpus/3DLook",DLook,Do_DLook);
  PrepSetEnv("ENVARC:DOpus/NoNoLabel",NoNoLabel,Do_NoNoLabel);
  PrepSetEnv("ENVARC:DOpus/NoCustomDrag",NoCustomDrag,Do_NoCustomDrag);
  PrepSetEnv("ENVARC:DOpus/QuickIconDrag",QuickIconDrag,Do_QIconDrag);
  PrepSetEnv("ENVARC:DOpus/PopUpDelay",PopTime,Do_PopUpDelay);
  PrepSetEnv("ENVARC:DOpus/ShowUseDatatypesFirst",ShowUseDTFirst,Do_ShUDTFirst);
  PrepSetEnv("ENVARC:DOpus/WorkbenchTitle",WBTitle,Do_WBTitle);
  PrepSetEnv("ENVARC:DOpus/UseWBInfo",UseWBInfo,Do_UseWBInfo);
  PrepSetEnv("ENVARC:DOpus/NoMUFS",NoMUFS,Do_NoMUFS);
  PrepSetEnv("ENVARC:DOpus/Benefy",Benefy,Do_Benefy);
  PrepSetEnv("ENVARC:DOpus/HidePadLock",HidePadLock,Do_HidePadLock);
  PrepSetEnv("ENVARC:DOpus/CommandLineLength",CmdLineLength,Do_CmdLLength);
  PrepSetEnv("ENVARC:DOpus/IconSpaceX",IconSpaceX,Do_IconSpaceX);
  PrepSetEnv("ENVARC:DOpus/IconSpaceY",IconSpaceY,Do_IconSpaceY);
  PrepSetEnv("ENVARC:DOpus/IconGridX",IconGridX,Do_IconGridX);
  PrepSetEnv("ENVARC:DOpus/IconGridY",IconGridY,Do_IconGridY);
  PrepSetEnv("ENVARC:DOpus/ListerEditing",ListerEditing,Do_ListerEditing);
  PrepSetEnv("ENVARC:DOpus/DOSPatch",DOSPatch,Do_DOSPatch);
  UseClicked();
  return(TRUE);
}

// Save actual envar values to memory (WILL BE LOST AFTER REBOOT !)

int UseClicked( void )
{
	/* routine when gadget "Us_e" is clicked. */
  PrepSetEnv("ENV:DOpus/3DLook",DLook,Do_DLook);
  PrepSetEnv("ENV:DOpus/NoNoLabel",NoNoLabel,Do_NoNoLabel);
  PrepSetEnv("ENV:DOpus/NoCustomDrag",NoCustomDrag,Do_NoCustomDrag);
  PrepSetEnv("ENV:DOpus/QuickIconDrag",QuickIconDrag,Do_QIconDrag);
  PrepSetEnv("ENV:DOpus/PopUpDelay",PopTime,Do_PopUpDelay);
  PrepSetEnv("ENV:DOpus/ShowUseDatatypesFirst",ShowUseDTFirst,Do_ShUDTFirst);
  PrepSetEnv("ENV:DOpus/WorkbenchTitle",WBTitle,Do_WBTitle);
  PrepSetEnv("ENV:DOpus/UseWBInfo",UseWBInfo,Do_UseWBInfo);
  PrepSetEnv("ENV:DOpus/NoMUFS",NoMUFS,Do_NoMUFS);
  PrepSetEnv("ENV:DOpus/Benefy",Benefy,Do_Benefy);
  PrepSetEnv("ENV:DOpus/HidePadLock",HidePadLock,Do_HidePadLock);
  PrepSetEnv("ENV:DOpus/CommandLineLength",CmdLineLength,Do_CmdLLength);
  PrepSetEnv("ENV:DOpus/IconSpaceX",IconSpaceX,Do_IconSpaceX);
  PrepSetEnv("ENV:DOpus/IconSpaceY",IconSpaceY,Do_IconSpaceY);
  PrepSetEnv("ENV:DOpus/IconGridX",IconGridX,Do_IconGridX);
  PrepSetEnv("ENV:DOpus/IconGridY",IconGridY,Do_IconGridY);
  PrepSetEnv("ENV:DOpus/ListerEditing",ListerEditing,Do_ListerEditing);
  PrepSetEnv("ENV:DOpus/DOSPatch",DOSPatch,Do_DOSPatch);
  return(TRUE);
}

// Save 'Open with' list to disk (WILL BE USED IN YOUR NEXT DOpus5 SESSION)

int SaveOWClicked( void )
{
	/* routine when gadget "S_ave" is clicked. */
  FILE *f;
  struct Node *Save;
  int i,Len;
  Save = OWList.lh_Head;
  Len = ListLength();
  f = fopen(OWPath,"w");
  if (f)
  {
    for (i = 0; i < Len; i++)
    {
      fprintf(f,"%s\n",Save->ln_Name);
      Save = Save->ln_Succ;
    }
    fclose(f);
  }
  return(TRUE);
}

int LabelClicked( void )
{
	/* routine when gadget "_NoNoLabel" is clicked. */
  NoNoLabel = Project0Msg.Code;
  return(TRUE);
}

int NoCustomDragClicked( void )
{
	/* routine when gadget "_NoCustomDrag" is clicked. */
  NoCustomDrag = Project0Msg.Code;
  return(TRUE);
}

int WBTitleClicked( void )
{
	/* routine when gadget "_WorkbenchTitle" is clicked. */

  WBTitle = Project0Msg.Code;
  return(TRUE);
}

int QuickIconDragClicked( void )
{
	/* routine when gadget "_QuickIconDrag" is clicked. */
  QuickIconDrag = Project0Msg.Code;
  return(TRUE);
}

int UseWBInfoClicked( void )
{
	/* routine when gadget "_UseWBInfo" is clicked. */
  UseWBInfo = Project0Msg.Code;
  return(TRUE);
}

int DTFClicked( void )
{
	/* routine when gadget "Sh_owUseDatatypesFirst" is clicked. */
  ShowUseDTFirst = Project0Msg.Code;
  return(TRUE);
}

int DLookClicked( void )
{
	/* routine when gadget "3D_Look" is clicked. */
  DLook = Project0Msg.Code;
  return(TRUE);
}

int TimePopUpDelayClicked( void )
{
	/* routine when gadget "in 1/50 secs." is clicked. */
  PopTime = GetNum(8);
  return(TRUE);
}

int NoMUFSClicked( void )
{
	/* routine when gadget "No_MultiUser" is clicked. */
  NoMUFS = Project0Msg.Code;
  return(TRUE);
}

int BenefyClicked( void )
{
	/* routine when gadget "_Benefy" is clicked. */
  Benefy = Project0Msg.Code;
  return(TRUE);
}

int HidePadLockClicked( void )
{
	/* routine when gadget "_HidePadLock" is clicked. */
  HidePadLock = Project0Msg.Code;
  return(TRUE);
}

int LengthOfCmdLineClicked( void )
{
	/* routine when gadget "chars" is clicked. */
  CmdLineLength = GetNum(13);
  return(TRUE);
}

int IconSpaceXClicked( void )
{
	/* routine when gadget "IconSpaceX" is clicked. */
  IconSpaceX = GetNum(14);
  return(TRUE);
}

int IconSpaceYClicked( void )
{
	/* routine when gadget "Y" is clicked. */
  IconSpaceY = GetNum(15);
  return(TRUE);
}

int IconGridXClicked( void )
{
	/* routine when gadget "IconGrid_X" is clicked. */
  IconGridX = Project0Msg.Code;
  return(TRUE);
}

int IconGridYClicked( void )
{
	/* routine when gadget "IconGrid_Y" is clicked. */
  IconGridY = Project0Msg.Code;
  return(TRUE);
}

int LEdClicked( void )
{
	/* routine when gadget "L_isterEditing" is clicked. */
  ListerEditing = Project0Msg.Code;
  return(TRUE);
}

int DOSPatchClicked( void )
{
	/* routine when gadget "_DOSPatch" is clicked. */
  DOSPatch = Project0Msg.Code;
  return(TRUE);
}

int WinGadCycOWClicked( void )
{
	/* routine when gadget "Edit 'Open with'..." is clicked. */
  BOOL going = TRUE;
  DisableAll();
  OpenProject1Window();
  LoadOW();       // Initialise 'Open with' list
  while(going)
  {
    WaitPort(Project1Wnd->UserPort);
    going = HandleProject1IDCMP();
  }
  CloseProject1Window();
  EnableAll();
  return(TRUE);
}

/*
  * List management functions
  */

// Get selected entry on click

int OWEntriesClicked( void )
{
	/* routine when gadget "'Open with' entries:" is clicked. */
  ActOWE = Project1Msg.Code;
  PrintOWName(ActOWE);
  return(TRUE);
}

// Add a new entry to the 'Open with' list

int AddOWEntryClicked( void )
{
	/* routine when gadget "Add" is clicked. */
  struct FileRequester *fr = NULL;
  struct Node *Add;
  char Entered[1024];
  int opened = 0;

  fr = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
  		ASLFR_Window, Project0Wnd,
  		ASLFR_Screen, Scr,
  		ASLFR_TitleText, "Select a tool to add:",
		ASLFR_InitialLeftEdge, 0,
		ASLFR_InitialTopEdge, 20,
		ASLFR_InitialWidth, 400,
		ASLFR_InitialHeight, 200,
		ASLFR_RejectIcons, TRUE,
		TAG_DONE);
  if (fr)
  {
    opened = AslRequest(fr, NULL);
    if (opened)
    {
      strcpy(Entered,(fr->fr_Drawer));
      AddPart(Entered,fr->fr_File,1023);
      if (Exists(Entered))
      {
        Add = AllocVec(sizeof(struct Node), MEMF_CLEAR | MEMF_ANY);
        Add->ln_Name = AllocVec(strlen(Entered) + 1, MEMF_CLEAR | MEMF_ANY);
        strcpy(Add->ln_Name,Entered);
        SetList(0);
        AddTail(&OWList,(struct Node *)Add);
        ActOWE = ListLength();
        SetList(2);
        PrintOWName(ActOWE);
      }
      else
      {
        DisplayBeep(NULL);
      }
    }
    else
    {
      DisplayBeep(NULL);
    }
    FreeAslRequest(fr);
  }
  return(TRUE);
}

// Del the selected entry from list and memory

int DelOWEntryClicked( void )
{
	/* routine when gadget "Del" is clicked. */
  struct Node *n;
  int i;
  if (!IsListEmpty(&OWList) && ActOWE != -1)
  {
    n = OWList.lh_Head;
    for (i = 0; i < ActOWE; i++)
    {
      n = n->ln_Succ;
    }
    SetList(0);
    Remove(n);
    FreeVec(n->ln_Name);
    FreeVec(n);
    if (IsListEmpty(&OWList))
    {
      ActOWE = -1;
      SetList(1);
    }
    else
    {
      SetList(2);
      PrintOWName(ActOWE);
    }
  }
  return(TRUE);
}

// Move the selected entry to a higher 'level' in the list

int MoveOWEUpClicked( void )
{
	/* routine when gadget "Up" is clicked. */
  struct Node *Storage;
  struct Node *n;
  int i;
  if (ActOWE != 0 && ActOWE != -1 && !IsListEmpty(&OWList))
  {
    Storage = OWList.lh_Head;
    for (i = 0; i < ActOWE; i++)
    {
      Storage = Storage->ln_Succ;
    }
    SetList(0);
    n = Storage->ln_Pred->ln_Pred;
    Remove(Storage);
    Insert(&OWList,Storage,n);
    ActOWE--;
    SetList(2);
  }
  return(TRUE);
}

// Move the selected entry to a lower 'level' in the list

int MoveOWEDownClicked( void )
{
	/* routine when gadget "Down" is clicked. */
  struct Node *Storage;
  struct Node *n;
  int i, Len;
  Len = ListLength();
  if (ActOWE < Len && !IsListEmpty(&OWList) && ActOWE != -1)
  {
    Storage = OWList.lh_Head;
    for (i = 0; i < ActOWE; i++)
    {
      Storage = Storage->ln_Succ;
    }
    SetList(0);
    n = Storage->ln_Succ;
    Remove(Storage);
    Insert(&OWList,Storage,n);
    ActOWE++;
    SetList(2);
  }
  return(TRUE);
}

/*
  * Misc functions
  */

int Project0About( void )
{
	/* routine when (sub)item "About..." is selected. */
  EasyReq(Project0Wnd,"About DO5extPrefs","DO5extPrefs v1.5\nCopyright (c)1997-98 by Jens Weyer.\nFREEWARE\n\nENV - Var editor for DOpus5 Magellan +.\n\nDOpus Magellan + is Copyright (c)\nJonathan Potter & GPSoftware.","Ok");
  return(TRUE);
}

int Project0Save( void )
{
	/* routine when (sub)item "Save" is selected. */
  SaveClicked();
  return(TRUE);
}

int Project0Use( void )
{
	/* routine when (sub)item "Use" is selected. */
  UseClicked();
  return(TRUE);
}

int Project0SaveOWE( void )
{
	/* routine when (sub)item "Save" is selected. */
  return(SaveOWClicked());
}

int Project0Quit( void )
{
	/* routine when (sub)item "Quit" is selected. */
  return(FALSE);
}

int Project0CloseWindow( void )
{
	/* routine for "IDCMP_CLOSEWINDOW". */
  return(Project0Quit());
}

int Project1CloseWindow( void )
{
	/* routine for "IDCMP_CLOSEWINDOW". */
  FreeOWList();
  return(FALSE);
}

// Handle incoming key events

int Project0VanillaKey( void )
{
	/* routine for "IDCMP_VANILLAKEY". */
  switch(Project0Msg.Code)
  {
    case 's':
    case 'S':
                   SaveClicked();
                   break;
    case 'e':
    case 'E':
                   UseClicked();
                   break;
    case 'n':
    case 'N':
                   NoNoLabel = SwapState(NoNoLabel,1);
                   break;
    case 'c':
    case 'C':
                   NoCustomDrag = SwapState(NoCustomDrag,2);
                   break;
    case 'w':
    case 'W':
                    WBTitle = SwapState(WBTitle,3);
                    break;
    case 'q':
    case 'Q':
                   QuickIconDrag = SwapState(QuickIconDrag,4);
                   break;
    case 'u':
    case 'U':
                  UseWBInfo = SwapState(UseWBInfo,5);
                  break;
    case 'o':
    case 'O':
                   ShowUseDTFirst = SwapState(ShowUseDTFirst,6);
                   break;
    case 'l':
    case 'L':
                  DLook = SwapState(DLook,7);
                  break;
    case 'm':
    case 'M':
                  NoMUFS = SwapState(NoMUFS,10);
                  break;
    case 'b':
    case 'B':
                  Benefy = SwapState(Benefy,11);
                  break;
    case 'h':
    case 'H':
                  HidePadLock = SwapState(HidePadLock,12);
                  break;
    case 'x':
    case 'X':
                  IconGridX = SwapState(IconGridX,16);
                  break;
    case 'y':
    case 'Y':
                  IconGridY = SwapState(IconGridY,17);
                  break;
    case 'i':
    case 'I':
                  ListerEditing = SwapState(ListerEditing,18);
                  break;
    case 'd':
    case 'D':
                  DOSPatch = SwapState(DOSPatch,19);
                  break;
  }
  return(TRUE);
}

// Swap a checkbox gadget

int SwapState(int State, int Gad)
{
  if (State)
  {
    GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
                                     GTCB_Checked, 0,
                                     TAG_DONE);
    State = 0;
  }
  else
  {
    GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
                                     GTCB_Checked, 1,
                                     TAG_DONE);
    State = 1;
  }
  return(State);
}

// Initialisation of the envars

void LoadENVars(void)
{
  DLook = GetEnv("ENV:DOpus/3DLook",Do_DLook);
  NoNoLabel = GetEnv("ENV:DOpus/NoNoLabel",Do_NoNoLabel);
  NoCustomDrag = GetEnv("ENV:DOpus/NoCustomDrag",Do_NoCustomDrag);
  QuickIconDrag = GetEnv("ENV:DOpus/QuickIconDrag",Do_QIconDrag);
  PopTime = GetEnv("ENV:DOpus/PopUpDelay",Do_PopUpDelay);
  ShowUseDTFirst = GetEnv("ENV:DOpus/ShowUseDatatypesFirst",Do_ShUDTFirst);
  WBTitle = GetEnv("ENV:DOpus/WorkbenchTitle",Do_WBTitle);
  UseWBInfo = GetEnv("ENV:DOpus/UseWBInfo",Do_UseWBInfo);
  NoMUFS = GetEnv("ENV:DOpus/NoMUFS",Do_NoMUFS);
  Benefy = GetEnv("ENV:DOpus/Benefy",Do_Benefy);
  HidePadLock = GetEnv("ENV:DOpus/HidePadLock",Do_HidePadLock);
  CmdLineLength = GetEnv("ENV:DOpus/CommandLineLength",Do_CmdLLength);
  IconSpaceX = GetEnv("ENV:DOpus/IconSpaceX",Do_IconSpaceX);
  IconSpaceY = GetEnv("ENV:DOpus/IconSpaceY",Do_IconSpaceY);
  IconGridX = GetEnv("ENV:DOpus/IconGridX",Do_IconGridX);
  IconGridY = GetEnv("ENV:DOpus/IconGridY",Do_IconGridY);
  ListerEditing = GetEnv("ENV:DOpus/ListerEditing",Do_ListerEditing);
  DOSPatch = GetEnv("ENV:DOpus/DOSPatch",Do_DOSPatch);
  if (PopTime == 0 && Exists("ENV:DOpus/PopUpDelay") == 0)
  {
    PopTime = 10;
  }
  if (CmdLineLength == 0 && Exists("ENV:DOpus/CommandLineLength") == 0)
  {
    CmdLineLength = 512;
  }
  if (IconSpaceX == 0 && Exists("ENV:DOpus/IconSpaceX") == 0)
  {
    IconSpaceX = 3;
  }
  if (IconSpaceY == 0 && Exists("ENV:DOpus/IconSpaceY") == 0)
  {
    IconSpaceY = 5;
  }
  SwapCheck(NoNoLabel,1);
  SwapCheck(NoCustomDrag,2);
  SwapCheck(WBTitle,3);
  SwapCheck(QuickIconDrag,4);
  SwapCheck(UseWBInfo,5);
  SwapCheck(ShowUseDTFirst,6);
  SwapCheck(DLook,7);
  SwapCheck(NoMUFS,10);
  SwapCheck(Benefy,11);
  SwapCheck(HidePadLock,12);
  SwapCheck(IconGridX,16);
  SwapCheck(IconGridY,17);
  SwapCheck(ListerEditing,18);
  SwapCheck(DOSPatch,19);
  SetNum(PopTime,8);
  SetNum(CmdLineLength,13);
  SetNum(IconSpaceX,14);
  SetNum(IconSpaceY,15);
  return;
}

// Swap a checkbox gadget appearance (NOT THE VALUES)

void SwapCheck(int State, int Gad)
{
  if (State)
  {
    GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
                                     GTCB_Checked, 1,
                                     TAG_DONE);
  }
  return;
}

// Own envar load function

int GetEnv(char *File, int Loc)
{
  FILE *f;
  int Value = 0;
  f = fopen(File,"r");
  if (f)
  {
    fscanf(f,"%4ld",&Value);
    fclose(f);
    VarExist[Loc] = 1;
  }
  return(Value);
}

// Own envar save function

void SetEnv(char *File, int Value, int Loc)
{
  FILE *f;
  f = fopen(File,"w");
  if (f)
  {
    fprintf(f,"%ld\n",Value);
    fclose(f);
  }
  return;
}

// Initialise memory and default values

void InitVarExist(void)
{
  int i;
  for(i = 0; i < VarMemSize; i++)
  {
    VarExist[i] = -1;
  }
  VarDefault[Do_DLook] = 0;
  VarDefault[Do_NoNoLabel] = 0;
  VarDefault[Do_NoCustomDrag] = 0;
  VarDefault[Do_QIconDrag] = 0;
  VarDefault[Do_PopUpDelay] = 10;
  VarDefault[Do_ShUDTFirst] = 0;
  VarDefault[Do_WBTitle] = 0;
  VarDefault[Do_NoMUFS] = 0;
  VarDefault[Do_Benefy] = 0;
  VarDefault[Do_HidePadLock] = 0;
  VarDefault[Do_CmdLLength] = 512;
  VarDefault[Do_IconSpaceX] = 3;
  VarDefault[Do_IconSpaceY] = 5;
  VarDefault[Do_IconGridX] = 0;
  VarDefault[Do_IconGridY] = 0;
  VarDefault[Do_ListerEditing] = 0;
  VarDefault[Do_DOSPatch] = 0;
  return;
}

// Preprocessing envar saving function (see guide / developer for further information)

void PrepSetEnv(char *File,int Value,int Loc)
{
  if (VarExist[Loc] != -1)
  {
    if (Value == VarDefault[Loc])
    {
      DeleteFile(File);
    }
    else
    {
      SetEnv(File,Value,Loc);
    }
  }
  else
  {
    if (Value != VarDefault[Loc])
    {
      SetEnv(File,Value,Loc);
    }
    else
    {
      DeleteFile(File);
    }
  }
  return;
}

// Set the value of an integer gadget display

void SetNum(int Value,int Gad)
{
  GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
                                   GTIN_Number,Value,
                                   TAG_DONE);
  return;
}

// Get the value from an integer gadget

int GetNum(int Gad)
{
  int Wert = 0;
  GT_GetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
                                   GTIN_Number, &Wert,
                                   TAG_DONE);
  return(Wert);
}

// Simple check-function to be sure, that a drawer/file really exists

int Exists(char *datei)
{
  BPTR mylock;
  int i = 0;
  mylock = Lock(datei,SHARED_LOCK);
  if (mylock)
  {
    i = 1;
  }
  UnLock(mylock);
  return i;
}

// Handle keyboard events (RAW)

int Project0RawKey(void)
{
  char ExeHelp[512];
  if (Project0Msg.Code == 95 && strlen(AGHelp) != 0)
  {

    // will be replaced by amigaguide.library functions in next version

    strcpy(ExeHelp,"MultiView ");
    strcat(ExeHelp,AGHelp);
    Execute(ExeHelp,0,0);
  } // if (Project0Msg.Code...)
  return(TRUE);
} // int Project0RawKey()

// Initialise presets from icon's tooltypes

void GetToolTypes(char *IconPath)
{
  struct DiskObject *Icon = NULL;
  Icon = GetDiskObject(IconPath);
  if (Icon)
  {
    char *Types;
    if (Types = FindToolType((UBYTE **)Icon->do_ToolTypes,"HELP"))
    {
      strcpy(AGHelp,Types);
    } // if (Types = ...)
    FreeDiskObject(Icon);
  } // if (Icon)
  return;
} // void GetToolTypes()

// Initialise 'Open with' list

void LoadOW(void)
{
  FILE *ow;
  struct Node *OWEntry;
  char Entry[512];
  char *Test;
  if (Exists(OWPath))
  {
    NewList(&OWList);
    ow = fopen(OWPath,"r");
    if (ow)
    {
      while(Test != NULL)
      {
        Test = fgets(Entry,511,ow);
        OWEntry = AllocVec(sizeof(struct Node), MEMF_CLEAR | MEMF_ANY);
        OWEntry->ln_Name = AllocVec(strlen(Entry) + 1, MEMF_CLEAR | MEMF_ANY);
        strcpy(OWEntry->ln_Name,Entry);
        AddTail(&OWList,(struct Node *)OWEntry);
      }
      OWEntry = RemTail(&OWList);
      if (OWEntry)
      {
        FreeVec(OWEntry->ln_Name);
        FreeVec(OWEntry);
      }
      fclose(ow);
      SetList(1);
    }
  }
  return;
}

// Handle liistview (1 = normal / 0 = unlinked  / 2 = normal with display stuff ... )

void SetList(int State)
{
  if (State == 1)
  {
    GT_SetGadgetAttrs(Project1Gadgets[1],Project1Wnd,NULL,
    					GTLV_Labels, &OWList,
    					TAG_DONE);
  }
  else if (!State)
  {
    GT_SetGadgetAttrs(Project1Gadgets[1],Project1Wnd,NULL,
    					GTLV_Labels, ~0L,
    					TAG_DONE);
  }
  else
  {
    int Len = ListLength();
    if (ActOWE == Len)
    {
      ActOWE--;
    }
    GT_SetGadgetAttrs(Project1Gadgets[1],Project1Wnd,NULL,
    					GTLV_Labels, &OWList,
    					GTLV_Selected, ActOWE,
    					GTLV_Top, ActOWE,
    					TAG_DONE);
  }
  return;
}

// Free used memory for 'Open with' list

void FreeOWList(void)
{
  struct Node *Rem;
  if (IsListEmpty(&OWList) == FALSE)
  {
    while(Rem = RemTail(&OWList))
    {
      FreeVec(Rem->ln_Name);
      FreeVec(Rem);
    }
  }
  return;
}

// Examine the length of the 'Open with' list

int ListLength(void) {
  struct Node *n;
  int count = 0;
  for ( n = OWList.lh_Head; n->ln_Succ ; n=n->ln_Succ,count++ );
  return count;
} // ListLength

// Print filename only of the actual 'Open with' entry

void PrintOWName(int Pos)
{
  struct Node *n;
  int i;
  n = OWList.lh_Head;
  for (i = 0; i < Pos; i++)
  {
    n = n->ln_Succ;
  }
  GT_SetGadgetAttrs(Project1Gadgets[6],Project1Wnd,NULL,
  					GTTX_Text, FilePart(n->ln_Name),
  					TAG_DONE);
  return;
}

void DisableAll(void)
{
  int i;
  for (i = 0; i < Project0_CNT; i++)
  {
    GT_SetGadgetAttrs(Project0Gadgets[i],Project0Wnd,NULL,
                                     GA_Disabled, TRUE,
                                     TAG_DONE);
  }
  return;
}

void EnableAll(void)
{
  int i;
  for (i = 0; i < Project0_CNT; i++)
  {
    GT_SetGadgetAttrs(Project0Gadgets[i],Project0Wnd,NULL,
                                     GA_Disabled, FALSE,
                                     TAG_DONE);
  }
  return;
}

