home *** CD-ROM | disk | FTP | other *** search
- /*
- ** prefs.c - prefrences handling for Font DataType class
- ** Copyright © 1995 Michael Letowski
- */
-
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <dos/dos.h>
- #include <dos/rdargs.h>
- #include <support/types.h>
- #include <support/dos.h>
-
- #include <stdlib.h>
-
- #include "classbase.h"
- #include "prefs.h"
-
- #include <proto/exec.h>
- #include <proto/dos.h>
-
- #define BUF_LEN 256
-
- #define PREFS_PATH1 "PROGDIR:Prefs/DataTypes/font.prefs"
- #define PREFS_PATH2 "ENV:DataTypes/font.prefs"
-
-
- STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
- struct Opts *opts, STRPTR name);
- STATIC struct RDArgs *ReadArgsBuf(struct ClassBase *cb, STRPTR template,
- LONG *opts, struct RDArgs *rda);
-
- struct PrefsHandle *GetFontPrefs(struct ClassBase *cb, struct Opts *opts)
- {
- struct PrefsHandle *PH;
- LBOOL Res=FALSE;
-
- clear(opts); /* Set defaults */
-
- try(newv(PH,MEMF_CLEAR), NO_PREFS);
- try(PH->ph_RDA=AllocDosObject(DOS_RDARGS,NULL), NO_RDA);
- fset(PH->ph_RDA->RDA_Flags,RDAF_NOPROMPT); /* Disable prompts */
-
- if(ThisProcessS->pr_HomeDir) /* PROGDIR: exists? */
- Res=ReadPrefs(cb,PH,opts,PREFS_PATH1); /* Try first path */
- unless(Res) /* Args not read so far */
- ReadPrefs(cb,PH,opts,PREFS_PATH2); /* Try second path */
- return(PH);
-
- catch(FOO, );
- catch(NO_RDA, FreeDosObject(DOS_RDARGS,PH->ph_RDA));
- catch(NO_PREFS, deletev(PH));
- return(NULL);
- } /* GetFontPrefs */
-
- VOID FreeFontPrefs(struct ClassBase *cb, struct PrefsHandle *ph)
- {
- if(ph->ph_ArgsB) FreeArgs(ph->ph_ArgsB); /* Free background color args */
- if(ph->ph_ArgsF) FreeArgs(ph->ph_ArgsF); /* Free foreground color args */
- if(ph->ph_ArgsDPI) FreeArgs(ph->ph_ArgsDPI); /* Free DPI args */
- if(ph->ph_Args) FreeArgs(ph->ph_Args); /* Free args */
- ph->ph_RDA->RDA_Buffer=NULL; /* Don't free buffer */
- FreeDosObject(DOS_RDARGS,ph->ph_RDA); /* Free additional args */
- deletev(ph);
- } /* FreeFontPrefs */
-
- STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
- struct Opts *opts, STRPTR name)
- {
- CHAR Buffer[BUF_LEN];
- struct RDArgs *RDA=ph->ph_RDA;
- BPTR FH;
- LBOOL Result=FALSE;
-
- try(FH=Open(name,MODE_OLDFILE), NO_FILE);
- RDA->RDA_Source.CS_Buffer=Buffer; /* Set up buffer to read from */
-
- /* Read args */
- if(FGets(FH,Buffer,BUF_LEN-1)) /* Got line from file */
- if(ph->ph_Args=ReadArgsBuf(cb,TEMPLATE,(LONG *)opts,RDA))
- {
- if(opts->opt_DPI) /* DPI given */
- {
- strncpy(Buffer,opts->opt_DPI,BUF_LEN-2);
- ph->ph_ArgsDPI=ReadArgsBuf(cb,TEMPLATEDPI,(LONG *)&opts->opt_XDPI,RDA);
- }
- if(opts->opt_Foreground) /* Foreground color given */
- {
- strncpy(Buffer,opts->opt_Foreground,BUF_LEN-2);
- ph->ph_ArgsF=ReadArgsBuf(cb,TEMPLATEF,(LONG *)&opts->opt_ForeRed,RDA);
- }
- if(opts->opt_Background) /* Foreground color given */
- {
- strncpy(Buffer,opts->opt_Background,BUF_LEN-2);
- ph->ph_ArgsB=ReadArgsBuf(cb,TEMPLATEB,(LONG *)&opts->opt_BackRed,RDA);
- }
- }
- Result=TRUE;
-
- catch(NO_FILE, Close(FH));
- return(Result);
- } /* ReadPrefs */
-
- STATIC struct RDArgs *ReadArgsBuf(struct ClassBase *cb, STRPTR template,
- LONG *opts, struct RDArgs *rda)
- {
- STRPTR Buffer=rda->RDA_Source.CS_Buffer;
- LONG Len;
-
- Len=strlen(Buffer); /* Get size of buffer */
- Buffer[Len]='\n'; /* New line char */
- Buffer[Len+1]='\0'; /* String terminator */
- rda->RDA_Source.CS_Length=Len+1; /* Set up string len */
- rda->RDA_Source.CS_CurChr=0; /* Set up current char */
- rda->RDA_Buffer=NULL; /* As documented in AutoDocs */
- return(ReadArgs(template,opts,rda)); /* Read arguments */
- } /* ReadArgsBuf */
-