home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d1xx
/
d128
/
mrbackup
/
userprefs.c
< prev
Wrap
C/C++ Source or Header
|
1988-01-02
|
4KB
|
208 lines
/* MRBackup user preferences processing.
* Filename: UserPrefs.c
* Date: 08/23/87
*/
#include "MRBackup.h"
char *fgets();
extern struct Gadget backpathgad;
extern struct Gadget excludepathgad;
extern struct Gadget homepathgad;
extern struct Gadget listpathgad;
extern struct Requester *pathrequest;
extern struct Window *pathwindow;
#define KEYMAX 20 /* max length of a keyword */
#define NKEYWORD 7 /* number of keywords supported */
#define PREFERENCES_FILE "S:MRBackup.init"
#define KW_HOME 0
#define KW_BACKUP 1
#define KW_LIST 2
#define KW_EXCLUDE 3
#define KW_COMPRESSION 4
#define KW_LISTING 5
#define KW_SPEECH 6
static char *keywords[NKEYWORD] = {
"home", "backup", "list", "exclude",
"compression", "listing", "speech"
};
/* Process the user preferences file. */
GetUserPrefs()
{
char c;
USHORT i;
char keyword[KEYMAX+1];
short keyindex;
USHORT keyleng;
FILE *prefs;
char s[81];
char *s1, *s2, *s3;
if (!(prefs = fopen(PREFERENCES_FILE,"r"))) {
WriteConsole("I couldn't get your preferences.\n");
return;
}
while (fgets(s, 80, prefs)) {
if (*s == '#') continue;
WriteConsole(s);
s1 = s;
keyleng = 0;
while ((c = *s1++) && isalpha(c)) {
if (keyleng < KEYMAX) keyword[keyleng++] = tolower(c);
else {
badkey:
WriteConsole("Keyword error in preferences file.\n");
err:
goto done;
}
}
keyword[keyleng] = '\0';
for (keyindex = -1, i = 0; i < NKEYWORD; ++i) {
if (!strcmp(keyword, keywords[i])) {
keyindex = i; /* found it */
break;
}
}
if (keyindex < 0) goto badkey;
while (c == ' ') c = *s1++;
if (c != '=') {
badsyn:
WriteConsole("Syntax error in preferences file.\n");
goto done;
}
/* Get the parameter field, minus any leading or trailing
* blanks.
*/
while ((c = *s1) == ' ') ++s1; /* skip leading blanks */
/* Delete trailing blanks. */
s2 = s3 = s1;
while (c && c != '\n') {
if (c != ' ') s2 = s3; /* record non-blank end of string */
c = *s3++;
}
*s2 = '\0'; /* truncate the string here */
SetUserPref(keyindex, s1);
}
done:
fclose(prefs);
}
/* Save the current program settings in the user preferences file. */
PutUserPrefs()
{
WriteConsole("PutUserPrefs() is not implemented\n");
}
/* Set/Clear checkmarks according to the item being set. This routine
* is VERY application specific and assumes that the affected menu
* items are
* 1. grouped in pairs (on/off)
* 2. adjacent (item, item+1)
* 3. ordered in on, off order (Listing, No Listing)
*/
BOOL
SetMenuItem(item, value)
USHORT item; char *value;
{
BOOL boolean;
LONG excludebits, excludemask;
LONG menu1, menu2;
struct MenuItem *item1, *item2;
short i;
/* Get pointers and menu numbers for the affected items. */
menu1 = SHIFTITEM((long) item) | SHIFTMENU((long) MENU_FLAGS);
item1 = ItemAddress(&Titles[0], menu1);
menu2 = SHIFTITEM((long) item + 1) | SHIFTMENU((long) MENU_FLAGS);
item2 = ItemAddress(&Titles[0], menu2);
if (item1 == NULL || item2 == NULL) {
WriteConsole("Null menu item in SetMenuItem - call Mark!!\n");
return false;
}
boolean = ( tolower(*value) == 'y' );
if (boolean) { /* true? */
item1->Flags |= CHECKED;
item2->Flags &= ~CHECKED;
}
else { /* false */
item1->Flags &= ~CHECKED;
item2->Flags |= CHECKED;
}
return boolean;
}
void
SetStringGadget(gadget, value)
struct Gadget *gadget; char *value;
{
UBYTE *gs; /* pointer to gadget string */
RemoveGadget(pathwindow, gadget);
gs = (UBYTE *) GadgetString(gadget);
strcpy(gs, value);
ResetStringInfo(gadget->SpecialInfo);
AddGadget(pathwindow, gadget, -1L);
DoGadget(pathwindow, GADGETUP, gadget); /* simulate GADGETUP */
}
/* Set one user preference item.
* Called with:
* kw: keyword index
* parm: parameter string
*/
SetUserPref(kw, parm)
USHORT kw; char *parm;
{
switch (kw) {
case KW_HOME:
SetStringGadget(&homepathgad, parm);
break;
case KW_BACKUP:
SetStringGadget(&backpathgad, parm);
break;
case KW_LIST:
SetStringGadget(&listpathgad, parm);
break;
case KW_LISTING:
do_listing = SetMenuItem(ITEM_LIST, parm);
break;
case KW_EXCLUDE:
SetStringGadget(&excludepathgad, parm);
break;
case KW_COMPRESSION:
do_compress = SetMenuItem(ITEM_COMPRESS, parm);
break;
case KW_SPEECH:
do_speech = SetMenuItem(ITEM_SPEECH, parm);
break;
default:
break;
}
}