mirror of https://gitlab.com/rnger/amath
430 lines
9.6 KiB
C
430 lines
9.6 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.
|
|
*
|
|
******************************************************************
|
|
** If you use GoldED or any other text editor featuring folding **
|
|
** you may want to set up "///" as fold opening phrase, and **
|
|
** "///" as closing one, as this source is using it. **
|
|
** Marcin **
|
|
******************************************************************
|
|
*/
|
|
|
|
#include "flexcat.h"
|
|
#include "readprefs.h"
|
|
#include "showfuncs.h"
|
|
#include "swapfuncs.h"
|
|
#include "scanct.h"
|
|
#include "scancd.h"
|
|
#include "scanpo.h"
|
|
#include "createcat.h"
|
|
#include "createct.h"
|
|
#include "utils.h"
|
|
#include "globals.h"
|
|
#include "createcatsrc.h"
|
|
#include "openlibs.h"
|
|
|
|
/// isParam
|
|
int isParam(char *input_string)
|
|
{
|
|
if(Stricmp(input_string, "catalog") == 0)
|
|
return TRUE;
|
|
if(Strnicmp(input_string, "catalog=", 8) == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "pofile") == 0)
|
|
return TRUE;
|
|
if(Strnicmp(input_string, "pofile=", 7) == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "codeset") == 0)
|
|
return TRUE;
|
|
if(Strnicmp(input_string, "codeset=", 8) == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "nooptim") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "fill") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "quiet") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "flush") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "nobeep") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "nobufferedio") == 0)
|
|
return TRUE;
|
|
if(Strnicmp(input_string, "newctfile=", 10) == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "newctfile") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "nolangtolower") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "modified") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "warnctgaps") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "copymsgnew") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "oldmsgnew") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "?") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "-h") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "help") == 0)
|
|
return TRUE;
|
|
if(Stricmp(input_string, "--help") == 0)
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
///
|
|
/// main
|
|
|
|
/* Finally, the main function. It does nothing special
|
|
except for scanning the arguments. */
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
char *cdfile = NULL;
|
|
char *ctfile = NULL;
|
|
char *pofile = NULL;
|
|
char *newctfile = NULL;
|
|
char *catalog = NULL;
|
|
char *source;
|
|
char *template;
|
|
int makenewct = FALSE;
|
|
int makecatalog = FALSE;
|
|
int i;
|
|
|
|
if(argc == 0) /* Aztec's entry point for workbench programs */
|
|
{
|
|
fprintf(stderr, "FlexCat can't be run from Workbench!\n" \
|
|
"\n"
|
|
"Open a Shell session and type FlexCat ?\n" \
|
|
"for more information\n");
|
|
exit(5);
|
|
}
|
|
|
|
if(OpenLibs() == FALSE)
|
|
exit(20);
|
|
|
|
OpenFlexCatCatalog();
|
|
|
|
/* Big Endian vs. Little Endian (both supported ;-) */
|
|
|
|
if(!SwapChoose())
|
|
{
|
|
fprintf(stderr, "FlexCat is unable to determine\n" \
|
|
"the byte order used by your system.\n" \
|
|
"It's neither Little nor Big Endian?!.\n");
|
|
exit(5);
|
|
}
|
|
#ifdef AMIGA
|
|
ReadPrefs();
|
|
#endif
|
|
if(argc == 1)
|
|
{
|
|
Usage();
|
|
}
|
|
|
|
for(i = 1; i < argc; i++)
|
|
{
|
|
if(Strnicmp(argv[i], "catalog=", 8) == 0)
|
|
{
|
|
catalog = argv[i] + 8;
|
|
makecatalog = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "catalog") == 0)
|
|
{
|
|
if(i == argc - 1)
|
|
{
|
|
catalog = NULL;
|
|
makecatalog = TRUE;
|
|
}
|
|
else if(i < argc - 1)
|
|
{
|
|
if(isParam(argv[i + 1]) != TRUE)
|
|
{
|
|
catalog = argv[i + 1];
|
|
i++;
|
|
makecatalog = TRUE;
|
|
}
|
|
else
|
|
{
|
|
catalog = NULL;
|
|
makecatalog = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else if(Strnicmp(argv[i], "pofile=", 7) == 0)
|
|
{
|
|
pofile = argv[i] + 7;
|
|
}
|
|
else if(Stricmp(argv[i], "pofile") == 0)
|
|
{
|
|
if(i == argc - 1)
|
|
pofile = NULL;
|
|
else if(i < argc - 1)
|
|
{
|
|
if(isParam(argv[i + 1]) != TRUE)
|
|
{
|
|
pofile = argv[i + 1];
|
|
i++;
|
|
}
|
|
else
|
|
pofile = NULL;
|
|
}
|
|
}
|
|
else if(Strnicmp(argv[i], "codeset=", 8) == 0)
|
|
{
|
|
strcpy(DestCodeset, argv[i] + 8);
|
|
}
|
|
else if(Stricmp(argv[i], "codeset") == 0)
|
|
{
|
|
if(i == argc - 1)
|
|
DestCodeset[0] = '\0';
|
|
else if(i < argc - 1)
|
|
{
|
|
if(isParam(argv[i + 1]) != TRUE)
|
|
{
|
|
strcpy(DestCodeset, argv[i + 1]);
|
|
i++;
|
|
}
|
|
else
|
|
DestCodeset[0] = '\0';
|
|
}
|
|
}
|
|
else if(Stricmp(argv[i], "nooptim") == 0)
|
|
{
|
|
NoOptim = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "fill") == 0)
|
|
{
|
|
Fill = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "quiet") == 0)
|
|
{
|
|
Quiet = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "flush") == 0)
|
|
{
|
|
DoExpunge = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "nobeep") == 0)
|
|
{
|
|
NoBeep = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "nobufferedio") == 0)
|
|
{
|
|
NoBufferedIO = TRUE;
|
|
}
|
|
else if(Strnicmp(argv[i], "newctfile=", 10) == 0)
|
|
{
|
|
newctfile = argv[i] + 10;
|
|
makenewct = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "newctfile") == 0)
|
|
{
|
|
if(i == argc - 1)
|
|
{
|
|
newctfile = NULL;
|
|
makenewct = TRUE;
|
|
}
|
|
else if(i < argc - 1)
|
|
{
|
|
if(isParam(argv[i + 1]) != TRUE)
|
|
{
|
|
newctfile = argv[i + 1];
|
|
i++;
|
|
makenewct = TRUE;
|
|
}
|
|
else
|
|
{
|
|
newctfile = NULL;
|
|
makenewct = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else if(Stricmp(argv[i], "nolangtolower") == 0)
|
|
{
|
|
LANGToLower = FALSE;
|
|
}
|
|
else if(Stricmp(argv[i], "modified") == 0)
|
|
{
|
|
Modified = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "warnctgaps") == 0)
|
|
{
|
|
WarnCTGaps = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "copymsgnew") == 0)
|
|
{
|
|
CopyNEWs = TRUE;
|
|
}
|
|
else if(Stricmp(argv[i], "oldmsgnew") == 0)
|
|
{
|
|
snprintf(Old_Msg_New, sizeof(Old_Msg_New), "; %s", argv[++i]);
|
|
}
|
|
else if(Stricmp(argv[i], "noautodate") == 0 || Stricmp(argv[i], "nospaces") == 0)
|
|
{
|
|
// just swallow some no longer supported options to
|
|
// keep old scripts alive and happy
|
|
}
|
|
else if(cdfile == NULL)
|
|
{
|
|
if(Stricmp(argv[i], "?") == 0 ||
|
|
Stricmp(argv[i], "-h") == 0 ||
|
|
Stricmp(argv[i], "help") == 0 ||
|
|
Stricmp(argv[i], "--help") == 0)
|
|
{
|
|
Usage();
|
|
}
|
|
|
|
cdfile = argv[i];
|
|
|
|
// find out file extension and depending on it
|
|
// we eiterh scan a CD file or the supplied pot file
|
|
if(strstr(cdfile, ".pot") != NULL)
|
|
{
|
|
if(!ScanPOFile(cdfile))
|
|
MyExit(10);
|
|
}
|
|
else
|
|
{
|
|
if(!ScanCDFile(cdfile))
|
|
MyExit(10);
|
|
}
|
|
}
|
|
else if(strchr(argv[i], '=') != NULL)
|
|
{
|
|
/* Determine basename. */
|
|
if(BaseName == NULL && cdfile != NULL)
|
|
{
|
|
char *lslash = strrchr(cdfile, '/');
|
|
char *ldot = strrchr(cdfile, '.');
|
|
|
|
if(lslash == NULL)
|
|
lslash = cdfile;
|
|
else
|
|
lslash++;
|
|
|
|
if(ldot == NULL)
|
|
ldot = cdfile + strlen(cdfile);
|
|
|
|
if(ldot - lslash > 0)
|
|
{
|
|
BaseName = calloc(ldot - lslash + 3, 1);
|
|
strncpy(BaseName, lslash, ldot - lslash);
|
|
}
|
|
}
|
|
|
|
source =AllocString(argv[i]);
|
|
template = strchr(source, '=');
|
|
*template++ = '\0';
|
|
|
|
CreateSourceFile(source, template, cdfile);
|
|
}
|
|
else
|
|
{
|
|
if(ctfile != NULL)
|
|
{
|
|
Usage();
|
|
}
|
|
ctfile = argv[i];
|
|
}
|
|
}
|
|
|
|
#ifdef AMIGA
|
|
if(Modified)
|
|
{
|
|
if(cdfile != NULL && ctfile != NULL && catalog != NULL)
|
|
{
|
|
int32 cd_time, ct_time, cat_time;
|
|
|
|
if((cd_time = getft(cdfile)) != -1)
|
|
{
|
|
if((ct_time = getft(ctfile)) != -1)
|
|
{
|
|
if((cat_time = getft(catalog)) == -1)
|
|
cat_time = 0;
|
|
|
|
if(cat_time > ct_time && cat_time > cd_time)
|
|
{
|
|
if(!Quiet)
|
|
{
|
|
fprintf(stderr, MSG_FILEUPTODATE, catalog);
|
|
putc('\n', stderr);
|
|
}
|
|
|
|
MyExit(GlobalReturnCode);
|
|
}
|
|
else
|
|
{
|
|
if(!Quiet)
|
|
{
|
|
fprintf(stderr, "--> %s\n", catalog);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ShowError(MSG_ERR_CANTCHECKDATE, ctfile);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ShowError(MSG_ERR_CANTCHECKDATE, cdfile);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
if(ctfile != NULL)
|
|
{
|
|
if(!ScanCTFile(ctfile))
|
|
MyExit(10);
|
|
}
|
|
|
|
if(pofile != NULL)
|
|
{
|
|
if(!ScanPOFile(pofile))
|
|
MyExit(10);
|
|
}
|
|
|
|
if(makecatalog == TRUE)
|
|
{
|
|
if(ctfile == NULL && pofile == NULL)
|
|
{
|
|
fprintf(stderr, "%s\n", MSG_ERR_NOCTARGUMENT);
|
|
Usage();
|
|
}
|
|
CreateCat(catalog);
|
|
}
|
|
|
|
if(makenewct == TRUE)
|
|
{
|
|
CreateCTFile(newctfile);
|
|
}
|
|
MyExit(GlobalReturnCode);
|
|
|
|
return 0;
|
|
}
|
|
|
|
///
|