home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / util / blank / gblanker / source / winhand.c < prev   
C/C++ Source or Header  |  1994-10-18  |  7KB  |  294 lines

  1. /*
  2.  *    Copyright (c) 1994 Michael D. Bayne.
  3.  *    All rights reserved.
  4.  *
  5.  *    Please see the documentation accompanying the distribution for distribution
  6.  *  and disclaimer information.
  7.  */
  8.  
  9. #include <exec/memory.h>
  10. #include <intuition/gadgetclass.h>
  11. #include <libraries/gadtools.h>
  12. #include <string.h>
  13. #include <stdlib.h>
  14.  
  15. #include "includes.h"
  16. #include "libraries.h"
  17. #include "protos/protos.h"
  18.  
  19. STRPTR NameSansParens( STRPTR Name )
  20. {
  21.     BYTE Buf[64];
  22.  
  23.     if( Name[0] == '{' )
  24.     {
  25.         strcpy( Buf, Name + 1 );
  26.         Buf[strlen( Buf ) - 1] = '\0';
  27.     }
  28.     else
  29.         return Name;
  30.  
  31.     return Buf;
  32. }
  33.  
  34. STRPTR NameForEntry( struct List *Entries, LONG Entry )
  35. {
  36.     struct Node *Tmp;
  37.  
  38.     for( Tmp = Entries->lh_Head; Entry && Tmp; Tmp = Tmp->ln_Succ, --Entry );
  39.  
  40.     return Tmp ? Tmp->ln_Name : 0L;
  41. }
  42.  
  43. int BT_PREFSClicked( VOID )
  44. {
  45.     if( Stricmp( Prefs->bp_Blanker, "Random" ))
  46.         MessageModule( BM_DOPREFS );
  47.     
  48.     return OK;
  49. }
  50.  
  51. int BT_INFOClicked( VOID )
  52. {
  53.     struct EasyStruct InfoReq =
  54.     { sizeof( struct EasyStruct ), 0, "Information", 0L, "Ok" };
  55.     BYTE InfoFileName[128];
  56.     BPTR InfoFile;
  57.     
  58.     InfoReq.es_TextFormat = AllocVec( 1024 * sizeof( BYTE ), MEMF_CLEAR );
  59.     if( !InfoReq.es_TextFormat )
  60.         return OK;
  61.         
  62.     ActivateCxObj( ServerBroker, 0l );
  63.  
  64.     strcpy( InfoFileName, Prefs->bp_Dir );
  65.     AddPart( InfoFileName, NameSansParens( Prefs->bp_Blanker ), 128 );
  66.     strcat( InfoFileName, ".txt" );
  67.     
  68.     if( InfoFile = Open( InfoFileName, MODE_OLDFILE ))
  69.     {
  70.         LONG BytesRead;
  71.         
  72.         BytesRead = Read( InfoFile, InfoReq.es_TextFormat, 1024 );
  73.         if( InfoReq.es_TextFormat[BytesRead-1] == '\n' )
  74.             InfoReq.es_TextFormat[BytesRead-1] = '\0';
  75.         else
  76.             InfoReq.es_TextFormat[BytesRead] = '\0';
  77.         Close( InfoFile );
  78.     }
  79.     else
  80.     {
  81.         strcpy( InfoReq.es_TextFormat,
  82.                "No information available for module: " );
  83.         strcat( InfoReq.es_TextFormat, NameSansParens( Prefs->bp_Blanker ));
  84.         strcat( InfoReq.es_TextFormat, "." );
  85.     }
  86.  
  87.     EasyRequestArgs( BlankerWnd, &InfoReq, 0L, 0L );
  88.     FreeVec( InfoReq.es_TextFormat );
  89.     ActivateCxObj( ServerBroker, 1l );
  90.     
  91.     return OK;
  92. }
  93.  
  94. int BT_HIDEClicked( VOID )
  95. {
  96.     return CLOSEWIN;
  97. }
  98.  
  99. int BT_SAVEClicked( VOID )
  100. {
  101.     Prefs->bp_Left = BlankerWnd->LeftEdge;
  102.     Prefs->bp_Top = BlankerWnd->TopEdge;
  103.     SaveDefaultPrefs( Prefs );
  104.     
  105.     return OK;
  106. }
  107.  
  108. int BT_QUITClicked( VOID )
  109. {
  110.     return QUIT;
  111. }
  112.  
  113. int LV_BLANKERSClicked( VOID )
  114. {
  115.     LONG Rand;
  116.     
  117.     MessageModule( BM_DOQUIT );
  118.     strcpy( Prefs->bp_Blanker,
  119.            NameForEntry( BlankerEntries, BlankerMsg.Code ));
  120.     Rand = !Stricmp( Prefs->bp_Blanker, "Random" );
  121.     GT_SetGadgetAttrs( BlankerGadgets[GD_BT_PREFS], BlankerWnd, 0L,
  122.                       GA_Disabled, Rand, TAG_DONE );
  123.     GT_SetGadgetAttrs( BlankerGadgets[GD_BT_TOGGLE], BlankerWnd, 0L,
  124.                       GA_Disabled, Rand, TAG_DONE );
  125.     GT_SetGadgetAttrs( BlankerGadgets[GD_CY_REPLACE], BlankerWnd, 0L,
  126.                       GA_Disabled, !Rand, TAG_DONE );
  127.     if( !Rand )
  128.         LoadModule( Prefs->bp_Dir, Prefs->bp_Blanker );
  129.     
  130.     return OK;
  131. }
  132.  
  133. int CY_REPLACEClicked( VOID )
  134. {
  135.     if( BlankerMsg.Code )
  136.         Prefs->bp_Flags |= BF_REPLACE;
  137.     else
  138.         Prefs->bp_Flags &= ~BF_REPLACE;
  139.  
  140.     return OK;
  141. }
  142.  
  143. int CY_BLANKCORNERClicked( VOID )
  144. {
  145.     Prefs->bp_BlankCorner = BlankerMsg.Code;
  146.  
  147.     return OK;
  148. }
  149.  
  150. int CY_DONTCORNERClicked( VOID )
  151. {
  152.     Prefs->bp_DontCorner = BlankerMsg.Code;
  153.  
  154.     return OK;
  155. }
  156.  
  157. int BT_TOGGLEClicked( VOID )
  158. {
  159.     struct Node *Entry = FindName( BlankerEntries, Prefs->bp_Blanker );
  160.     BYTE TmpName[64], OldPath[128], NewPath[128], *Name = Entry->ln_Name;
  161.  
  162.     strcpy( TmpName, Name );
  163.     
  164.     GT_SetGadgetAttrs( BlankerGadgets[GD_LV_BLANKERS], BlankerWnd, 0L,
  165.                       GTLV_Labels, ~0, TAG_DONE );
  166.     if( Name[0] == '{' )
  167.     {
  168.         strcpy( Name, TmpName + 1 );
  169.         Name[strlen( Name ) - 1] = '\0';
  170.     }
  171.     else
  172.     {
  173.         strcpy( Name, "{" );
  174.         strcat( Name, TmpName );
  175.         strcat( Name, "}" );
  176.     }
  177.     GT_SetGadgetAttrs( BlankerGadgets[GD_LV_BLANKERS], BlankerWnd, 0L,
  178.                       GTLV_Labels, BlankerEntries, TAG_DONE );
  179.     strcpy( Prefs->bp_Blanker, Name );
  180.     strcpy( OldPath, Prefs->bp_Dir );
  181.     AddPart( OldPath, TmpName, 128 );
  182.     strcpy( NewPath, Prefs->bp_Dir );
  183.     AddPart( NewPath, Name, 128 );
  184.     Rename( OldPath, NewPath );
  185.     
  186.     return OK;
  187. }
  188.  
  189. int BlankerCloseWindow( VOID )
  190. {
  191.     return CLOSEWIN;
  192. }
  193.  
  194. int BlankerVanillaKey( VOID )
  195. {
  196.     switch( BlankerMsg.Code )
  197.     {
  198.     case 'p':
  199.         return BT_PREFSClicked();
  200.     case 'i':
  201.         return BT_INFOClicked();
  202.     case 'h':
  203.         return CLOSEWIN;
  204.     case 's':
  205.         return BT_SAVEClicked();
  206.     case 't':
  207.         return BT_TOGGLEClicked();
  208.     case 'q':
  209.         return QUIT;
  210.     case 'b':
  211.         Prefs->bp_BlankCorner = ( Prefs->bp_BlankCorner + 1 ) % 5;
  212.         GT_SetGadgetAttrs( BlankerGadgets[GD_CY_BLANKCORNER], BlankerWnd, 0L,
  213.                           GTCY_Active, Prefs->bp_BlankCorner, TAG_DONE );
  214.         return OK;
  215.     case 'B':
  216.         Prefs->bp_BlankCorner = ( Prefs->bp_BlankCorner + 4 ) % 5;
  217.         GT_SetGadgetAttrs( BlankerGadgets[GD_CY_BLANKCORNER], BlankerWnd, 0L,
  218.                           GTCY_Active, Prefs->bp_BlankCorner, TAG_DONE );
  219.         return OK;
  220.     case 'd':
  221.         Prefs->bp_DontCorner = ( Prefs->bp_DontCorner + 1 ) % 5;
  222.         GT_SetGadgetAttrs( BlankerGadgets[GD_CY_DONTCORNER], BlankerWnd, 0L,
  223.                           GTCY_Active, Prefs->bp_DontCorner, TAG_DONE );
  224.         return OK;
  225.     case 'D':
  226.         Prefs->bp_DontCorner = ( Prefs->bp_DontCorner + 4 ) % 5;
  227.         GT_SetGadgetAttrs( BlankerGadgets[GD_CY_DONTCORNER], BlankerWnd, 0L,
  228.                           GTCY_Active, Prefs->bp_DontCorner, TAG_DONE );
  229.         return OK;
  230.     default:
  231.         return OK;
  232.     }
  233. }
  234.  
  235. LONG openMainWindow( VOID )
  236. {
  237.     static BYTE Title[80];
  238.     struct Node *TmpNode;
  239.     LONG i;
  240.  
  241.     if( !BlankerWnd )
  242.     {
  243.         if( SetupScreen())
  244.             return 1L;
  245.         strcpy( Title, "Garshneblanker ( PopKey=" );
  246.         strcat( Title, Prefs->bp_PopKey );
  247.         strcat( Title, ", BlankKey=" );
  248.         strcat( Title, Prefs->bp_BlankKey );
  249.         strcat( Title, " )" );
  250.         BlankerLeft = Prefs->bp_Left;
  251.         BlankerTop = Prefs->bp_Top;
  252.         OpenBlankerWindow();
  253.         SetWindowTitles( BlankerWnd, "Garshneblanker", Title );
  254.     }
  255.     else
  256.     {
  257.         ActivateWindow( BlankerWnd );
  258.         WindowToFront( BlankerWnd );
  259.     }
  260.     
  261.     if( BlankerWnd )
  262.         ScreenToFront( BlankerWnd->WScreen );
  263.     else
  264.         return QUIT;
  265.     
  266.     GT_SetGadgetAttrs( BlankerGadgets[GD_LV_BLANKERS], BlankerWnd, 0L,
  267.                       GTLV_Labels, BlankerEntries, TAG_DONE );
  268.     GT_SetGadgetAttrs( BlankerGadgets[GD_CY_REPLACE], BlankerWnd, 0L,
  269.                       GTCY_Active, Prefs->bp_Flags & BF_REPLACE, TAG_DONE );
  270.     GT_SetGadgetAttrs( BlankerGadgets[GD_CY_BLANKCORNER], BlankerWnd, 0L,
  271.                       GTCY_Active, Prefs->bp_BlankCorner, TAG_DONE );
  272.     GT_SetGadgetAttrs( BlankerGadgets[GD_CY_DONTCORNER], BlankerWnd, 0L,
  273.                       GTCY_Active, Prefs->bp_DontCorner, TAG_DONE );
  274.  
  275.     for( i = 0, TmpNode = BlankerEntries->lh_Head;
  276.         TmpNode && Stricmp( TmpNode->ln_Name, Prefs->bp_Blanker );
  277.         TmpNode = TmpNode->ln_Succ, i++ );
  278.     if( !TmpNode )
  279.         i = 0;
  280.     GT_SetGadgetAttrs( BlankerGadgets[GD_LV_BLANKERS], BlankerWnd, 0L,
  281.                       GTLV_Selected, i, GTLV_MakeVisible, i, GTLV_Top, i,
  282.                       TAG_DONE );
  283.     
  284.     i = !Stricmp( Prefs->bp_Blanker, "Random" );
  285.     GT_SetGadgetAttrs( BlankerGadgets[GD_BT_PREFS], BlankerWnd, 0L,
  286.                       GA_Disabled, i, TAG_DONE );
  287.     GT_SetGadgetAttrs( BlankerGadgets[GD_BT_TOGGLE], BlankerWnd, 0L,
  288.                       GA_Disabled, i, TAG_DONE );
  289.     GT_SetGadgetAttrs( BlankerGadgets[GD_CY_REPLACE], BlankerWnd, 0L,
  290.                       GA_Disabled, !i, TAG_DONE );
  291.  
  292.     return OK;
  293. }
  294.