home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / util / cdity / yak / src / convert.c < prev    next >
C/C++ Source or Header  |  1994-02-23  |  5KB  |  222 lines

  1. /****************************************************************************
  2.  * Convert Yak 1.4 settings files to Yak 1.5 settings files.
  3.  *
  4.  * Read 1.4 yak.prefs, write 1.5 yak.prefs and yak.hotkeys,
  5.  * rename old yak.prefs as yak.prefs.old.
  6.  * 
  7.  * Martin W Scott, 14 May 1993.
  8.  ****************************************************************************/
  9. /* This is a different line to check diff */
  10. #include <exec/types.h>
  11. #include <dos/dos.h>
  12. #include <intuition/intuition.h>
  13. #include <proto/exec.h>
  14. #include <proto/dos.h>
  15. #include <proto/intuition.h>
  16. #include <string.h>
  17. #include <stdarg.h>
  18.  
  19. #include "yak.h"
  20. #include "hotkey_types.h"
  21.  
  22. struct IntuitionBase *IntuitionBase;
  23.  
  24. static void
  25. CloseResources(void)
  26. {
  27.     if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
  28. }
  29.  
  30. static BOOL
  31. OpenResources(void)
  32. {
  33.     if (IntuitionBase = (void *)OpenLibrary("intuition.library", 37L))
  34.         return TRUE;
  35.     return FALSE;
  36. }
  37.  
  38. /* simple requester with args */
  39. void
  40. PostError(char *body, ... )
  41. {
  42.     struct EasyStruct es;
  43.     va_list args;
  44.  
  45.     if (!IntuitionBase)
  46.     {
  47.         Write(Output(), "Need AmigaDos 2.0+\n", -1);
  48.         return;
  49.     }
  50.  
  51.     /* setup the argument array */
  52.     va_start( args, body );
  53.  
  54.     /* initialise the structure */
  55.     es.es_StructSize = sizeof(struct EasyStruct);
  56.     es.es_Flags = 0L;
  57.     es.es_Title = "Yak Message";
  58.     es.es_TextFormat = body;
  59.     es.es_GadgetFormat = "OK";
  60.  
  61.     /* display the requester */
  62.     EasyRequestArgs(NULL, &es, NULL, args);
  63.  
  64.     /* free the arguments */
  65.     va_end( args );
  66. }
  67.  
  68. /* write a LONG to a file (in binary format) - returns success*/
  69. static BOOL __regargs
  70. FWriteLong(BPTR fh, LONG n)
  71. {
  72.     return (BOOL)(FWrite(fh, (UBYTE *)&n, sizeof(LONG), 1) == 1);
  73. }
  74.  
  75. /* read a LONG to a file (in binary format) - returns success */
  76. static BOOL __regargs
  77. FReadLong(BPTR fh, LONG *n)
  78. {
  79.     return (BOOL)(FRead(fh, (UBYTE *)n, sizeof(LONG), 1) == 1);
  80. }
  81.  
  82. /* write a string to a file (in binary format) - returns success*/
  83. /* '\n' is appended */
  84. static BOOL __regargs
  85. FWriteString(BPTR fh, char *buf)
  86. {
  87.     FPuts(fh, buf);
  88.     FPutC(fh, '\n');
  89.     return (BOOL)(IoErr() == 0);
  90. }
  91.  
  92. /* read a string to a file (in binary format) - returns success */
  93. /* '\n' is stripped and buf null-terminated; assumes dest large enough */
  94. static BOOL __regargs
  95. FReadString(BPTR fh, char *buf, LONG len)
  96. {
  97.     FGets(fh, buf, len-1);
  98.     buf[strlen(buf)-1] = '\0';    /* '\n' --> '\0' */
  99.     return (BOOL)(IoErr() == 0);
  100. }
  101.  
  102. #define OLD_CONFIG_ID    0x594b3133    /* YK13 */
  103. #define NEW_CONFIG_ID    0x594b3135    /* YK15 */
  104. #define HOTKEY_ID    0x594B4B31    /* 'YKK1' */
  105.  
  106. UWORD convtab[] = {
  107.     SHOW_INTERFACE, CLOSE_WINDOW, ZIP_WINDOW, SHRINK_WINDOW,
  108.     EXPAND_WINDOW, ACTIVATE_WORKBENCH, OPEN_PALETTE, DOS_COMMAND,
  109.     INSERT_DATE, CYCLE_WINDOWS, SCREEN_TO_FRONT, CENTRE_SCREEN,
  110.     SCREEN_TO_BACK, BLANK_DISPLAY
  111. };
  112.  
  113. void
  114. DoConvert(void)
  115. {
  116.     BPTR inprefs, outprefs, outkeys;
  117.     LONG n, i;
  118.     UWORD type, opts;
  119.     BOOL boolboy;
  120.     char buf[256];
  121.  
  122.     if (inprefs = Open("S:Yak.prefs", MODE_OLDFILE))
  123.     {
  124.       if (outprefs = Open("S:Yak.prefs.new", MODE_NEWFILE))
  125.       {
  126.         if (outkeys = Open("S:Yak.hotkeys", MODE_NEWFILE))
  127.         {
  128.           FReadLong(inprefs, &n);
  129.           if (n == OLD_CONFIG_ID)
  130.           {
  131.             FWriteLong(outprefs, NEW_CONFIG_ID); 
  132.             FWriteLong(outkeys, HOTKEY_ID);
  133.  
  134.         /* TOGGLES */
  135.         FReadLong(inprefs, &n);
  136.         FWriteLong(outprefs, n);
  137.         for (i = 0; i < n; i++)
  138.         {
  139.           FRead(inprefs, (UBYTE *)&boolboy, sizeof(BOOL), 1);
  140.           FWrite(outprefs, (UBYTE *)&boolboy, sizeof(BOOL), 1);
  141.         }
  142.  
  143.         /* HOTKEYS */
  144.         FReadLong(inprefs, &n);
  145.         FWriteLong(outkeys, n);
  146.         for (i = 0; i < n; i++)
  147.         {
  148.           FReadString(inprefs, buf, 256);
  149.           type = convtab[i]; opts = 0;
  150.           FWrite(outkeys, (UBYTE *)&type, sizeof(UWORD), 1);
  151.           FWrite(outkeys, (UBYTE *)&opts, sizeof(UWORD), 1);
  152.           FWriteString(outkeys, buf);
  153.           FWriteString(outkeys, "");
  154.         }
  155.         
  156.         /* PATTERNS */
  157.         FReadLong(inprefs, &n);
  158.         FWriteLong(outprefs, n);
  159.         for (i = 0; i < n; i++)
  160.         {
  161.           FReadString(inprefs, buf, 256);
  162.           FWriteString(outprefs, buf);
  163.         }
  164.  
  165.         /* POPKEY */
  166.         FReadString(inprefs, buf, 256);
  167.  
  168.         /* DATE FORMAT */
  169.         FReadString(inprefs, buf, 256);
  170.  
  171.         /* CLICK VOLUME */
  172.         FReadLong(inprefs, &n);
  173.         FWriteLong(outprefs, n);
  174.  
  175.         /* BLANK SECS */
  176.         FReadLong(inprefs, &n);
  177.         FWriteLong(outprefs, n);
  178.  
  179.         /* MBLANK SECS */
  180.         if (!FReadLong(inprefs, &n))
  181.             n = 5;
  182.         FWriteLong(outprefs, n);
  183.  
  184.         /* MBLANK METHOD */
  185.         if (!FReadLong(inprefs, &n))
  186.             n = MB_SPRITES;
  187.         FWriteLong(outprefs, n);
  188.  
  189.         Close(inprefs);
  190.         Close(outprefs);
  191.         Close(outkeys);
  192.  
  193.         Rename("S:Yak.prefs", "S:Yak.prefs.old");
  194.         Rename("S:Yak.prefs.new", "S:Yak.prefs");
  195.         
  196.         PostError("Wrote new Yak.prefs file and Yak.hotkeys file.\nOld preferences file is S:Yak.prefs.old.");
  197.         return;
  198.           }
  199.           PostError("Invalid existing Yak.prefs file");
  200.           Close(outkeys);
  201.         }
  202.          else PostError("Can't create Yak.hotkeys file");
  203.         Close(outprefs);
  204.       }
  205.       else PostError("Can't create Yak.prefs.new file");
  206.       Close(inprefs);
  207.     }
  208.     else PostError("Can't open existing Yak.prefs file");
  209. }
  210.  
  211. void
  212. __main(void)
  213. {
  214.     if (OpenResources())
  215.     {
  216.         DoConvert();
  217.         CloseResources();
  218.     }
  219.  
  220. } /* main */
  221.  
  222.