summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/songs/songidx/songidx.c
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/songs/songidx/songidx.c')
-rw-r--r--Master/texmf-dist/doc/latex/songs/songidx/songidx.c270
1 files changed, 0 insertions, 270 deletions
diff --git a/Master/texmf-dist/doc/latex/songs/songidx/songidx.c b/Master/texmf-dist/doc/latex/songs/songidx/songidx.c
deleted file mode 100644
index 20c08e62df8..00000000000
--- a/Master/texmf-dist/doc/latex/songs/songidx/songidx.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* Copyright (C) 2012 Kevin W. Hamlen
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- * The latest version of this program can be obtained from
- * http://songs.sourceforge.net.
- *
- *
- * This program generates an index.sbx file from an index.sxd file. Index.sxd
- * files are generated by the song book LaTeX files while you compile a song
- * book. They contain lists of all the song titles, song numbers, and
- * scripture references. Once the .sxd files exist, run this program to
- * convert them in to .sbx files. This program will sort the song titles
- * alphabetically, group all the scripture entries into the appropriate
- * chunks, etc. The TeX files that it creates are then used by the LaTeX
- * files next time you compile the song book.
- *
- * The syntax for running the program is:
- * songidx input.sxd output.sbx
- * or, if you're compiling a scripture index:
- * songidx -b bible.can input.sxd output.sbx
- *
- * The program should compile on unix with
- *
- * cc *.c -o songidx
- *
- * On Windows, you'll need to find a C compiler in order to compile it,
- * or go to http://songs.sourceforge.net to obtain a Windows self-installer
- * with pre-compiled binaries.
- */
-
-#if HAVE_CONFIG_H
-# include "config.h"
-#else
-# include "vsconfig.h"
-#endif
-
-#include "chars.h"
-#include "songidx.h"
-#include "fileio.h"
-
-#if HAVE_STRING_H
-# include <string.h>
-#elif HAVE_STRINGS_H
-# include <strings.h>
-#endif
-
-#if HAVE_SETLOCALE
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-#endif
-
-extern int gentitleindex(FSTATE *fs, const char *outname);
-extern int genscriptureindex(FSTATE *fs, const char *outname,
- const char *biblename);
-extern int genauthorindex(FSTATE *fs, const char *outname);
-
-#define BIBLEDEFAULT "bible.can"
-
-#if HAVE_STRRCHR
-# define STRRCHR(x,y) strrchr((x),(y))
-#else
-# define STRRCHR(x,y) local_strrchr((x),(y))
-char *
-local_strrchr(s,c)
- const char *s;
- int c;
-{
- const char *t;
- if (!s) return NULL;
- for (t=s; *t; ++s) ;
- for (; t>=s; --s)
- if (*t == c) return t;
- return NULL;
-}
-#endif
-
-int
-main(argc,argv)
- int argc;
- char *argv[];
-{
- FSTATE fs;
- int eof = 0;
- WCHAR buf[MAXLINELEN];
- int retval;
- const char *bible, *inname, *outname, *locale;
- int i;
-
- bible = inname = outname = locale = NULL;
- for (i=1; i<argc; ++i)
- {
- if (!strcmp(argv[i],"-v") || !strcmp(argv[i],"--version"))
- {
- printf("songidx " VERSION "\n"
- "Copyright (C) 2012 Kevin W. Hamlen\n"
- "License GPLv2: GNU GPL version 2 or later"
- " <http://gnu.org/licenses/gpl.html>\n"
- "This is free software: you are free to change and redistribute it.\n"
- "There is NO WARRANTY, to the extent permitted by law.\n");
- return 0;
- }
- else if (!strcmp(argv[i],"-h") || !strcmp(argv[i],"--help"))
- {
- printf("Syntax: %s [options] input.sxd [output.sbx]\n", argv[0]);
- printf(
- "Available options:\n"
- " -b FILE Sets the bible format when generating a\n"
- " --bible FILE scripture index (default: " BIBLEDEFAULT ")\n"
- "\n"
- " -l LOCALE Overrides the default system locale (affects\n"
- " --locale LOCALE (how non-English characters are parsed).\n"
- " See local system help for valid LOCALE's.\n"
- "\n"
- " -h Displays this help file and stops.\n"
- " --help\n"
- "\n"
- " -o FILE Sets the output filename.\n"
- " --output FILE\n"
- "\n"
- " -v Print version information and stop.\n"
- " --version\n"
- "\n"
- "If omitted, [output.sbx] defaults to the input filename but with\n"
- "the file extension renamed to '.sbx'. To read or write to stdin or\n"
- "stdout, use '-' in place of input.sxd or output.sbx.\n"
- "\n"
- "See http://songs.sourceforge.net for support.\n");
- return 0;
- }
- else if (!strcmp(argv[i],"-b") || !strcmp(argv[i],"--bible"))
- {
- if (bible)
- {
- fprintf(stderr, "songidx: multiple bible files specified\n");
- return 2;
- }
- else if (++i < argc)
- bible = argv[i];
- else
- {
- fprintf(stderr, "songidx: %s option requires an argument\n", argv[i-1]);
- return 2;
- }
- }
- else if (!strcmp(argv[i],"-l") || !strcmp(argv[i],"--locale"))
- {
- if (locale)
- {
- fprintf(stderr, "songidx: multiple locales specified\n");
- return 2;
- }
- else if (++i < argc)
- locale = argv[i];
- else
- {
- fprintf(stderr, "songidx: %s option requires an argument\n", argv[i-1]);
- return 2;
- }
- }
- else if (!strcmp(argv[i],"-o") || !strcmp(argv[i],"--output"))
- {
- if (outname)
- {
- fprintf(stderr, "songidx: multiple output files specified\n");
- return 2;
- }
- else if (++i < argc)
- outname = argv[i];
- else
- {
- fprintf(stderr, "songidx: %s option requires an argument\n", argv[i-1]);
- return 2;
- }
- }
- else if ((argv[i][0] == '-') && (argv[i][1] != '\0'))
- {
- fprintf(stderr, "songidx: unknown option %s\n", argv[i]);
- return 2;
- }
- else if (!inname) inname=argv[i];
- else if (!outname) outname=argv[i];
- else
- {
- fprintf(stderr, "songidx: too many command line arguments\n");
- return 2;
- }
- }
-
-#if HAVE_SETLOCALE
- if (!locale)
- (void) setlocale(LC_ALL, "");
- else if (!setlocale(LC_ALL, locale))
- {
- fprintf(stderr, "songidx: invalid locale: %s\n", locale);
- return 2;
- }
-#endif
-
- if (!inname)
- {
- fprintf(stderr, "songidx: no input file specified\n");
- return 2;
- }
- if (!outname)
- {
- if (!strcmp(inname,"-"))
- outname = "-";
- else
- {
- char *b;
- const char *p1 = STRRCHR(inname,'.');
- if ((p1 < STRRCHR(inname,'/')) || (p1 < STRRCHR(inname,'\\')))
- p1 = inname+strlen(inname);
- b = (char *) malloc(p1-inname+5);
- strncpy(b,inname,p1-inname);
- strcpy(b+(p1-inname),".sbx");
- outname = b;
- }
- }
- if (!bible) bible = BIBLEDEFAULT;
-
- if (!fileopen(&fs, inname)) return 2;
-
- /* The first line of the input file is a header line that dictates which kind
- * of index the data file is for. */
- if (!filereadln(&fs, buf, &eof)) return 2;
- retval = 2;
- if (eof)
- {
- fprintf(stderr, "songidx:%s: file is empty\n", fs.filename);
- fileclose(&fs);
- }
- else if (!ws_strcmp(buf, ws_lit("TITLE INDEX DATA FILE")))
- retval = gentitleindex(&fs, outname);
- else if (!ws_strcmp(buf, ws_lit("SCRIPTURE INDEX DATA FILE")))
- retval = genscriptureindex(&fs, outname, bible);
- else if (!ws_strcmp(buf, ws_lit("AUTHOR INDEX DATA FILE")))
- retval = genauthorindex(&fs, outname);
- else
- {
- fprintf(stderr, "songidx:%s:%d: file has unrecognized format\n",
- fs.filename, fs.lineno);
- fileclose(&fs);
- }
-
- /* Report the outcome to the user. */
- if (retval == 0)
- fprintf(stderr, "songidx: Done!\n");
- else if (retval == 1)
- fprintf(stderr, "songidx: COMPLETED WITH ERRORS. SEE ABOVE.\n");
- else
- fprintf(stderr, "songidx: FAILED. SEE ERROR MESSAGES ABOVE.\n");
-
- return retval;
-}