home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga Shareware Floppies / ma45.dms / ma45.adf / FontDT / Src / prefs.c < prev   
C/C++ Source or Header  |  2002-10-23  |  4KB  |  117 lines

  1. /*
  2. **    prefs.c - prefrences handling for Font DataType class
  3. **    Copyright © 1995 Michael Letowski
  4. */
  5.  
  6. #include <exec/types.h>
  7. #include <exec/memory.h>
  8. #include <dos/dos.h>
  9. #include <dos/rdargs.h>
  10. #include <support/types.h>
  11. #include <support/dos.h>
  12.  
  13. #include <stdlib.h>
  14.  
  15. #include "classbase.h"
  16. #include "prefs.h"
  17.  
  18. #include <proto/exec.h>
  19. #include <proto/dos.h>
  20.  
  21. #define BUF_LEN            256
  22.  
  23. #define PREFS_PATH1    "PROGDIR:Prefs/DataTypes/font.prefs"
  24. #define PREFS_PATH2    "ENV:DataTypes/font.prefs"
  25.  
  26.  
  27. STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
  28.                                                 struct Opts *opts, STRPTR name);
  29. STATIC struct RDArgs *ReadArgsBuf(struct ClassBase *cb, STRPTR template,
  30.                                                                     LONG *opts, struct RDArgs *rda);
  31.  
  32. struct PrefsHandle *GetFontPrefs(struct ClassBase *cb, struct Opts *opts)
  33. {
  34.     struct PrefsHandle *PH;
  35.     LBOOL Res=FALSE;
  36.  
  37.     clear(opts);                                                                    /* Set defaults */
  38.  
  39.     try(newv(PH,MEMF_CLEAR),                                                NO_PREFS);
  40.     try(PH->ph_RDA=AllocDosObject(DOS_RDARGS,NULL),    NO_RDA);
  41.     fset(PH->ph_RDA->RDA_Flags,RDAF_NOPROMPT);        /* Disable prompts */
  42.  
  43.     if(ThisProcessS->pr_HomeDir)                                    /* PROGDIR: exists? */
  44.         Res=ReadPrefs(cb,PH,opts,PREFS_PATH1);            /* Try first path */
  45.     unless(Res)                                                                        /* Args not read so far */
  46.         ReadPrefs(cb,PH,opts,PREFS_PATH2);                    /* Try second path */
  47.     return(PH);
  48.  
  49.     catch(FOO,                );
  50.     catch(NO_RDA,        FreeDosObject(DOS_RDARGS,PH->ph_RDA));
  51.     catch(NO_PREFS,    deletev(PH));
  52.     return(NULL);
  53. }    /* GetFontPrefs */
  54.  
  55. VOID FreeFontPrefs(struct ClassBase *cb, struct PrefsHandle *ph)
  56. {
  57.     if(ph->ph_ArgsB)        FreeArgs(ph->ph_ArgsB);        /* Free background color args */
  58.     if(ph->ph_ArgsF)        FreeArgs(ph->ph_ArgsF);        /* Free foreground color args */
  59.     if(ph->ph_ArgsDPI)    FreeArgs(ph->ph_ArgsDPI);    /* Free DPI args */
  60.     if(ph->ph_Args)            FreeArgs(ph->ph_Args);        /* Free args */
  61.     ph->ph_RDA->RDA_Buffer=NULL;                                    /* Don't free buffer */
  62.     FreeDosObject(DOS_RDARGS,ph->ph_RDA);                    /* Free additional args */
  63.     deletev(ph);
  64. }    /* FreeFontPrefs */
  65.  
  66. STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
  67.                                                 struct Opts *opts, STRPTR name)
  68. {
  69.     CHAR Buffer[BUF_LEN];
  70.     struct RDArgs *RDA=ph->ph_RDA;
  71.     BPTR FH;
  72.     LBOOL Result=FALSE;
  73.  
  74.     try(FH=Open(name,MODE_OLDFILE),    NO_FILE);
  75.     RDA->RDA_Source.CS_Buffer=Buffer;                            /* Set up buffer to read from */
  76.  
  77.     /* Read args */
  78.     if(FGets(FH,Buffer,BUF_LEN-1))                                /* Got line from file */
  79.         if(ph->ph_Args=ReadArgsBuf(cb,TEMPLATE,(LONG *)opts,RDA))
  80.         {
  81.             if(opts->opt_DPI)                                                    /* DPI given */    
  82.             {
  83.                 strncpy(Buffer,opts->opt_DPI,BUF_LEN-2);
  84.                 ph->ph_ArgsDPI=ReadArgsBuf(cb,TEMPLATEDPI,(LONG *)&opts->opt_XDPI,RDA);
  85.             }
  86.             if(opts->opt_Foreground)                                    /* Foreground color given */
  87.             {
  88.                 strncpy(Buffer,opts->opt_Foreground,BUF_LEN-2);
  89.                 ph->ph_ArgsF=ReadArgsBuf(cb,TEMPLATEF,(LONG *)&opts->opt_ForeRed,RDA);
  90.             }
  91.             if(opts->opt_Background)                                    /* Foreground color given */
  92.             {
  93.                 strncpy(Buffer,opts->opt_Background,BUF_LEN-2);
  94.                 ph->ph_ArgsB=ReadArgsBuf(cb,TEMPLATEB,(LONG *)&opts->opt_BackRed,RDA);
  95.             }            
  96.         }
  97.     Result=TRUE;
  98.  
  99.     catch(NO_FILE,    Close(FH));
  100.     return(Result);
  101. }    /* ReadPrefs */
  102.  
  103. STATIC struct RDArgs *ReadArgsBuf(struct ClassBase *cb, STRPTR template,
  104.                                                                     LONG *opts, struct RDArgs *rda)
  105. {
  106.     STRPTR Buffer=rda->RDA_Source.CS_Buffer;
  107.     LONG Len;
  108.  
  109.     Len=strlen(Buffer);                                                        /* Get size of buffer */
  110.     Buffer[Len]='\n';                                                            /* New line char */
  111.     Buffer[Len+1]='\0';                                                        /* String terminator */
  112.     rda->RDA_Source.CS_Length=Len+1;                            /* Set up string len */
  113.     rda->RDA_Source.CS_CurChr=0;                                    /* Set up current char */
  114.     rda->RDA_Buffer=NULL;                                                    /* As documented in AutoDocs */
  115.     return(ReadArgs(template,opts,rda));                    /* Read arguments */
  116. }    /* ReadArgsBuf */
  117.