home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / commodities / yak / source / settings.c < prev    next >
C/C++ Source or Header  |  1993-04-22  |  6KB  |  239 lines

  1.  /*
  2.  * Variables controlling Yak settings.
  3.  * Routines for initialisation at startup.
  4.  */
  5.  
  6. #include <exec/types.h>
  7. #include <dos/dos.h>
  8. #include <dos/dosextens.h>
  9. #include <libraries/commodities.h>
  10. #include <proto/dos.h>
  11. #include <string.h>
  12.  
  13. #include "yak.h"
  14. #include "popup.h"
  15.  
  16. /* local prototypes */
  17. static BOOL __regargs FWriteLong(BPTR fh, LONG n);
  18. static BOOL __regargs FReadLong(BPTR fh, LONG *n);
  19. static BOOL __regargs FWriteString(BPTR fh, char *buf);
  20. static BOOL __regargs FReadString(BPTR fh, char *buf);
  21.  
  22. #define DEF_POPCOMMAND    "NewShell CON:0/178//78/AmigaShell/CLOSE"
  23. char    PopCommand[POPLEN+1] = DEF_POPCOMMAND;    /* used for PopCLI */
  24.  
  25. #define DEF_DATEFORMAT  "%e %B %Y"
  26. char    DateFormat[DATELEN+1] = DEF_DATEFORMAT;    /* used for InsertDate */
  27.  
  28. #define DEF_VOLUME    48
  29. LONG    click_volume = DEF_VOLUME;        /* used for keyclick */
  30.  
  31. #define DEF_BLANKSECS    300
  32. LONG    blanksecs = DEF_BLANKSECS;
  33. LONG    blanktimeout;
  34. LONG    blankcount;                /* countdown to blank-time */
  35.  
  36. #define DEF_MBLANKSECS    5
  37. LONG    mouseblank = MB_SPRITES;
  38. LONG    mblanksecs = DEF_MBLANKSECS;
  39. LONG    mblanktimeout;
  40. LONG    mblankcount;            /* countdown to mouse-blank-time */
  41.  
  42. TOGGLEDATA toggles[] = {        /* -1 means UNUSED */
  43.     TRUE,    GDX_CTFCheck,
  44.     TRUE,    GDX_CTBCheck,
  45.     TRUE,    GDX_AutoCheck,
  46.     FALSE,    GDX_KeyActCheck,
  47.     TRUE,    GDX_ScrCycleCheck,
  48.     FALSE,    GDX_AutoPopCheck,
  49.     FALSE,    GDX_RMBActCheck,
  50.     FALSE,    -1,
  51.     TRUE,    -1,
  52.     FALSE,    GDX_WildStarCheck,
  53.     TRUE,    GDX_ScrActCheck
  54. };
  55.  
  56. HOTKEYDATA hk[NUM_HOTKEYS] = {
  57.     { HK_POPKEY,    NULL, "RCommand help" },
  58.     { HK_CLOSEKEY,    NULL, "control esc" },
  59.     { HK_ZIPKEY,    NULL, "control z" },
  60.     { HK_SHRINKKEY,    NULL, "lcommand [" },
  61.     { HK_ZOOMKEY,    NULL, "lcommand ]" },
  62.     { HK_WORKBENCH,    NULL, "lcommand w" },
  63.     { HK_POPPALKEY,    NULL, "lcommand p" },
  64.     { HK_POPCLI,    NULL, "lcommand esc" },
  65.     { HK_INSDATE,    NULL, "lcommand d" },
  66.     { HK_CYCLEWIN,    NULL, "lcommand k" },
  67.     { HK_CYCLESCR,    NULL, "lcommand n" },
  68.     { HK_CENTERSCR,    NULL, "lcommand c" },
  69.     { HK_SCRTOBACK,    NULL, "lcommand m" },    /* special */
  70.     { HK_BLANK,    NULL, "lcommand del" }
  71. };
  72.  
  73. PATTERNDATA patterns[NUM_PATTERNS] = {
  74.     { "#?", NULL },            /* autoactivation screens */
  75.     { "#?", NULL },            /* click screens */
  76.     { "~(Workbench)", NULL },    /* autopop windows */
  77.     { "~(Workbench)", NULL }    /* click windows */
  78. };
  79.  
  80. /* 1.3 format
  81.  * Routines to load/save config file for Yak.
  82.  * Should handle config files in upward-compatible manner.
  83.  * File format:
  84.  * 
  85.  *     LONG ID
  86.  *     LONG NUM_TOGGLES
  87.  *     BOOL toggles
  88.  *     LONG NUM_HOTKEYS
  89.  *     STR hotkey1 '\n'
  90.  *         :
  91.  *     STR hotkeyN '\n'
  92.  *     LONG NUM_PATTERNS
  93.  *    STR pattern1 '\n'
  94.  *         :
  95.  *    STR patternN '\n'
  96.  *     STR popcommand '\n'
  97.  *    STR datefmt '\n'
  98.  *     LONG click_volume, blanksecs
  99.  *    LONG mblanksecs            **ADDED @ v1.3b
  100.  *    LONG mouseblank            **ADDED @ v1.3e
  101.  */
  102.  
  103. #define CONFIG_ID    0x594b3133    /* YK13 */
  104.  
  105. /* write a LONG to a file (in binary format) - returns success*/
  106. static BOOL __regargs
  107. FWriteLong(BPTR fh, LONG n)
  108. {
  109.     return (BOOL)(FWrite(fh, (UBYTE *)&n, sizeof(LONG), 1) == 1);
  110. }
  111.  
  112. /* read a LONG to a file (in binary format) - returns success */
  113. static BOOL __regargs
  114. FReadLong(BPTR fh, LONG *n)
  115. {
  116.     return (BOOL)(FRead(fh, (UBYTE *)n, sizeof(LONG), 1) == 1);
  117. }
  118.  
  119. /* write a string to a file (in binary format) - returns success*/
  120. /* '\n' is appended */
  121. static BOOL __regargs
  122. FWriteString(BPTR fh, char *buf)
  123. {
  124.     FPuts(fh, buf);
  125.     FPutC(fh, '\n');
  126.     return (BOOL)(IoErr() == 0);
  127. }
  128.  
  129. /* read a string to a file (in binary format) - returns success */
  130. /* '\n' is stripped and buf null-terminated; assumes dest large enough */
  131. static BOOL __regargs
  132. FReadString(BPTR fh, char *buf)
  133. {
  134.     char tbuf[512];
  135.  
  136.     FGets(fh, tbuf, 512);
  137.     tbuf[strlen(tbuf)-1] = '\0';    /* '\n' --> '\0' */
  138.     strcpy(buf, tbuf);
  139.     return (BOOL)(IoErr() == 0);
  140. }
  141.  
  142. /* save current settings to config file */
  143. void __regargs
  144. SaveSettings(char *file)
  145. {
  146.     BPTR    fh;
  147.     UWORD    i;
  148.  
  149.     if (fh = Open(file, MODE_NEWFILE))
  150.     {
  151.         FWriteLong(fh, CONFIG_ID);
  152.  
  153.         /* toggles */
  154.         FWriteLong(fh, NUM_TOGGLES);
  155.         for (i = 0; i < NUM_TOGGLES; i++)
  156.             FWrite(fh, (UBYTE *)&toggles[i].pos, sizeof(BOOL), 1);
  157.  
  158.         /* hotkeys */
  159.         FWriteLong(fh, NUM_HOTKEYS);
  160.         for (i = 0; i < NUM_HOTKEYS; i++)
  161.             FWriteString(fh, hk[i].key);
  162.  
  163.         /* patterns */
  164.         FWriteLong(fh, NUM_PATTERNS);
  165.         for (i = 0; i < NUM_PATTERNS; i++)
  166.             FWriteString(fh, patterns[i].patstr);
  167.  
  168.         /* miscellaneous */
  169.         FWriteString(fh, PopCommand);
  170.         FWriteString(fh, DateFormat);
  171.         FWriteLong(fh, click_volume);
  172.         FWriteLong(fh, blanksecs);
  173.         FWriteLong(fh, mblanksecs);
  174.  
  175.         FWriteLong(fh, mouseblank);
  176.  
  177.         Close(fh);
  178.     }
  179.     if (IoErr() != 0) PostError("Error writing config file\n");
  180. }
  181.  
  182. /* load current settings from file */
  183. void __regargs
  184. LoadSettings(char *file)
  185. {
  186.     BPTR    fh;
  187.     UWORD    i;
  188.     LONG    n;
  189.  
  190.     if (fh = Open(file, MODE_OLDFILE))
  191.     {
  192.         FReadLong(fh, &n);
  193.         if (n == CONFIG_ID)
  194.         {
  195.             /* toggles */
  196.             FReadLong(fh, &n);
  197.             for (i = 0; i < n; i++)
  198.                 FRead(fh, (UBYTE *)&toggles[i].pos, sizeof(BOOL), 1);
  199.  
  200.             /* hotkeys */
  201.             FReadLong(fh, &n);
  202.             for (i = 0; i < n; i++)
  203.                 FReadString(fh, hk[i].key);
  204.  
  205.             /* patterns */
  206.             FReadLong(fh, &n);
  207.             for (i = 0; i < n; i++)
  208.                 FReadString(fh, patterns[i].patstr);
  209.  
  210.             /* miscellaneous */
  211.             FReadString(fh, PopCommand);
  212.             FReadString(fh, DateFormat);
  213.             FReadLong(fh, &click_volume);
  214.             FReadLong(fh, &blanksecs);
  215.             if (!FReadLong(fh, &mblanksecs))    /* none there */
  216.                 mblanksecs = DEF_MBLANKSECS;
  217.             if (!FReadLong(fh, &mouseblank))    /* none there */
  218.                 mouseblank = MB_SPRITES;
  219.         }
  220.         else PostError("Invalid config file\n");
  221.         Close(fh);
  222.     }
  223.  
  224.     /* set-up hotkeys */
  225.     for (i = 0; i < NUM_HOTKEYS; i++)
  226.         AddHotKey(NULL, i);
  227.  
  228.     /* set-up patterns */
  229.     for (i = 0; i < NUM_PATTERNS; i++)
  230.         InitPattern(NULL, i);
  231.  
  232.     if (wildstar)
  233.         WILDSTARON;
  234.     else
  235.         wildstar = ((struct RootNode *)(DOSBase->dl_Root))->rn_Flags & RNF_WILDSTAR;
  236.     blankcount = blanktimeout = 10*blanksecs;
  237.     mblankcount = mblanktimeout = 10*mblanksecs;
  238. }
  239.