diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /indexing/glo+idxtex/glotex.c |
Initial commit
Diffstat (limited to 'indexing/glo+idxtex/glotex.c')
-rw-r--r-- | indexing/glo+idxtex/glotex.c | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/indexing/glo+idxtex/glotex.c b/indexing/glo+idxtex/glotex.c new file mode 100644 index 0000000000..1c5d1a55d4 --- /dev/null +++ b/indexing/glo+idxtex/glotex.c @@ -0,0 +1,275 @@ +/* #module GloTeX "2-001" + *********************************************************************** + * * + * The software was developed at the Monsanto Company and is provided * + * "as-is". Monsanto Company and the auther disclaim all warranties * + * on the software, including without limitation, all implied warran- * + * ties of merchantabilitiy and fitness. * + * * + * This software does not contain any technical data or information * + * that is proprietary in nature. It may be copied, modified, and * + * distributed on a non-profit basis and with the inclusion of this * + * notice. * + * * + *********************************************************************** + */ +/* + * Module Name: GloTeX + * + * Author: R L Aurbach CR&DS MIS Group 17-Aug-1986 + * + * Function: + * Main Line for the GloTeX program. This program processes .glo files + * produced by LaTeX and generates files which will produce a properly + * formatted glossary, using definitions extracted from one or more + * glossary definition files. + * + * Modification History: + * + * Version Initials Date Description + * ------------------------------------------------------------------------ + * 1-001 RLA 17-Aug-1986 Original Code + * 1-001 RLA 25-Aug-1986 Improve handling of error when there + * is no gdf file to process. + * 2-001 F.H. 17-May-1991 converted to portable C + */ +/* + * Module GloTeX - Module-Wide Data Description Section + * + * Include Files: + */ +#ifdef MSDOS +#include <stdlib.h> +#include <io.h> +#define F_OK 0 /* access(): File exists */ +#else +#include <sys/file.h> +#endif +#include <stdio.h> +#include "GloDef.h" +/* + * Module Definitions: + */ +/* + * Global Declarations: + */ +#ifdef MSDOS +main(int argc, char *argv[]); +#else +main(); +#endif + STRING_PTR filelist = 0; /* Listhead for glossary filespecs */ + NODE_PTR root = 0; /* Listhead for definitions */ + int flag = 0; /* /TOC options flag */ + char infile[256]; /* Input filespec string */ + STRING_PTR labels = 0; /* Listhead for labels */ +/* + * Static Declarations: + */ +/* + * External References: + */ +#ifdef MSDOS +extern void Glo_Command(int argc, char *argv[]); +extern int Glo_Build_LabLst(void); +extern int Glo_Scan_File(STRING_PTR file); +extern int Glo_Report_Missing(void); +extern int Glo_Build_File(void); +#else +extern void Glo_Command(); +extern int Glo_Build_LabLst(); +extern int Glo_Scan_File(); +extern int Glo_Report_Missing(); +extern int Glo_Build_File(); +#endif +/* + * Functions Called: + */ +/* + * Function GloTeX - Documentation Section + * + * Discussion: + * This is the main line of the GloTeX program. + * + * It reads the input file and creates from it a list of items to be + * defined. + * + * It then reads one or more glossary definition files, searching for + * definitions which match the items specified. If it finds an item, it + * copies the definition into an internal data structure and removes the + * item from the list. In this way, the first definition seen for an + * item is always used. + * + * Once the list of definition files is exhausted, the internal data + * structures hold a complete list of all definitions. Any items remaining + * in the item list represent items for which no definitions were found. + * These are reported. + * + * Finally, the internal data structures are used to build a text file + * which will be processed by LaTeX to generate the glossary. + * + * Calling Synopsis: + * $ GloTeX :== $Crl_Public:GloTeX + * $ GloTeX filespec [/STYLE:{ARTICLE | REPORT | SPECIAL}] + * [/GLOSSARY=(file1,file2,...)] + * + * Inputs: + * filespec -> Name of the input file to be processed. The default + * filespec SYS$DISK:[].GLO is processed against this + * specification. This is the file generated by LaTeX + * by the \makeglossary command. + * + * /STYLE -> The /STYLE qualifier indicates the type of document for + * which the glossary is to be generated. Options are: + * * ARTICLE - a standard LaTeX "article" documentstyle + * * REPORT - a standard LaTeX "report" or "book" + * documentstyle + * * SPECIAL - any of the CR&DS special documentstyles + * If the qualifier is not specified, SPECIAL is assumed. + * + * /GLOSSARY -> The /GLOSSARY qualifier defines one or more glossary + * definition files. Each value in the list is the file + * specification of a glossary definition file. These + * files are the basis for the list of glossary files + * managed by the program. + * + * If using a document style which does not define the + * \glossaryfile command (i.e., a standard LaTeX document + * style), then this qualifier is the only means + * available to specify the files to be searched for + * definitions. + * + * If using a CR&DS document style, then this qualifier + * is used to specify definition files to be searched + * before any specified by the \glossaryfile command. + * + * The qualifier is optional. However, at least one + * definition file must be specified to the program. + * + * Outputs: + * filespec -> The program produces an output file which is the + * resultant filespec from processing .GLS as the primary + * file specification and the fully-qualified input + * filespec as the default. + * + * Return Value: + * returns SUCCESS + * + * Global Data: + * All commonly-used data structures, such as the file list, the label + * list, the node list, etc., are declared globally. + * + * Files Used: + * reads the specified input file and one or more glossary definition files + * as described above. Produces an output file. + * + * Assumed Entry State: + * Called from DCL level + * + * Normal Exit State: + * Returns to DCL level + * + * Error Conditions: + * Error messages are generated for all errors. Any significant ones + * cause the program to exit with an appropriate message. + * + * Algorithm: + * A. Process the command line. + * B. Process the input file. + * 1. Glossary label entries are placed on a list. + * 2. Glossary file entries are added to the file list. + * C. For each file in the file list, + * 1. Scan the glossary file for definitions which match a label in + * the label list. + * 2. If found, + * a. Copy the definition to a node in the data structure. + * D. For any labels for which the definition was not found, + * 1. Report it. + * E. Generate the output file. + * + * Special Notes: + * none + */ +/* + * Function GloTeX - Code Section + */ +main(argc,argv) +int argc; +char *argv[]; +{ +/* + * Local Declarations + */ + int status; + STRING_PTR file; +/* + * Module Body + */ +/* Process the command line. The routine will exit on error */ + Glo_Command(argc, argv); + (void)printf("\nGloTeX, the automatic glossary processor for LaTeX, version 1.0\n"); + if (argc < 2) { + (void) printf("usage: glotex file [/STYLE={Article | Report | Special}] \\ \n"); + (void) printf(" [/GLOSSARY=(def1[,def2[,...]])]\n"); + exit(1); + } +/* + * Process the list of definitions referenced: + * Open the input file. + * For each entry record in the file, + * Build a label entry in the label list. + * For each file record in the file, + * Build a file entry in the file list. + * Close the input file. + */ + status = Glo_Build_LabLst(); + if (!(status & TRUE)) { + (void)printf("\nFatal error processing the input file...aborting\n"); + exit(1); + } + if (labels == 0) { + (void)printf("\nFatal error. No glossary entries found in the .glo file"); + (void)printf("...aborting\n"); + exit(1); + } +/* + * For each file in the file list, + * Scan the file for entries which match labels with label list entries. + * For each one, build a node containing the definition. + */ + if (filelist == 0) { + (void)Glo_Report_Missing(); + (void)printf("\nNo glossary definition files specified...aborting\n"); + exit(1); + } + file = filelist; + while (file != 0) { + status = Glo_Scan_File(file); + if (!(status & TRUE)) { + (void)printf("\nFatal error scanning glossary definition file...aborting\n"); + exit(1); + } + file = file->next; + } +/* + * Report all labels for which no definitions were found. + * Write the information to SYS$OUTPUT. + * Write the information to a glossary log file. + */ + status = Glo_Report_Missing(); + if (!(status & TRUE)) { + (void)printf("\nFatal error while reporting the list of undefined terms"); + (void)printf("...aborting\n"); + exit(1); + } +/* + * Generate a formatted output file containing the definitions. + * The file format will be dependent on whether the glossary is being built + * for a LaTeX "article", a LaTeX "report" or "book", or a CR&DS defined + * documentstyle. + */ + status = Glo_Build_File(); + if (!(status & TRUE)) + (void)printf("\nFatal error while building the output file\n"); + (void)printf("\nDone.\n"); +} |