home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / util / blank / gblanker / source / prefs.c < prev    next >
C/C++ Source or Header  |  1994-10-19  |  6KB  |  193 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 <string.h>
  11. #include <stdlib.h>
  12.  
  13. #include "includes.h"
  14. #include "libraries.h"
  15. #include "protos/protos.h"
  16.  
  17. STRPTR defTTs[] = {
  18.     "DONOTWAIT", "CX_PRIORITY=", "CX_POPUP=", "CX_POPKEY=", "BLANKKEY=",
  19.     "TIMEOUT=", "BLANKER=", "BLANKERDIR=", "LEFT=", "TOP=", "REPLACE=",
  20.     "BLANKCORNER=", "DONTCORNER=" };
  21.  
  22. #define    NUMTOOLTYPES ( sizeof( defTTs ) / sizeof( STRPTR ))
  23.  
  24. BYTE *cornerStrings[] = {
  25.     "NONE", "UPPERLEFT", "UPPERRIGHT", "LOWERRIGHT", "LOWERLEFT" };
  26.  
  27. BlankerPrefs PrefsRec = { 1, TRUE, 600, 0L, 0L, "Alt Help", "Alt Delete",
  28.                                  "Random", "Blankers", 0L, 0L, 10L };
  29.  
  30. STRPTR longToStr( LONG num )
  31. {
  32.     static BYTE out[32];
  33.     LONG i = 32, j;
  34.     
  35.     if( !num )
  36.         return "0";
  37.  
  38.     while( num )
  39.     {
  40.         out[--i] = num % 10;
  41.         num /= 10;
  42.     }
  43.     for( j = 0; j < 32 - i; j++ )
  44.         out[j] = '0' + out[i+j];
  45.     out[j] = 0;
  46.     
  47.     return out;
  48. }
  49.  
  50. STRPTR ConsTT( STRPTR DefStr, STRPTR Value )
  51. {
  52.     STRPTR NewToolType;
  53.  
  54.     if( !DefStr || !Value )
  55.         return 0L;
  56.  
  57.     if( NewToolType = AllocVec( strlen(DefStr)+strlen(Value)+1, MEMF_CLEAR ))
  58.     {
  59.         strcpy( NewToolType, DefStr );
  60.         strcat( NewToolType, Value );
  61.  
  62.         return NewToolType;
  63.     }
  64.  
  65.     return 0L;
  66. }
  67.  
  68. VOID SaveDefaultPrefs( BlankerPrefs *bPO )
  69. {
  70.     BYTE *toolTypes[NUMTOOLTYPES+1], **oldToolTypes;
  71.     struct DiskObject *bDO;
  72.     LONG i;
  73.     
  74.     toolTypes[0x0] = ConsTT( defTTs[0], "" );
  75.     toolTypes[0x1] = ConsTT( defTTs[1], longToStr( bPO->bp_Priority ));
  76.     toolTypes[0x2] = ConsTT( defTTs[2], bPO->bp_PopUp ? "YES" : "NO" );
  77.     toolTypes[0x3] = ConsTT( defTTs[3], bPO->bp_PopKey );
  78.     toolTypes[0x4] = ConsTT( defTTs[4], bPO->bp_BlankKey );
  79.     toolTypes[0x5] = ConsTT( defTTs[5], longToStr( bPO->bp_Timeout/10 ));
  80.     toolTypes[0x6] = ConsTT( defTTs[6], bPO->bp_Blanker );
  81.     toolTypes[0x7] = ConsTT( defTTs[7], bPO->bp_Dir );
  82.     toolTypes[0x8] = ConsTT( defTTs[8], longToStr( bPO->bp_Left ));
  83.     toolTypes[0x9] = ConsTT( defTTs[9], longToStr( bPO->bp_Top ));
  84.     toolTypes[0xA] = ConsTT( defTTs[10], bPO->bp_Flags&BF_REPLACE?"YES":"NO" );
  85.     toolTypes[0xB] = ConsTT( defTTs[11], cornerStrings[bPO->bp_BlankCorner] );
  86.     toolTypes[0xC] = ConsTT( defTTs[12], cornerStrings[bPO->bp_DontCorner] );
  87.     toolTypes[NUMTOOLTYPES] = NULL;
  88.         
  89.     if( bDO = GetDiskObject( "PROGDIR:Garshneblanker" ))
  90.     {
  91.         oldToolTypes = bDO->do_ToolTypes;
  92.         bDO->do_ToolTypes = toolTypes;
  93.         PutDiskObject( "PROGDIR:Garshneblanker", bDO );
  94.         bDO->do_ToolTypes = oldToolTypes;
  95.         FreeDiskObject( bDO );
  96.     }
  97.         
  98.     for( i = 0; i < NUMTOOLTYPES; i++ )
  99.         if( toolTypes[i] )
  100.             FreeVec( toolTypes[i] );
  101. }
  102.  
  103. BlankerPrefs *LoadDefaultPrefs( VOID )
  104. {
  105.     struct DiskObject *bDO;
  106.     
  107.     if( bDO = GetDiskObject( "PROGDIR:Garshneblanker" ))
  108.     {
  109.         STRPTR tooltype;
  110.  
  111.         if( tooltype = FindToolType( bDO->do_ToolTypes, "CX_PRIORITY" ))
  112.             PrefsRec.bp_Priority = atoi( tooltype );
  113.         if( tooltype = FindToolType( bDO->do_ToolTypes, "CX_POPUP" ))
  114.             PrefsRec.bp_PopUp = ( LONG )MatchToolValue( tooltype, "YES" );
  115.         if( tooltype = FindToolType( bDO->do_ToolTypes, "CX_POPKEY" ))
  116.             strcpy( PrefsRec.bp_PopKey, tooltype );
  117.         if( tooltype = FindToolType( bDO->do_ToolTypes, "BLANKKEY" ))
  118.             strcpy( PrefsRec.bp_BlankKey, tooltype );
  119.         if( tooltype = FindToolType( bDO->do_ToolTypes, "TIMEOUT" ))
  120.             PrefsRec.bp_Timeout = 10 * atoi( tooltype );
  121.         if( tooltype = FindToolType( bDO->do_ToolTypes, "BLANKER" ))
  122.             strcpy( PrefsRec.bp_Blanker, tooltype );
  123.         if( tooltype = FindToolType( bDO->do_ToolTypes, "BLANKERDIR" ))
  124.             strcpy( PrefsRec.bp_Dir, tooltype );
  125.         if( tooltype = FindToolType( bDO->do_ToolTypes, "LEFT" ))
  126.             PrefsRec.bp_Left = atoi( tooltype );
  127.         if( tooltype = FindToolType( bDO->do_ToolTypes, "TOP" ))
  128.             PrefsRec.bp_Top = atoi( tooltype );
  129.         if( tooltype = FindToolType( bDO->do_ToolTypes, "REPLACE" ))
  130.             PrefsRec.bp_Flags |=
  131.                 ( MatchToolValue( tooltype, "YES" ) ? BF_REPLACE : 0L );
  132.         if( tooltype = FindToolType( bDO->do_ToolTypes, "BLANKCORNER" ))
  133.         {
  134.             if( MatchToolValue( tooltype, "UPPERLEFT" ))
  135.                 PrefsRec.bp_BlankCorner = BC_UPPERLEFT;
  136.             else if( MatchToolValue( tooltype, "UPPERRIGHT" ))
  137.                 PrefsRec.bp_BlankCorner = BC_UPPERRIGHT;
  138.             else if( MatchToolValue( tooltype, "LOWERRIGHT" ))
  139.                 PrefsRec.bp_BlankCorner = BC_LOWERRIGHT;
  140.             else if( MatchToolValue( tooltype, "LOWERLEFT" ))
  141.                 PrefsRec.bp_BlankCorner = BC_LOWERLEFT;
  142.         }
  143.         if( tooltype = FindToolType( bDO->do_ToolTypes, "DONTCORNER" ))
  144.         {
  145.             if( MatchToolValue( tooltype, "UPPERLEFT" ))
  146.                 PrefsRec.bp_DontCorner = BC_UPPERLEFT;
  147.             else if( MatchToolValue( tooltype, "UPPERRIGHT" ))
  148.                 PrefsRec.bp_DontCorner = BC_UPPERRIGHT;
  149.             else if( MatchToolValue( tooltype, "LOWERRIGHT" ))
  150.                 PrefsRec.bp_DontCorner = BC_LOWERRIGHT;
  151.             else if( MatchToolValue( tooltype, "LOWERLEFT" ))
  152.                 PrefsRec.bp_DontCorner = BC_LOWERLEFT;
  153.         }
  154.         FreeDiskObject( bDO );
  155.     }
  156.     
  157.     return &PrefsRec;
  158. }
  159.  
  160. LONG EntriesInList( struct List *List )
  161. {
  162.     struct Node *Counter;
  163.     LONG Entries;
  164.  
  165.     for( Counter = List->lh_Head, Entries = 0; Counter->ln_Succ;
  166.         Counter = Counter->ln_Succ )
  167.         if( Counter->ln_Name[0] != '{' )
  168.             Entries++;
  169.  
  170.     return Entries;
  171. }
  172.  
  173. STRPTR RandomModule( VOID )
  174. {
  175.     LONG i = EntriesInList( BlankerEntries ) - 1;
  176.     LONG Entry = RangeRand( i );
  177.     struct Node *TmpNode;
  178.     
  179.     if( !i )
  180.         return "None";
  181.     
  182.     for( TmpNode = BlankerEntries->lh_Head; TmpNode->ln_Name[0] == '{';
  183.         TmpNode = TmpNode->ln_Succ );
  184.  
  185.     for( i = 0; i < Entry; TmpNode = TmpNode->ln_Succ )
  186.         if( TmpNode->ln_Name[0] != '{' )
  187.             i++;
  188.  
  189.     for( ; TmpNode->ln_Name[0] == '{'; TmpNode = TmpNode->ln_Succ );
  190.  
  191.     return TmpNode->ln_Name;
  192. }
  193.