home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 2 / MECOMP-CD-II.iso / amiga / tools / opus / opus-5.x / do5extprefs / do5extprefs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-10  |  39.8 KB  |  1,568 lines

  1. /*
  2.  *  Name    : Do5extPrefs.c
  3.  *  Version : 1.5  (30-Apr-1998)
  4.  *  Compiler: MaxonC++ V4.0 Pro
  5.  *  Author  : Jens Weyer (stealth@sol.de)
  6.  *  Status  : FREEWARE
  7.  *
  8.  *
  9.  *  LEGAL STUFF
  10.  *  -----------
  11.  *    You may use any source in your own project,
  12.  *  as long as you say, where you got it from and
  13.  *  who is the (original) author.
  14.  *    It would be nice, if you would include this
  15.  *  header in your guide then.
  16.  *
  17.  *    This source is given "AS IS" ! The author
  18.  *  (= me = Jens Weyer) neither does NOT take any
  19.  *  responsibilty for lost data / hard- & software
  20.  *  crashes nor will pay something for these.
  21.  *
  22.  *    This source MUST NOT removed from the archive.
  23.  *  It has to be distributed with it.
  24.  *
  25.  * ----
  26.  *
  27.  *    Please read the documentation for further
  28.  *  information !
  29.  */
  30.  
  31. /*
  32.  *  Source machine generated by GadToolsBox V2.0b
  33.  *  which is (c) Copyright 1991-1993 Jaba Development
  34.  *
  35.  *  GUI Designed by : Jens Weyer
  36.  */
  37.  
  38. // General includes
  39.  
  40. #include <exec/types.h>
  41. #include <exec/lists.h>
  42. #include <exec/memory.h>
  43. #include <intuition/intuition.h>
  44. #include <intuition/classes.h>
  45. #include <intuition/classusr.h>
  46. #include <intuition/imageclass.h>
  47. #include <intuition/gadgetclass.h>
  48. #include <libraries/gadtools.h>
  49. #include <libraries/asl.h>
  50. #include <graphics/displayinfo.h>
  51. #include <graphics/gfxbase.h>
  52. #include <clib/exec_protos.h>
  53. #include <clib/intuition_protos.h>
  54. #include <clib/gadtools_protos.h>
  55. #include <clib/graphics_protos.h>
  56. #include <clib/utility_protos.h>
  57. #include <string.h>
  58. #include <stdio.h>
  59. #include <stdlib.h>
  60. #include <clib/diskfont_protos.h>
  61.  
  62. // pragmas
  63.  
  64. #include <pragmas/exec_pragmas.h>
  65. #include <pragmas/intuition_pragmas.h>
  66. #include <pragmas/gadtools_pragmas.h>
  67. #include <pragmas/graphics_pragmas.h>
  68. #include <pragmas/utility_pragmas.h>
  69. #include <pragma/diskfont_lib.h>
  70. #include <pragma/dos_lib.h>
  71. #include <pragma/icon_lib.h>
  72. #include <pragma/asl_lib.h>
  73.  
  74. // my EasyRequestArgs() Template include
  75.  
  76. #include <my/EasyReq.h>
  77.  
  78. // Maxon startup include (very well done by Maxon !)
  79.  
  80. #include <wbstartup.h>
  81.  
  82. #include "Do5extPrefs15_1.h"
  83.  
  84. // some declarations
  85.  
  86. int EasyReq(struct Window *, char *, char *, char *);
  87. int ListLength(void);
  88. int SwapState(int,int);
  89. int GetEnv(char *,int);
  90. int GetNum(int);
  91. int Exists(char *);
  92. void LoadENVars(void);
  93. void SwapCheck(int,int);
  94. void SetEnv(char *, int,int);
  95. void InitVarExist(void);
  96. void PrepSetEnv(char *,int,int);
  97. void SetNum(int,int);
  98. void GetToolTypes(char *);
  99. void LoadOW(void);
  100. void SetList(int);
  101. void FreeOWList(void);
  102. void PrintOWName(int);
  103. void DisableAll(void);
  104. void EnableAll(void);
  105.  
  106. int NewList(struct List *);   // normally not necessary, but MaxonC gives a warning...
  107.  
  108. static unsigned char *version = "$VER:DO5extPrefs 1.5  ("__DATE__") by Jens Weyer for DOpus 5.65+";
  109.  
  110. struct Library     *GadToolsBase;
  111. struct Library     *AslBase;
  112. struct List           OWList;
  113. static char          *OWPath = "Dopus5:System/OpenWith";
  114. int                        ActOWE = -1;
  115.  
  116. int                        VarExist[VarMemSize];
  117. int                        VarDefault[VarMemSize];
  118. int                        NoNoLabel = 0;
  119. int                        DLook = 0;
  120. int                        NoCustomDrag = 0;
  121. int                        ShowUseDTFirst = 0;
  122. int                        UseWBInfo = 0;
  123. int                        WBTitle = 0;
  124. int                        QuickIconDrag = 0;
  125. int                        PopTime = 10;
  126. int                        NoMUFS = 0;
  127. int                        Benefy = 0;
  128. int                        HidePadLock = 0;
  129. int                        CmdLineLength = 512;
  130. int                        IconSpaceX = 3;
  131. int                        IconSpaceY = 5;
  132. int                        IconGridX = 0;
  133. int                        IconGridY = 0;
  134. int                        ListerEditing = 0;
  135. int                        DOSPatch = 0;
  136. char                    AGHelp[500];
  137.  
  138. struct Screen         *Scr = NULL;
  139. UBYTE                 *PubScreenName = "Workbench";
  140. APTR                   VisualInfo = NULL;
  141. struct Window         *Project0Wnd = NULL;
  142. struct Window         *Project1Wnd = NULL;
  143. struct Gadget         *Project0GList = NULL;
  144. struct Gadget         *Project1GList = NULL;
  145. struct Menu           *Project0Menus = NULL;
  146. struct IntuiMessage    Project0Msg;
  147. struct IntuiMessage    Project1Msg;
  148. struct Gadget         *Project0Gadgets[21];
  149. struct Gadget         *Project1Gadgets[7];
  150. UWORD                  Project0Left = 10;
  151. UWORD                  Project0Top = 15;
  152. UWORD                  Project0Width = 334;
  153. UWORD                  Project0Height = 241;
  154. UWORD                  Project1Left = 10;
  155. UWORD                  Project1Top = 15;
  156. UWORD                  Project1Width = 231;
  157. UWORD                  Project1Height = 221;
  158. UBYTE                 *Project0Wdt = (UBYTE *)"DO5extPrefs v1.5";
  159. UBYTE                 *Project1Wdt = Project0Wdt;
  160. struct TextAttr       *Font, Attr;
  161. UWORD                  FontX, FontY;
  162. UWORD                  OffX, OffY;
  163. struct TextFont       *Project0Font = NULL;
  164. struct TextFont       *Project1Font = NULL;
  165.  
  166. struct NewMenu Project0NewMenu[] = {
  167.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  168.     NM_ITEM, (STRPTR)"About...", (STRPTR)"?", 0, 0L, (APTR)Project0About,
  169.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  170.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)Project0Quit,
  171.     NM_TITLE, (STRPTR)"Data", NULL, 0, NULL, NULL,
  172.     NM_ITEM, (STRPTR)"ENVars", NULL, 0, NULL, NULL,
  173.     NM_SUB, (STRPTR)"Use", (STRPTR)"U", 0, 0L, (APTR)Project0Use,
  174.     NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  175.     NM_SUB, (STRPTR)"Save", (STRPTR)"S", 0, 0L, (APTR)Project0Save,
  176.     NM_ITEM, (STRPTR)"Open with", NULL, 0, NULL, NULL,
  177.     NM_SUB, (STRPTR)"Save", NULL, 0, 0L, (APTR)Project0SaveOWE,
  178.     NM_END, NULL, NULL, 0, 0L, NULL };
  179.  
  180. UWORD Project0GTypes[] = {
  181.     BUTTON_KIND,
  182.     CHECKBOX_KIND,
  183.     CHECKBOX_KIND,
  184.     CHECKBOX_KIND,
  185.     CHECKBOX_KIND,
  186.     CHECKBOX_KIND,
  187.     CHECKBOX_KIND,
  188.     CHECKBOX_KIND,
  189.     INTEGER_KIND,
  190.     BUTTON_KIND,
  191.     CHECKBOX_KIND,
  192.     CHECKBOX_KIND,
  193.     CHECKBOX_KIND,
  194.     INTEGER_KIND,
  195.     INTEGER_KIND,
  196.     INTEGER_KIND,
  197.     CHECKBOX_KIND,
  198.     CHECKBOX_KIND,
  199.     CHECKBOX_KIND,
  200.     CHECKBOX_KIND,
  201.     BUTTON_KIND
  202. };
  203.  
  204. UWORD Project1GTypes[] = {
  205.     BUTTON_KIND,
  206.     LISTVIEW_KIND,
  207.     BUTTON_KIND,
  208.     BUTTON_KIND,
  209.     BUTTON_KIND,
  210.     BUTTON_KIND,
  211.     TEXT_KIND
  212. };
  213.  
  214. struct NewGadget Project0NGad[] = {
  215.     5, 198, 147, 16, (UBYTE *)"_Save", NULL, GD_Save, PLACETEXT_IN, NULL, (APTR)SaveClicked,
  216.     121, 7, 26, 11, (UBYTE *)"_NoNoLabel", NULL, GD_Label, PLACETEXT_LEFT, NULL, (APTR)LabelClicked,
  217.     121, 24, 26, 11, (UBYTE *)"No_CustomDrag", NULL, GD_NoCustomDrag, PLACETEXT_LEFT, NULL, (APTR)NoCustomDragClicked,
  218.     121, 42, 26, 11, (UBYTE *)"_WorkbenchTitle", NULL, GD_WBTitle, PLACETEXT_LEFT, NULL, (APTR)WBTitleClicked,
  219.     121, 61, 26, 11, (UBYTE *)"_QuickIconDrag", NULL, GD_QuickIconDrag, PLACETEXT_LEFT, NULL, (APTR)QuickIconDragClicked,
  220.     161, 7, 26, 11, (UBYTE *)"_UseWBInfo", NULL, GD_UseWBInfo, PLACETEXT_RIGHT, NULL, (APTR)UseWBInfoClicked,
  221.     161, 24, 26, 11, (UBYTE *)"Sh_owUseDatatypesFirst", NULL, GD_DTF, PLACETEXT_RIGHT, NULL, (APTR)DTFClicked,
  222.     161, 42, 26, 11, (UBYTE *)"3D_Look", NULL, GD_DLook, PLACETEXT_RIGHT, NULL, (APTR)DLookClicked,
  223.     197, 134, 53, 16, (UBYTE *)"PopUpDelay (in 1/50 secs.)", NULL, GD_TimePopUpDelay, PLACETEXT_LEFT, NULL, (APTR)TimePopUpDelayClicked,
  224.     182, 197, 147, 16, (UBYTE *)"Us_e", NULL, GD_Use, PLACETEXT_IN, NULL, (APTR)UseClicked,
  225.     161, 61, 26, 11, (UBYTE *)"No_MultiUser", NULL, GD_NoMUFS, PLACETEXT_RIGHT, NULL, (APTR)NoMUFSClicked,
  226.     121, 80, 26, 11, (UBYTE *)"_Benefy", NULL, GD_Benefy, PLACETEXT_LEFT, NULL, (APTR)BenefyClicked,
  227.     161, 80, 26, 11, (UBYTE *)"_HidePadLock", NULL, GD_HidePadLock, PLACETEXT_RIGHT, NULL, (APTR)HidePadLockClicked,
  228.     197, 152, 53, 16, (UBYTE *)"CommandLineLength (in chars)", NULL, GD_LengthOfCmdLine, PLACETEXT_LEFT, NULL, (APTR)LengthOfCmdLineClicked,
  229.     95, 171, 53, 16, (UBYTE *)"IconSpaceX", NULL, GD_IconSpaceX, PLACETEXT_LEFT, NULL, (APTR)IconSpaceXClicked,
  230.     166, 171, 53, 16, (UBYTE *)"Y", NULL, GD_IconSpaceY, PLACETEXT_LEFT, NULL, (APTR)IconSpaceYClicked,
  231.     121, 98, 26, 11, (UBYTE *)"IconGrid_X", NULL, GD_IconGridX, PLACETEXT_LEFT, NULL, (APTR)IconGridXClicked,
  232.     161, 98, 26, 11, (UBYTE *)"IconGrid_Y", NULL, GD_IconGridY, PLACETEXT_RIGHT, NULL, (APTR)IconGridYClicked,
  233.     121, 116, 26, 11, (UBYTE *)"L_isterEditing", NULL, GD_LEd, PLACETEXT_LEFT, NULL, (APTR)LEdClicked,
  234.     161, 116, 26, 11, (UBYTE *)"_DOSPatch", NULL, GD_DOSPatch, PLACETEXT_RIGHT, NULL, (APTR)DOSPatchClicked,
  235.     5, 221, 324, 16, (UBYTE *)"Edit 'Open with'...", NULL, GD_WinGadCycOW, PLACETEXT_IN, NULL, (APTR)WinGadCycOWClicked
  236. };
  237.  
  238. struct NewGadget Project1NGad[] = {
  239.     44, 197, 147, 16, (UBYTE *)"Save", NULL, GD_SaveOW, PLACETEXT_IN, NULL, (APTR)SaveOWClicked,
  240.     11, 25, 149, 154, (UBYTE *)"'Open with' entries:", NULL, GD_OWEntries, PLACETEXT_ABOVE, NULL, (APTR)OWEntriesClicked,
  241.     163, 25, 58, 18, (UBYTE *)"Add", NULL, GD_AddOWEntry, PLACETEXT_IN, NULL, (APTR)AddOWEntryClicked,
  242.     163, 45, 58, 18, (UBYTE *)"Del", NULL, GD_DelOWEntry, PLACETEXT_IN, NULL, (APTR)DelOWEntryClicked,
  243.     163, 81, 58, 18, (UBYTE *)"Up", NULL, GD_MoveOWEUp, PLACETEXT_IN, NULL, (APTR)MoveOWEUpClicked,
  244.     163, 101, 58, 18, (UBYTE *)"Down", NULL, GD_MoveOWEDown, PLACETEXT_IN, NULL, (APTR)MoveOWEDownClicked,
  245.     11, 172, 209, 20, NULL, NULL, GD_DisplayOWName, 0, NULL, NULL
  246. };
  247.  
  248. ULONG Project0GTags[] = {
  249.     (GT_Underscore), '_', (TAG_DONE),
  250.     (GT_Underscore), '_', (TAG_DONE),
  251.     (GT_Underscore), '_', (TAG_DONE),
  252.     (GT_Underscore), '_', (TAG_DONE),
  253.     (GT_Underscore), '_', (TAG_DONE),
  254.     (GT_Underscore), '_', (TAG_DONE),
  255.     (GT_Underscore), '_', (TAG_DONE),
  256.     (GT_Underscore), '_', (TAG_DONE),
  257.     (GA_TabCycle), FALSE, (GTIN_Number), 10, (GTIN_MaxChars), 10, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
  258.     (GT_Underscore), '_', (TAG_DONE),
  259.     (GT_Underscore), '_', (TAG_DONE),
  260.     (GT_Underscore), '_', (TAG_DONE),
  261.     (GT_Underscore), '_', (TAG_DONE),
  262.     (GA_TabCycle), FALSE, (GTIN_Number), 512, (GTIN_MaxChars), 4, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
  263.     (GA_TabCycle), FALSE, (GTIN_Number), 3, (GTIN_MaxChars), 2, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
  264.     (GA_TabCycle), FALSE, (GTIN_Number), 5, (GTIN_MaxChars), 2, (STRINGA_Justification), (GACT_STRINGCENTER), (TAG_DONE),
  265.     (GT_Underscore), '_', (TAG_DONE),
  266.     (GT_Underscore), '_', (TAG_DONE),
  267.     (GT_Underscore), '_', (TAG_DONE),
  268.     (GT_Underscore), '_', (TAG_DONE),
  269.     (GT_Underscore), '_', (TAG_DONE)
  270. };
  271.  
  272. ULONG Project1GTags[] = {
  273.     (GT_Underscore), '_', (TAG_DONE),
  274.     (GTLV_ShowSelected), NULL, (TAG_DONE),
  275.     (TAG_DONE),
  276.     (TAG_DONE),
  277.     (TAG_DONE),
  278.     (TAG_DONE),
  279.     (GTTX_Border), TRUE, (TAG_DONE)
  280. };
  281.  
  282. static UWORD ComputeX( UWORD value )
  283. {
  284.     return(( UWORD )((( FontX * value ) + 3 ) / 6 ));
  285. }
  286.  
  287. static UWORD ComputeY( UWORD value )
  288. {
  289.     return(( UWORD )((( FontY * value ) + 5 ) / 11 ));
  290. }
  291.  
  292. static void ComputeFont( UWORD width, UWORD height )
  293. {
  294.     Forbid();
  295.     Font = &Attr;
  296.     Font->ta_Name = (STRPTR)GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name;
  297.     Font->ta_YSize = FontY = GfxBase->DefaultFont->tf_YSize;
  298.     FontX = GfxBase->DefaultFont->tf_XSize;
  299.     Permit();
  300.  
  301.     OffX = Scr->WBorLeft;
  302.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  303.  
  304.     if ( width && height ) {
  305.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  306.             goto UseTopaz;
  307.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  308.             goto UseTopaz;
  309.     }
  310.     return;
  311.  
  312. UseTopaz:
  313.     Font->ta_Name = (STRPTR)"topaz.font";
  314.     FontX = FontY = Font->ta_YSize = 8;
  315. }
  316.  
  317. int SetupScreen( void )
  318. {
  319.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  320.         return( 1L );
  321.  
  322.     ComputeFont( 0, 0 );
  323.  
  324.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  325.         return( 2L );
  326.  
  327.     return( 0L );
  328. }
  329.  
  330. void CloseDownScreen( void )
  331. {
  332.     if ( VisualInfo ) {
  333.         FreeVisualInfo( VisualInfo );
  334.         VisualInfo = NULL;
  335.     }
  336.  
  337.     if ( Scr        ) {
  338.         UnlockPubScreen( NULL, Scr );
  339.         Scr = NULL;
  340.     }
  341. }
  342.  
  343. void Project0Render( void )
  344. {
  345.     ComputeFont( Project0Width, Project0Height );
  346.  
  347.     DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 2 ),
  348.                     OffY + ComputeY( 219 ),
  349.                     ComputeX( 330 ),
  350.                     ComputeY( 21 ),
  351.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  352.     DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 5 ),
  353.                     OffY + ComputeY( 4 ),
  354.                     ComputeX( 323 ),
  355.                     ComputeY( 190 ),
  356.                     GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
  357.     DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 2 ),
  358.                     OffY + ComputeY( 1 ),
  359.                     ComputeX( 330 ),
  360.                     ComputeY( 217 ),
  361.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  362. }
  363.  
  364. int HandleProject0IDCMP( void )
  365. {
  366.     struct IntuiMessage    *m;
  367.     struct MenuItem        *n;
  368.     int            (*func)();
  369.     BOOL            running = TRUE;
  370.  
  371.     while( m = GT_GetIMsg( Project0Wnd->UserPort )) {
  372.  
  373.         CopyMem(( char * )m, ( char * )&Project0Msg, (long)sizeof( struct IntuiMessage ));
  374.  
  375.         GT_ReplyIMsg( m );
  376.  
  377.         switch ( Project0Msg.Class ) {
  378.  
  379.             case    IDCMP_REFRESHWINDOW:
  380.                 GT_BeginRefresh( Project0Wnd );
  381.                 Project0Render();
  382.                 GT_EndRefresh( Project0Wnd, TRUE );
  383.                 break;
  384.  
  385.             case    IDCMP_CLOSEWINDOW:
  386.                 running = Project0CloseWindow();
  387.                 break;
  388.  
  389.             case    IDCMP_VANILLAKEY:
  390.                 running = Project0VanillaKey();
  391.                 break;
  392.             case    IDCMP_RAWKEY:
  393.                 running = Project0RawKey();
  394.                 break;
  395.  
  396.             case    IDCMP_GADGETUP:
  397.             case    IDCMP_GADGETDOWN:
  398.                 func = ( void * )(( struct Gadget * )Project0Msg.IAddress )->UserData;
  399.                 running = func();
  400.                 break;
  401.  
  402.             case    IDCMP_MENUPICK:
  403.                 while( Project0Msg.Code != MENUNULL ) {
  404.                     n = ItemAddress( Project0Menus, Project0Msg.Code );
  405.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  406.                     running = func();
  407.                     Project0Msg.Code = n->NextSelect;
  408.                 }
  409.                 break;
  410.         }
  411.     }
  412.     return( running );
  413. }
  414.  
  415. int OpenProject0Window( void )
  416. {
  417.     struct NewGadget    ng;
  418.     struct Gadget    *g;
  419.     UWORD        lc, tc;
  420.     UWORD        wleft = Project0Left, wtop = Project0Top, ww, wh;
  421.  
  422.     ComputeFont( Project0Width, Project0Height );
  423.  
  424.     ww = ComputeX( Project0Width );
  425.     wh = ComputeY( Project0Height );
  426.  
  427.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  428.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  429.  
  430.     if ( ! ( Project0Font = OpenDiskFont( Font )))
  431.         return( 5L );
  432.  
  433.     if ( ! ( g = CreateContext( &Project0GList )))
  434.         return( 1L );
  435.  
  436.     for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  437.  
  438.         CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  439.  
  440.         ng.ng_VisualInfo = VisualInfo;
  441.         ng.ng_TextAttr   = Font;
  442.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  443.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  444.         ng.ng_Width      = ComputeX( ng.ng_Width );
  445.         ng.ng_Height     = ComputeY( ng.ng_Height);
  446.  
  447.         Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  448.  
  449.         while( Project0GTags[ tc ] ) tc += 2;
  450.         tc++;
  451.  
  452.         if ( NOT g )
  453.             return( 2L );
  454.     }
  455.  
  456.     if ( ! ( Project0Menus = CreateMenus( Project0NewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  457.         return( 3L );
  458.  
  459.     LayoutMenus( Project0Menus, VisualInfo, TAG_DONE );
  460.  
  461.     if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  462.                  WA_Left, ((Scr->Width) / 2) - (Project0Width / 2),
  463.                  WA_Top, ((Scr->Height) / 2) - (Project0Height / 2),
  464.                 WA_Width,    ww + OffX + Scr->WBorRight,
  465.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  466.                 WA_IDCMP,    BUTTONIDCMP|CHECKBOXIDCMP|INTEGERIDCMP|IDCMP_GADGETDOWN|IDCMP_INTUITICKS|IDCMP_MOUSEMOVE|IDCMP_MOUSEBUTTONS|
  467.                         
  468.                         IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|
  469.                         
  470.                         IDCMP_VANILLAKEY|
  471.                         IDCMP_RAWKEY|
  472.                         IDCMP_REFRESHWINDOW,
  473.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  474.                 WA_Gadgets,    Project0GList,
  475.                 WA_Title,    Project0Wdt,
  476.                 WA_ScreenTitle,    "extended Preferences for DOpus5 - (c)1997-98 by Jens Weyer",
  477.                 TAG_DONE )))
  478.     return( 4L );
  479.  
  480.     SetMenuStrip( Project0Wnd, Project0Menus );
  481.     GT_RefreshWindow( Project0Wnd, NULL );
  482.  
  483.     Project0Render();
  484.  
  485.     return( 0L );
  486. }
  487.  
  488. void CloseProject0Window( void )
  489. {
  490.     if ( Project0Menus      ) {
  491.         ClearMenuStrip( Project0Wnd );
  492.         FreeMenus( Project0Menus );
  493.         Project0Menus = NULL;    }
  494.  
  495.     if ( Project0Wnd        ) {
  496.         CloseWindow( Project0Wnd );
  497.         Project0Wnd = NULL;
  498.     }
  499.  
  500.     if ( Project0GList      ) {
  501.         FreeGadgets( Project0GList );
  502.         Project0GList = NULL;
  503.     }
  504.  
  505.     if ( Project0Font ) {
  506.         CloseFont( Project0Font );
  507.         Project0Font = NULL;
  508.     }
  509. }
  510.  
  511. void Project1Render( void )
  512. {
  513.     ComputeFont( Project1Width, Project1Height );
  514.  
  515.     DrawBevelBox( Project1Wnd->RPort, OffX + ComputeX( 6 ),
  516.                     OffY + ComputeY( 4 ),
  517.                     ComputeX( 219 ),
  518.                     ComputeY( 190 ),
  519.                     GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
  520.     DrawBevelBox( Project1Wnd->RPort, OffX + ComputeX( 2 ),
  521.                     OffY + ComputeY( 1 ),
  522.                     ComputeX( 227 ),
  523.                     ComputeY( 217 ),
  524.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  525. }
  526.  
  527. int HandleProject1IDCMP( void )
  528. {
  529.     struct IntuiMessage    *m;
  530.     int            (*func)();
  531.     BOOL            running = TRUE;
  532.  
  533.     while( m = GT_GetIMsg( Project1Wnd->UserPort )) {
  534.  
  535.         CopyMem(( char * )m, ( char * )&Project1Msg, (long)sizeof( struct IntuiMessage ));
  536.  
  537.         GT_ReplyIMsg( m );
  538.  
  539.         switch ( Project1Msg.Class ) {
  540.  
  541.             case    IDCMP_REFRESHWINDOW:
  542.                 GT_BeginRefresh( Project1Wnd );
  543.                 Project1Render();
  544.                 GT_EndRefresh( Project1Wnd, TRUE );
  545.                 break;
  546.  
  547.             case    IDCMP_CLOSEWINDOW:
  548.                 running = Project1CloseWindow();
  549.                 break;
  550.  
  551.             case    IDCMP_RAWKEY:
  552.                 running = Project0RawKey();
  553.                 break;
  554.  
  555.             case    IDCMP_GADGETUP:
  556.             case    IDCMP_GADGETDOWN:
  557.                 func = ( void * )(( struct Gadget * )Project1Msg.IAddress )->UserData;
  558.                 running = func();
  559.                 break;
  560.         }
  561.     }
  562.     return( running );
  563. }
  564.  
  565. int OpenProject1Window( void )
  566. {
  567.     struct NewGadget    ng;
  568.     struct Gadget    *g;
  569.     UWORD        lc, tc;
  570.     UWORD        wleft = Project1Left, wtop = Project1Top, ww, wh;
  571.  
  572.     ComputeFont( Project1Width, Project1Height );
  573.  
  574.     ww = ComputeX( Project1Width );
  575.     wh = ComputeY( Project1Height );
  576.  
  577.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  578.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  579.  
  580.     if ( ! ( Project1Font = OpenDiskFont( Font )))
  581.         return( 5L );
  582.  
  583.     if ( ! ( g = CreateContext( &Project1GList )))
  584.         return( 1L );
  585.  
  586.     for( lc = 0, tc = 0; lc < Project1_CNT; lc++ ) {
  587.  
  588.         CopyMem((char * )&Project1NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  589.  
  590.         ng.ng_VisualInfo = VisualInfo;
  591.         ng.ng_TextAttr   = Font;
  592.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  593.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  594.         ng.ng_Width      = ComputeX( ng.ng_Width );
  595.         ng.ng_Height     = ComputeY( ng.ng_Height);
  596.  
  597.         Project1Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project1GTypes[ lc ], g, &ng, ( struct TagItem * )&Project1GTags[ tc ] );
  598.  
  599.         while( Project1GTags[ tc ] ) tc += 2;
  600.         tc++;
  601.  
  602.         if ( NOT g )
  603.             return( 2L );
  604.     }
  605.  
  606.     if ( ! ( Project1Wnd = OpenWindowTags( NULL,
  607.                  WA_Left, ((Scr->Width) / 2) - (Project1Width / 2),
  608.                  WA_Top, ((Scr->Height) / 2) - (Project1Height / 2),
  609.                 WA_Width,    ww + OffX + Scr->WBorRight,
  610.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  611.                 WA_IDCMP,    BUTTONIDCMP|LISTVIEWIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  612.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  613.                 WA_Gadgets,    Project1GList,
  614.                 WA_Title,    Project1Wdt,
  615.                 WA_ScreenTitle,    "extended Preferences for DOpus5 - (c)1997-98 by Jens Weyer",
  616.                 TAG_DONE )))
  617.     return( 4L );
  618.  
  619.     GT_RefreshWindow( Project1Wnd, NULL );
  620.  
  621.     Project1Render();
  622.  
  623.     return( 0L );
  624. }
  625.  
  626. void CloseProject1Window( void )
  627. {
  628.     if ( Project1Wnd        ) {
  629.         CloseWindow( Project1Wnd );
  630.         Project1Wnd = NULL;
  631.     }
  632.  
  633.     if ( Project1GList      ) {
  634.         FreeGadgets( Project1GList );
  635.         Project1GList = NULL;
  636.     }
  637.  
  638.     if ( Project1Font ) {
  639.         CloseFont( Project1Font );
  640.         Project1Font = NULL;
  641.     }
  642. }
  643.  
  644. // everything above this point was generated by GadToolsBox
  645.  
  646. void main(int argc, char *argv[])
  647. {
  648.   BOOL running = TRUE;
  649.   GadToolsBase = OpenLibrary("gadtools.library",39L);
  650.   AslBase = OpenLibrary("asl.library",39L);
  651.   if (GadToolsBase && AslBase)  // Got it ?
  652.   {
  653.     memset(AGHelp,0,499);
  654.     GetToolTypes(argv[0]);
  655.     SetupScreen();
  656.     OpenProject0Window();
  657.     InitVarExist();  // Initialise memory and defaults
  658.     LoadENVars(); // ---"--- envars
  659.     while(running == TRUE)
  660.     {
  661.       WaitPort(Project0Wnd->UserPort);   // sleep until message
  662.       running = HandleProject0IDCMP();     // and handle it then
  663.     }
  664.     CloseProject0Window();
  665.     CloseDownScreen();
  666.     CloseLibrary(GadToolsBase);
  667.     CloseLibrary(AslBase);
  668.   } // if (GadToolsBase)
  669.   else
  670.   {
  671.     if (AslBase)
  672.     {
  673.       CloseLibrary(AslBase);
  674.     }
  675.     if (GadToolsBase)
  676.     {
  677.       CloseLibrary(GadToolsBase);
  678.     }
  679.     exit(40);
  680.   }
  681. }
  682.  
  683. /* This file contains empty template routines that
  684.  * the IDCMP handler will call uppon. Fill out these
  685.  * routines with your code or use them as a reference
  686.  * to create your program.
  687.  */
  688.  
  689. // Save actual envar values to disk AND memory for instant use
  690.  
  691. int SaveClicked( void )
  692. {
  693.     /* routine when gadget "_Save" is clicked. */
  694.   PrepSetEnv("ENVARC:DOpus/3DLook",DLook,Do_DLook);
  695.   PrepSetEnv("ENVARC:DOpus/NoNoLabel",NoNoLabel,Do_NoNoLabel);
  696.   PrepSetEnv("ENVARC:DOpus/NoCustomDrag",NoCustomDrag,Do_NoCustomDrag);
  697.   PrepSetEnv("ENVARC:DOpus/QuickIconDrag",QuickIconDrag,Do_QIconDrag);
  698.   PrepSetEnv("ENVARC:DOpus/PopUpDelay",PopTime,Do_PopUpDelay);
  699.   PrepSetEnv("ENVARC:DOpus/ShowUseDatatypesFirst",ShowUseDTFirst,Do_ShUDTFirst);
  700.   PrepSetEnv("ENVARC:DOpus/WorkbenchTitle",WBTitle,Do_WBTitle);
  701.   PrepSetEnv("ENVARC:DOpus/UseWBInfo",UseWBInfo,Do_UseWBInfo);
  702.   PrepSetEnv("ENVARC:DOpus/NoMUFS",NoMUFS,Do_NoMUFS);
  703.   PrepSetEnv("ENVARC:DOpus/Benefy",Benefy,Do_Benefy);
  704.   PrepSetEnv("ENVARC:DOpus/HidePadLock",HidePadLock,Do_HidePadLock);
  705.   PrepSetEnv("ENVARC:DOpus/CommandLineLength",CmdLineLength,Do_CmdLLength);
  706.   PrepSetEnv("ENVARC:DOpus/IconSpaceX",IconSpaceX,Do_IconSpaceX);
  707.   PrepSetEnv("ENVARC:DOpus/IconSpaceY",IconSpaceY,Do_IconSpaceY);
  708.   PrepSetEnv("ENVARC:DOpus/IconGridX",IconGridX,Do_IconGridX);
  709.   PrepSetEnv("ENVARC:DOpus/IconGridY",IconGridY,Do_IconGridY);
  710.   PrepSetEnv("ENVARC:DOpus/ListerEditing",ListerEditing,Do_ListerEditing);
  711.   PrepSetEnv("ENVARC:DOpus/DOSPatch",DOSPatch,Do_DOSPatch);
  712.   UseClicked();
  713.   return(TRUE);
  714. }
  715.  
  716. // Save actual envar values to memory (WILL BE LOST AFTER REBOOT !)
  717.  
  718. int UseClicked( void )
  719. {
  720.     /* routine when gadget "Us_e" is clicked. */
  721.   PrepSetEnv("ENV:DOpus/3DLook",DLook,Do_DLook);
  722.   PrepSetEnv("ENV:DOpus/NoNoLabel",NoNoLabel,Do_NoNoLabel);
  723.   PrepSetEnv("ENV:DOpus/NoCustomDrag",NoCustomDrag,Do_NoCustomDrag);
  724.   PrepSetEnv("ENV:DOpus/QuickIconDrag",QuickIconDrag,Do_QIconDrag);
  725.   PrepSetEnv("ENV:DOpus/PopUpDelay",PopTime,Do_PopUpDelay);
  726.   PrepSetEnv("ENV:DOpus/ShowUseDatatypesFirst",ShowUseDTFirst,Do_ShUDTFirst);
  727.   PrepSetEnv("ENV:DOpus/WorkbenchTitle",WBTitle,Do_WBTitle);
  728.   PrepSetEnv("ENV:DOpus/UseWBInfo",UseWBInfo,Do_UseWBInfo);
  729.   PrepSetEnv("ENV:DOpus/NoMUFS",NoMUFS,Do_NoMUFS);
  730.   PrepSetEnv("ENV:DOpus/Benefy",Benefy,Do_Benefy);
  731.   PrepSetEnv("ENV:DOpus/HidePadLock",HidePadLock,Do_HidePadLock);
  732.   PrepSetEnv("ENV:DOpus/CommandLineLength",CmdLineLength,Do_CmdLLength);
  733.   PrepSetEnv("ENV:DOpus/IconSpaceX",IconSpaceX,Do_IconSpaceX);
  734.   PrepSetEnv("ENV:DOpus/IconSpaceY",IconSpaceY,Do_IconSpaceY);
  735.   PrepSetEnv("ENV:DOpus/IconGridX",IconGridX,Do_IconGridX);
  736.   PrepSetEnv("ENV:DOpus/IconGridY",IconGridY,Do_IconGridY);
  737.   PrepSetEnv("ENV:DOpus/ListerEditing",ListerEditing,Do_ListerEditing);
  738.   PrepSetEnv("ENV:DOpus/DOSPatch",DOSPatch,Do_DOSPatch);
  739.   return(TRUE);
  740. }
  741.  
  742. // Save 'Open with' list to disk (WILL BE USED IN YOUR NEXT DOpus5 SESSION)
  743.  
  744. int SaveOWClicked( void )
  745. {
  746.     /* routine when gadget "S_ave" is clicked. */
  747.   FILE *f;
  748.   struct Node *Save;
  749.   int i,Len;
  750.   Save = OWList.lh_Head;
  751.   Len = ListLength();
  752.   f = fopen(OWPath,"w");
  753.   if (f)
  754.   {
  755.     for (i = 0; i < Len; i++)
  756.     {
  757.       fprintf(f,"%s\n",Save->ln_Name);
  758.       Save = Save->ln_Succ;
  759.     }
  760.     fclose(f);
  761.   }
  762.   return(TRUE);
  763. }
  764.  
  765. int LabelClicked( void )
  766. {
  767.     /* routine when gadget "_NoNoLabel" is clicked. */
  768.   NoNoLabel = Project0Msg.Code;
  769.   return(TRUE);
  770. }
  771.  
  772. int NoCustomDragClicked( void )
  773. {
  774.     /* routine when gadget "_NoCustomDrag" is clicked. */
  775.   NoCustomDrag = Project0Msg.Code;
  776.   return(TRUE);
  777. }
  778.  
  779. int WBTitleClicked( void )
  780. {
  781.     /* routine when gadget "_WorkbenchTitle" is clicked. */
  782.  
  783.   WBTitle = Project0Msg.Code;
  784.   return(TRUE);
  785. }
  786.  
  787. int QuickIconDragClicked( void )
  788. {
  789.     /* routine when gadget "_QuickIconDrag" is clicked. */
  790.   QuickIconDrag = Project0Msg.Code;
  791.   return(TRUE);
  792. }
  793.  
  794. int UseWBInfoClicked( void )
  795. {
  796.     /* routine when gadget "_UseWBInfo" is clicked. */
  797.   UseWBInfo = Project0Msg.Code;
  798.   return(TRUE);
  799. }
  800.  
  801. int DTFClicked( void )
  802. {
  803.     /* routine when gadget "Sh_owUseDatatypesFirst" is clicked. */
  804.   ShowUseDTFirst = Project0Msg.Code;
  805.   return(TRUE);
  806. }
  807.  
  808. int DLookClicked( void )
  809. {
  810.     /* routine when gadget "3D_Look" is clicked. */
  811.   DLook = Project0Msg.Code;
  812.   return(TRUE);
  813. }
  814.  
  815. int TimePopUpDelayClicked( void )
  816. {
  817.     /* routine when gadget "in 1/50 secs." is clicked. */
  818.   PopTime = GetNum(8);
  819.   return(TRUE);
  820. }
  821.  
  822. int NoMUFSClicked( void )
  823. {
  824.     /* routine when gadget "No_MultiUser" is clicked. */
  825.   NoMUFS = Project0Msg.Code;
  826.   return(TRUE);
  827. }
  828.  
  829. int BenefyClicked( void )
  830. {
  831.     /* routine when gadget "_Benefy" is clicked. */
  832.   Benefy = Project0Msg.Code;
  833.   return(TRUE);
  834. }
  835.  
  836. int HidePadLockClicked( void )
  837. {
  838.     /* routine when gadget "_HidePadLock" is clicked. */
  839.   HidePadLock = Project0Msg.Code;
  840.   return(TRUE);
  841. }
  842.  
  843. int LengthOfCmdLineClicked( void )
  844. {
  845.     /* routine when gadget "chars" is clicked. */
  846.   CmdLineLength = GetNum(13);
  847.   return(TRUE);
  848. }
  849.  
  850. int IconSpaceXClicked( void )
  851. {
  852.     /* routine when gadget "IconSpaceX" is clicked. */
  853.   IconSpaceX = GetNum(14);
  854.   return(TRUE);
  855. }
  856.  
  857. int IconSpaceYClicked( void )
  858. {
  859.     /* routine when gadget "Y" is clicked. */
  860.   IconSpaceY = GetNum(15);
  861.   return(TRUE);
  862. }
  863.  
  864. int IconGridXClicked( void )
  865. {
  866.     /* routine when gadget "IconGrid_X" is clicked. */
  867.   IconGridX = Project0Msg.Code;
  868.   return(TRUE);
  869. }
  870.  
  871. int IconGridYClicked( void )
  872. {
  873.     /* routine when gadget "IconGrid_Y" is clicked. */
  874.   IconGridY = Project0Msg.Code;
  875.   return(TRUE);
  876. }
  877.  
  878. int LEdClicked( void )
  879. {
  880.     /* routine when gadget "L_isterEditing" is clicked. */
  881.   ListerEditing = Project0Msg.Code;
  882.   return(TRUE);
  883. }
  884.  
  885. int DOSPatchClicked( void )
  886. {
  887.     /* routine when gadget "_DOSPatch" is clicked. */
  888.   DOSPatch = Project0Msg.Code;
  889.   return(TRUE);
  890. }
  891.  
  892. int WinGadCycOWClicked( void )
  893. {
  894.     /* routine when gadget "Edit 'Open with'..." is clicked. */
  895.   BOOL going = TRUE;
  896.   DisableAll();
  897.   OpenProject1Window();
  898.   LoadOW();       // Initialise 'Open with' list
  899.   while(going)
  900.   {
  901.     WaitPort(Project1Wnd->UserPort);
  902.     going = HandleProject1IDCMP();
  903.   }
  904.   CloseProject1Window();
  905.   EnableAll();
  906.   return(TRUE);
  907. }
  908.  
  909. /*
  910.   * List management functions
  911.   */
  912.  
  913. // Get selected entry on click
  914.  
  915. int OWEntriesClicked( void )
  916. {
  917.     /* routine when gadget "'Open with' entries:" is clicked. */
  918.   ActOWE = Project1Msg.Code;
  919.   PrintOWName(ActOWE);
  920.   return(TRUE);
  921. }
  922.  
  923. // Add a new entry to the 'Open with' list
  924.  
  925. int AddOWEntryClicked( void )
  926. {
  927.     /* routine when gadget "Add" is clicked. */
  928.   struct FileRequester *fr = NULL;
  929.   struct Node *Add;
  930.   char Entered[1024];
  931.   int opened = 0;
  932.  
  933.   fr = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
  934.           ASLFR_Window, Project0Wnd,
  935.           ASLFR_Screen, Scr,
  936.           ASLFR_TitleText, "Select a tool to add:",
  937.         ASLFR_InitialLeftEdge, 0,
  938.         ASLFR_InitialTopEdge, 20,
  939.         ASLFR_InitialWidth, 400,
  940.         ASLFR_InitialHeight, 200,
  941.         ASLFR_RejectIcons, TRUE,
  942.         TAG_DONE);
  943.   if (fr)
  944.   {
  945.     opened = AslRequest(fr, NULL);
  946.     if (opened)
  947.     {
  948.       strcpy(Entered,(fr->fr_Drawer));
  949.       AddPart(Entered,fr->fr_File,1023);
  950.       if (Exists(Entered))
  951.       {
  952.         Add = AllocVec(sizeof(struct Node), MEMF_CLEAR | MEMF_ANY);
  953.         Add->ln_Name = AllocVec(strlen(Entered) + 1, MEMF_CLEAR | MEMF_ANY);
  954.         strcpy(Add->ln_Name,Entered);
  955.         SetList(0);
  956.         AddTail(&OWList,(struct Node *)Add);
  957.         ActOWE = ListLength();
  958.         SetList(2);
  959.         PrintOWName(ActOWE);
  960.       }
  961.       else
  962.       {
  963.         DisplayBeep(NULL);
  964.       }
  965.     }
  966.     else
  967.     {
  968.       DisplayBeep(NULL);
  969.     }
  970.     FreeAslRequest(fr);
  971.   }
  972.   return(TRUE);
  973. }
  974.  
  975. // Del the selected entry from list and memory
  976.  
  977. int DelOWEntryClicked( void )
  978. {
  979.     /* routine when gadget "Del" is clicked. */
  980.   struct Node *n;
  981.   int i;
  982.   if (!IsListEmpty(&OWList) && ActOWE != -1)
  983.   {
  984.     n = OWList.lh_Head;
  985.     for (i = 0; i < ActOWE; i++)
  986.     {
  987.       n = n->ln_Succ;
  988.     }
  989.     SetList(0);
  990.     Remove(n);
  991.     FreeVec(n->ln_Name);
  992.     FreeVec(n);
  993.     if (IsListEmpty(&OWList))
  994.     {
  995.       ActOWE = -1;
  996.       SetList(1);
  997.     }
  998.     else
  999.     {
  1000.       SetList(2);
  1001.       PrintOWName(ActOWE);
  1002.     }
  1003.   }
  1004.   return(TRUE);
  1005. }
  1006.  
  1007. // Move the selected entry to a higher 'level' in the list
  1008.  
  1009. int MoveOWEUpClicked( void )
  1010. {
  1011.     /* routine when gadget "Up" is clicked. */
  1012.   struct Node *Storage;
  1013.   struct Node *n;
  1014.   int i;
  1015.   if (ActOWE != 0 && ActOWE != -1 && !IsListEmpty(&OWList))
  1016.   {
  1017.     Storage = OWList.lh_Head;
  1018.     for (i = 0; i < ActOWE; i++)
  1019.     {
  1020.       Storage = Storage->ln_Succ;
  1021.     }
  1022.     SetList(0);
  1023.     n = Storage->ln_Pred->ln_Pred;
  1024.     Remove(Storage);
  1025.     Insert(&OWList,Storage,n);
  1026.     ActOWE--;
  1027.     SetList(2);
  1028.   }
  1029.   return(TRUE);
  1030. }
  1031.  
  1032. // Move the selected entry to a lower 'level' in the list
  1033.  
  1034. int MoveOWEDownClicked( void )
  1035. {
  1036.     /* routine when gadget "Down" is clicked. */
  1037.   struct Node *Storage;
  1038.   struct Node *n;
  1039.   int i, Len;
  1040.   Len = ListLength();
  1041.   if (ActOWE < Len && !IsListEmpty(&OWList) && ActOWE != -1)
  1042.   {
  1043.     Storage = OWList.lh_Head;
  1044.     for (i = 0; i < ActOWE; i++)
  1045.     {
  1046.       Storage = Storage->ln_Succ;
  1047.     }
  1048.     SetList(0);
  1049.     n = Storage->ln_Succ;
  1050.     Remove(Storage);
  1051.     Insert(&OWList,Storage,n);
  1052.     ActOWE++;
  1053.     SetList(2);
  1054.   }
  1055.   return(TRUE);
  1056. }
  1057.  
  1058. /*
  1059.   * Misc functions
  1060.   */
  1061.  
  1062. int Project0About( void )
  1063. {
  1064.     /* routine when (sub)item "About..." is selected. */
  1065.   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");
  1066.   return(TRUE);
  1067. }
  1068.  
  1069. int Project0Save( void )
  1070. {
  1071.     /* routine when (sub)item "Save" is selected. */
  1072.   SaveClicked();
  1073.   return(TRUE);
  1074. }
  1075.  
  1076. int Project0Use( void )
  1077. {
  1078.     /* routine when (sub)item "Use" is selected. */
  1079.   UseClicked();
  1080.   return(TRUE);
  1081. }
  1082.  
  1083. int Project0SaveOWE( void )
  1084. {
  1085.     /* routine when (sub)item "Save" is selected. */
  1086.   return(SaveOWClicked());
  1087. }
  1088.  
  1089. int Project0Quit( void )
  1090. {
  1091.     /* routine when (sub)item "Quit" is selected. */
  1092.   return(FALSE);
  1093. }
  1094.  
  1095. int Project0CloseWindow( void )
  1096. {
  1097.     /* routine for "IDCMP_CLOSEWINDOW". */
  1098.   return(Project0Quit());
  1099. }
  1100.  
  1101. int Project1CloseWindow( void )
  1102. {
  1103.     /* routine for "IDCMP_CLOSEWINDOW". */
  1104.   FreeOWList();
  1105.   return(FALSE);
  1106. }
  1107.  
  1108. // Handle incoming key events
  1109.  
  1110. int Project0VanillaKey( void )
  1111. {
  1112.     /* routine for "IDCMP_VANILLAKEY". */
  1113.   switch(Project0Msg.Code)
  1114.   {
  1115.     case 's':
  1116.     case 'S':
  1117.                    SaveClicked();
  1118.                    break;
  1119.     case 'e':
  1120.     case 'E':
  1121.                    UseClicked();
  1122.                    break;
  1123.     case 'n':
  1124.     case 'N':
  1125.                    NoNoLabel = SwapState(NoNoLabel,1);
  1126.                    break;
  1127.     case 'c':
  1128.     case 'C':
  1129.                    NoCustomDrag = SwapState(NoCustomDrag,2);
  1130.                    break;
  1131.     case 'w':
  1132.     case 'W':
  1133.                     WBTitle = SwapState(WBTitle,3);
  1134.                     break;
  1135.     case 'q':
  1136.     case 'Q':
  1137.                    QuickIconDrag = SwapState(QuickIconDrag,4);
  1138.                    break;
  1139.     case 'u':
  1140.     case 'U':
  1141.                   UseWBInfo = SwapState(UseWBInfo,5);
  1142.                   break;
  1143.     case 'o':
  1144.     case 'O':
  1145.                    ShowUseDTFirst = SwapState(ShowUseDTFirst,6);
  1146.                    break;
  1147.     case 'l':
  1148.     case 'L':
  1149.                   DLook = SwapState(DLook,7);
  1150.                   break;
  1151.     case 'm':
  1152.     case 'M':
  1153.                   NoMUFS = SwapState(NoMUFS,10);
  1154.                   break;
  1155.     case 'b':
  1156.     case 'B':
  1157.                   Benefy = SwapState(Benefy,11);
  1158.                   break;
  1159.     case 'h':
  1160.     case 'H':
  1161.                   HidePadLock = SwapState(HidePadLock,12);
  1162.                   break;
  1163.     case 'x':
  1164.     case 'X':
  1165.                   IconGridX = SwapState(IconGridX,16);
  1166.                   break;
  1167.     case 'y':
  1168.     case 'Y':
  1169.                   IconGridY = SwapState(IconGridY,17);
  1170.                   break;
  1171.     case 'i':
  1172.     case 'I':
  1173.                   ListerEditing = SwapState(ListerEditing,18);
  1174.                   break;
  1175.     case 'd':
  1176.     case 'D':
  1177.                   DOSPatch = SwapState(DOSPatch,19);
  1178.                   break;
  1179.   }
  1180.   return(TRUE);
  1181. }
  1182.  
  1183. // Swap a checkbox gadget
  1184.  
  1185. int SwapState(int State, int Gad)
  1186. {
  1187.   if (State)
  1188.   {
  1189.     GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
  1190.                                      GTCB_Checked, 0,
  1191.                                      TAG_DONE);
  1192.     State = 0;
  1193.   }
  1194.   else
  1195.   {
  1196.     GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
  1197.                                      GTCB_Checked, 1,
  1198.                                      TAG_DONE);
  1199.     State = 1;
  1200.   }
  1201.   return(State);
  1202. }
  1203.  
  1204. // Initialisation of the envars
  1205.  
  1206. void LoadENVars(void)
  1207. {
  1208.   DLook = GetEnv("ENV:DOpus/3DLook",Do_DLook);
  1209.   NoNoLabel = GetEnv("ENV:DOpus/NoNoLabel",Do_NoNoLabel);
  1210.   NoCustomDrag = GetEnv("ENV:DOpus/NoCustomDrag",Do_NoCustomDrag);
  1211.   QuickIconDrag = GetEnv("ENV:DOpus/QuickIconDrag",Do_QIconDrag);
  1212.   PopTime = GetEnv("ENV:DOpus/PopUpDelay",Do_PopUpDelay);
  1213.   ShowUseDTFirst = GetEnv("ENV:DOpus/ShowUseDatatypesFirst",Do_ShUDTFirst);
  1214.   WBTitle = GetEnv("ENV:DOpus/WorkbenchTitle",Do_WBTitle);
  1215.   UseWBInfo = GetEnv("ENV:DOpus/UseWBInfo",Do_UseWBInfo);
  1216.   NoMUFS = GetEnv("ENV:DOpus/NoMUFS",Do_NoMUFS);
  1217.   Benefy = GetEnv("ENV:DOpus/Benefy",Do_Benefy);
  1218.   HidePadLock = GetEnv("ENV:DOpus/HidePadLock",Do_HidePadLock);
  1219.   CmdLineLength = GetEnv("ENV:DOpus/CommandLineLength",Do_CmdLLength);
  1220.   IconSpaceX = GetEnv("ENV:DOpus/IconSpaceX",Do_IconSpaceX);
  1221.   IconSpaceY = GetEnv("ENV:DOpus/IconSpaceY",Do_IconSpaceY);
  1222.   IconGridX = GetEnv("ENV:DOpus/IconGridX",Do_IconGridX);
  1223.   IconGridY = GetEnv("ENV:DOpus/IconGridY",Do_IconGridY);
  1224.   ListerEditing = GetEnv("ENV:DOpus/ListerEditing",Do_ListerEditing);
  1225.   DOSPatch = GetEnv("ENV:DOpus/DOSPatch",Do_DOSPatch);
  1226.   if (PopTime == 0 && Exists("ENV:DOpus/PopUpDelay") == 0)
  1227.   {
  1228.     PopTime = 10;
  1229.   }
  1230.   if (CmdLineLength == 0 && Exists("ENV:DOpus/CommandLineLength") == 0)
  1231.   {
  1232.     CmdLineLength = 512;
  1233.   }
  1234.   if (IconSpaceX == 0 && Exists("ENV:DOpus/IconSpaceX") == 0)
  1235.   {
  1236.     IconSpaceX = 3;
  1237.   }
  1238.   if (IconSpaceY == 0 && Exists("ENV:DOpus/IconSpaceY") == 0)
  1239.   {
  1240.     IconSpaceY = 5;
  1241.   }
  1242.   SwapCheck(NoNoLabel,1);
  1243.   SwapCheck(NoCustomDrag,2);
  1244.   SwapCheck(WBTitle,3);
  1245.   SwapCheck(QuickIconDrag,4);
  1246.   SwapCheck(UseWBInfo,5);
  1247.   SwapCheck(ShowUseDTFirst,6);
  1248.   SwapCheck(DLook,7);
  1249.   SwapCheck(NoMUFS,10);
  1250.   SwapCheck(Benefy,11);
  1251.   SwapCheck(HidePadLock,12);
  1252.   SwapCheck(IconGridX,16);
  1253.   SwapCheck(IconGridY,17);
  1254.   SwapCheck(ListerEditing,18);
  1255.   SwapCheck(DOSPatch,19);
  1256.   SetNum(PopTime,8);
  1257.   SetNum(CmdLineLength,13);
  1258.   SetNum(IconSpaceX,14);
  1259.   SetNum(IconSpaceY,15);
  1260.   return;
  1261. }
  1262.  
  1263. // Swap a checkbox gadget appearance (NOT THE VALUES)
  1264.  
  1265. void SwapCheck(int State, int Gad)
  1266. {
  1267.   if (State)
  1268.   {
  1269.     GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
  1270.                                      GTCB_Checked, 1,
  1271.                                      TAG_DONE);
  1272.   }
  1273.   return;
  1274. }
  1275.  
  1276. // Own envar load function
  1277.  
  1278. int GetEnv(char *File, int Loc)
  1279. {
  1280.   FILE *f;
  1281.   int Value = 0;
  1282.   f = fopen(File,"r");
  1283.   if (f)
  1284.   {
  1285.     fscanf(f,"%4ld",&Value);
  1286.     fclose(f);
  1287.     VarExist[Loc] = 1;
  1288.   }
  1289.   return(Value);
  1290. }
  1291.  
  1292. // Own envar save function
  1293.  
  1294. void SetEnv(char *File, int Value, int Loc)
  1295. {
  1296.   FILE *f;
  1297.   f = fopen(File,"w");
  1298.   if (f)
  1299.   {
  1300.     fprintf(f,"%ld\n",Value);
  1301.     fclose(f);
  1302.   }
  1303.   return;
  1304. }
  1305.  
  1306. // Initialise memory and default values
  1307.  
  1308. void InitVarExist(void)
  1309. {
  1310.   int i;
  1311.   for(i = 0; i < VarMemSize; i++)
  1312.   {
  1313.     VarExist[i] = -1;
  1314.   }
  1315.   VarDefault[Do_DLook] = 0;
  1316.   VarDefault[Do_NoNoLabel] = 0;
  1317.   VarDefault[Do_NoCustomDrag] = 0;
  1318.   VarDefault[Do_QIconDrag] = 0;
  1319.   VarDefault[Do_PopUpDelay] = 10;
  1320.   VarDefault[Do_ShUDTFirst] = 0;
  1321.   VarDefault[Do_WBTitle] = 0;
  1322.   VarDefault[Do_NoMUFS] = 0;
  1323.   VarDefault[Do_Benefy] = 0;
  1324.   VarDefault[Do_HidePadLock] = 0;
  1325.   VarDefault[Do_CmdLLength] = 512;
  1326.   VarDefault[Do_IconSpaceX] = 3;
  1327.   VarDefault[Do_IconSpaceY] = 5;
  1328.   VarDefault[Do_IconGridX] = 0;
  1329.   VarDefault[Do_IconGridY] = 0;
  1330.   VarDefault[Do_ListerEditing] = 0;
  1331.   VarDefault[Do_DOSPatch] = 0;
  1332.   return;
  1333. }
  1334.  
  1335. // Preprocessing envar saving function (see guide / developer for further information)
  1336.  
  1337. void PrepSetEnv(char *File,int Value,int Loc)
  1338. {
  1339.   if (VarExist[Loc] != -1)
  1340.   {
  1341.     if (Value == VarDefault[Loc])
  1342.     {
  1343.       DeleteFile(File);
  1344.     }
  1345.     else
  1346.     {
  1347.       SetEnv(File,Value,Loc);
  1348.     }
  1349.   }
  1350.   else
  1351.   {
  1352.     if (Value != VarDefault[Loc])
  1353.     {
  1354.       SetEnv(File,Value,Loc);
  1355.     }
  1356.     else
  1357.     {
  1358.       DeleteFile(File);
  1359.     }
  1360.   }
  1361.   return;
  1362. }
  1363.  
  1364. // Set the value of an integer gadget display
  1365.  
  1366. void SetNum(int Value,int Gad)
  1367. {
  1368.   GT_SetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
  1369.                                    GTIN_Number,Value,
  1370.                                    TAG_DONE);
  1371.   return;
  1372. }
  1373.  
  1374. // Get the value from an integer gadget
  1375.  
  1376. int GetNum(int Gad)
  1377. {
  1378.   int Wert = 0;
  1379.   GT_GetGadgetAttrs(Project0Gadgets[Gad],Project0Wnd,NULL,
  1380.                                    GTIN_Number, &Wert,
  1381.                                    TAG_DONE);
  1382.   return(Wert);
  1383. }
  1384.  
  1385. // Simple check-function to be sure, that a drawer/file really exists
  1386.  
  1387. int Exists(char *datei)
  1388. {
  1389.   BPTR mylock;
  1390.   int i = 0;
  1391.   mylock = Lock(datei,SHARED_LOCK);
  1392.   if (mylock)
  1393.   {
  1394.     i = 1;
  1395.   }
  1396.   UnLock(mylock);
  1397.   return i;
  1398. }
  1399.  
  1400. // Handle keyboard events (RAW)
  1401.  
  1402. int Project0RawKey(void)
  1403. {
  1404.   char ExeHelp[512];
  1405.   if (Project0Msg.Code == 95 && strlen(AGHelp) != 0)
  1406.   {
  1407.  
  1408.     // will be replaced by amigaguide.library functions in next version
  1409.  
  1410.     strcpy(ExeHelp,"MultiView ");
  1411.     strcat(ExeHelp,AGHelp);
  1412.     Execute(ExeHelp,0,0);
  1413.   } // if (Project0Msg.Code...)
  1414.   return(TRUE);
  1415. } // int Project0RawKey()
  1416.  
  1417. // Initialise presets from icon's tooltypes
  1418.  
  1419. void GetToolTypes(char *IconPath)
  1420. {
  1421.   struct DiskObject *Icon = NULL;
  1422.   Icon = GetDiskObject(IconPath);
  1423.   if (Icon)
  1424.   {
  1425.     char *Types;
  1426.     if (Types = FindToolType((UBYTE **)Icon->do_ToolTypes,"HELP"))
  1427.     {
  1428.       strcpy(AGHelp,Types);
  1429.     } // if (Types = ...)
  1430.     FreeDiskObject(Icon);
  1431.   } // if (Icon)
  1432.   return;
  1433. } // void GetToolTypes()
  1434.  
  1435. // Initialise 'Open with' list
  1436.  
  1437. void LoadOW(void)
  1438. {
  1439.   FILE *ow;
  1440.   struct Node *OWEntry;
  1441.   char Entry[512];
  1442.   char *Test;
  1443.   if (Exists(OWPath))
  1444.   {
  1445.     NewList(&OWList);
  1446.     ow = fopen(OWPath,"r");
  1447.     if (ow)
  1448.     {
  1449.       while(Test != NULL)
  1450.       {
  1451.         Test = fgets(Entry,511,ow);
  1452.         OWEntry = AllocVec(sizeof(struct Node), MEMF_CLEAR | MEMF_ANY);
  1453.         OWEntry->ln_Name = AllocVec(strlen(Entry) + 1, MEMF_CLEAR | MEMF_ANY);
  1454.         strcpy(OWEntry->ln_Name,Entry);
  1455.         AddTail(&OWList,(struct Node *)OWEntry);
  1456.       }
  1457.       OWEntry = RemTail(&OWList);
  1458.       if (OWEntry)
  1459.       {
  1460.         FreeVec(OWEntry->ln_Name);
  1461.         FreeVec(OWEntry);
  1462.       }
  1463.       fclose(ow);
  1464.       SetList(1);
  1465.     }
  1466.   }
  1467.   return;
  1468. }
  1469.  
  1470. // Handle liistview (1 = normal / 0 = unlinked  / 2 = normal with display stuff ... )
  1471.  
  1472. void SetList(int State)
  1473. {
  1474.   if (State == 1)
  1475.   {
  1476.     GT_SetGadgetAttrs(Project1Gadgets[1],Project1Wnd,NULL,
  1477.                         GTLV_Labels, &OWList,
  1478.                         TAG_DONE);
  1479.   }
  1480.   else if (!State)
  1481.   {
  1482.     GT_SetGadgetAttrs(Project1Gadgets[1],Project1Wnd,NULL,
  1483.                         GTLV_Labels, ~0L,
  1484.                         TAG_DONE);
  1485.   }
  1486.   else
  1487.   {
  1488.     int Len = ListLength();
  1489.     if (ActOWE == Len)
  1490.     {
  1491.       ActOWE--;
  1492.     }
  1493.     GT_SetGadgetAttrs(Project1Gadgets[1],Project1Wnd,NULL,
  1494.                         GTLV_Labels, &OWList,
  1495.                         GTLV_Selected, ActOWE,
  1496.                         GTLV_Top, ActOWE,
  1497.                         TAG_DONE);
  1498.   }
  1499.   return;
  1500. }
  1501.  
  1502. // Free used memory for 'Open with' list
  1503.  
  1504. void FreeOWList(void)
  1505. {
  1506.   struct Node *Rem;
  1507.   if (IsListEmpty(&OWList) == FALSE)
  1508.   {
  1509.     while(Rem = RemTail(&OWList))
  1510.     {
  1511.       FreeVec(Rem->ln_Name);
  1512.       FreeVec(Rem);
  1513.     }
  1514.   }
  1515.   return;
  1516. }
  1517.  
  1518. // Examine the length of the 'Open with' list
  1519.  
  1520. int ListLength(void) {
  1521.   struct Node *n;
  1522.   int count = 0;
  1523.   for ( n = OWList.lh_Head; n->ln_Succ ; n=n->ln_Succ,count++ );
  1524.   return count;
  1525. } // ListLength
  1526.  
  1527. // Print filename only of the actual 'Open with' entry
  1528.  
  1529. void PrintOWName(int Pos)
  1530. {
  1531.   struct Node *n;
  1532.   int i;
  1533.   n = OWList.lh_Head;
  1534.   for (i = 0; i < Pos; i++)
  1535.   {
  1536.     n = n->ln_Succ;
  1537.   }
  1538.   GT_SetGadgetAttrs(Project1Gadgets[6],Project1Wnd,NULL,
  1539.                       GTTX_Text, FilePart(n->ln_Name),
  1540.                       TAG_DONE);
  1541.   return;
  1542. }
  1543.  
  1544. void DisableAll(void)
  1545. {
  1546.   int i;
  1547.   for (i = 0; i < Project0_CNT; i++)
  1548.   {
  1549.     GT_SetGadgetAttrs(Project0Gadgets[i],Project0Wnd,NULL,
  1550.                                      GA_Disabled, TRUE,
  1551.                                      TAG_DONE);
  1552.   }
  1553.   return;
  1554. }
  1555.  
  1556. void EnableAll(void)
  1557. {
  1558.   int i;
  1559.   for (i = 0; i < Project0_CNT; i++)
  1560.   {
  1561.     GT_SetGadgetAttrs(Project0Gadgets[i],Project0Wnd,NULL,
  1562.                                      GA_Disabled, FALSE,
  1563.                                      TAG_DONE);
  1564.   }
  1565.   return;
  1566. }
  1567.  
  1568.