home *** CD-ROM | disk | FTP | other *** search
Wrap
/* * 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; }