amath/build/flexcat/readprefs.c

164 lines
5.9 KiB
C

/*
* $Id$
*
* Copyright(C) 1993-1999 by Jochen Wiedmann and Marcin Orlowski
* Copyright (C) 2002-2015 FlexCat Open Source Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or(at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#include "flexcat.h"
int WarnCTGaps = FALSE; /* Warn for missing symbols in CT file. */
int NoOptim = FALSE; /* Put string into catalog even
if translation is equal to
description. */
int Fill = FALSE; /* If translation of given string
is missing or empty, write
string descriptor from #?.cd
file instead. */
int DoExpunge = FALSE; /* If TRUE, FlexCat will do an AVAIL
FLUSH-alike call after saving the catalog. */
int NoBeep = FALSE; /* If TRUE, FlexCat won't call
DisplayBeep() any longer. */
int Quiet = FALSE; /* Forces FlexCat to shut up. */
int LANGToLower = TRUE; /* Shall we do ToLower() on lang's name ?
Some #?.language drivers seem to be
broken, so we provide a workaround. */
int NoBufferedIO = FALSE; /* Shall we do buffered I/O ? */
int Modified = FALSE; /* Shall we write the catalog ONLY
if #?.catalog is newer than
#?.c(d|t) files ? */
char Msg_New[MAX_NEW_STR_LEN] = "***NEW***"; /* New strings in updated #?.ct */
int CopyNEWs = FALSE; /* Shall we write the Msg_New into new strings ? */
char Old_Msg_New[MAX_NEW_STR_LEN] = "; ***NEW***"; /* Old new string(above) used in old
CT file. Now we look if it's present
and copy it into new CT if the user
upgrades(flexcat CD CT newctfile CT */
char DestCodeset[MAX_NEW_STR_LEN] = ""; /* To which codeset should we convert to
If empty then this signals that FlexCat
should automatically find out which codeset
to be used */
char prefs_sddir[MAXPATHLEN] = "\0";
/// ReadPrefs
/* Fill in options from preferences file. */
char ReadPrefs(void)
{
char result = FALSE;
#ifdef AMIGA
#define MAX_PREFS_LEN 512
#define FLEXCAT_PREFS "flexcat.prefs"
enum
{
SDDIR,
MSG_NEW,
CODESET,
WARNCTGAPS,
NOOPTIM,
FILL,
FLUSH,
NOBEEP,
QUIET,
NOLANGTOLOWER,
NOBUFFEREDIO,
MODIFIED,
COPYMSGNEW,
OLDMSGNEW,
NOAUTODATE,
NOSPACES,
ARGS_COUNT
};
const char template[] = "SDDIR/K,MSG_NEW/K,CODESET/K,WARNCTGAPS/S,NOOPTIM/S,FILL/S,FLUSH/S,NOBEEP/S,QUIET/S,NOLANGTOLOWER/S,NOBUFFEREDIO/S,MODIFIED/S,COPYMSGNEW/S,OLDMSGNEW/K,NOAUTODATE/S,NOSPACES/S";
LONG Results[ARGS_COUNT] = { 0 };
char *prefs;
struct RDArgs *rda;
struct RDArgs *rdargs;
if((prefs = malloc(2048)) != NULL)
{
if(GetVar(FLEXCAT_PREFS, prefs, 80, 0) != -1)
{
prefs = realloc(prefs, strlen(prefs) + 1);
strcat(prefs, "\n");
if((rda = AllocDosObject(DOS_RDARGS, TAG_DONE)) != NULL)
{
rda->RDA_Source.CS_Buffer = prefs;
rda->RDA_Source.CS_Length = strlen(prefs);
rda->RDA_Source.CS_CurChr = 0;
rda->RDA_Flags |= RDAF_NOPROMPT;
if((rdargs = ReadArgs(template, Results, rda)) != NULL)
{
if(Results[SDDIR])
strlcpy(prefs_sddir, (char *)Results[SDDIR], MAXPATHLEN);
if(Results[MSG_NEW])
strlcpy(Msg_New, (char *)Results[MSG_NEW], MAX_NEW_STR_LEN);
if(Results[CODESET])
strlcpy(DestCodeset, (char *)Results[CODESET], MAX_NEW_STR_LEN);
WarnCTGaps = Results[WARNCTGAPS];
NoOptim = Results[NOOPTIM];
Fill = Results[FILL];
DoExpunge = Results[FLUSH];
NoBeep = Results[NOBEEP];
Quiet = Results[QUIET];
LANGToLower = !Results[NOLANGTOLOWER];
Modified = Results[MODIFIED];
NoBufferedIO = Results[NOBUFFEREDIO];
CopyNEWs = Results[COPYMSGNEW];
if(Results[OLDMSGNEW])
snprintf(Old_Msg_New, sizeof(Old_Msg_New), "; %s", (char *)Results[OLDMSGNEW]);
FreeArgs(rdargs);
result = TRUE;
}
else
{
fputs(MSG_ERR_BADPREFS, stderr);
fputs(template, stderr);
fputs("\n", stderr);
DisplayBeep(NULL);
}
FreeDosObject(DOS_RDARGS, rda);
}
else
{
fputs("Error processing prefs.\n" \
"Can't AllocDosObject()\n", stderr);
}
free(prefs);
}
}
#endif
return(result);
}
///