summaryrefslogtreecommitdiff
path: root/Build/source/texk/chktex/Resource.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/chktex/Resource.c')
-rw-r--r--Build/source/texk/chktex/Resource.c518
1 files changed, 0 insertions, 518 deletions
diff --git a/Build/source/texk/chktex/Resource.c b/Build/source/texk/chktex/Resource.c
deleted file mode 100644
index 9a79ab9f2a3..00000000000
--- a/Build/source/texk/chktex/Resource.c
+++ /dev/null
@@ -1,518 +0,0 @@
-/*
- * ChkTeX v1.5, resource file reader.
- * Copyright (C) 1995-96 Jens T. Berger Thielemann
- *
- * 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.
- *
- * Contact the author at:
- * Jens Berger
- * Spektrumvn. 4
- * N-0666 Oslo
- * Norway
- * E-mail: <jensthi@ifi.uio.no>
- *
- *
- */
-
-#include "ChkTeX.h"
-#include "OpSys.h"
-#include "Utility.h"
-#include "Resource.h"
-
-#define LNEMPTY(a) struct WordList a = {0, 1, {0}, {0}};
-#define LIST(a) struct WordList a = {0, 0, {0}, {0}};
-#define LCASE(a) LIST(a) LIST(a ## Case)
-#define KEY(a,def) STRPTR a = def;
-
-RESOURCE_INFO
-
-#undef KEY
-#undef LCASE
-#undef LNEMPTY
-#undef LIST
-
-struct KeyWord
-{
- STRPTR Name;
- STRPTR *String; /* Keyword = item */
- struct WordList
- *List, /* Case-sensitive strings */
- *CaseList; /* Case-insensitive strings */
-};
-
-#define LNEMPTY LIST
-#define LIST(name) {#name, NULL, &name, NULL},
-#define LCASE(name) {#name, NULL, &name, &name ## Case},
-#define KEY(name,def) {#name, &name, NULL, NULL},
-
-struct KeyWord Keys [] =
-{
- RESOURCE_INFO
- {NULL, NULL, NULL, NULL}
-};
-
-#undef KEY
-#undef LCASE
-#undef LNEMPTY
-#undef LIST
-
-
-/***************************** RESOURCE HANDLING **************************/
-
-#define TOKENBITS(name) enum name { \
- BIT(Eof), /* End-of-file */ \
- BIT(Open), /* { */ \
- BIT(Close), /* } */ \
- BIT(BrOpen), /* [ */ \
- BIT(BrClose), /* ] */ \
- BIT(Equal), /* = */ \
- BIT(Word), /* Keyword */ \
- BIT(Item) /* List item */ \
-};
-
-#undef BIT
-#define BIT BITDEF1
-TOKENBITS(Token_BIT)
-
-#undef BIT
-#define BIT BITDEF2
-TOKENBITS(Token)
-
-
-static enum Token Expect;
-static ULONG RsrcLine;
-
-static enum Token ReadWord __PROTO((STRPTR, FILE *));
-static TEXT MapChars __PROTO((STRPTR *String));
-
-
-
-/*
- * Parses the contents of a resource file.
- *
- * Format:
- * Keyword { item1 item2 ... } [ item1 item2 ... ]
- * Keyword [ item1 item2 ... ] { item1 item2 ... }
- * Keyword = { item1 item2 ... }
- * Keyword = [ item1 item2 ... ]
- * Keyword = item
- *
- * Returns whether the attempt was a successful one.
- */
-
-BOOL ReadRC(const STRPTR Filename)
-{
- STRPTR String;
- BOOL Success = FALSE;
- FILE *fh;
- enum Token Token;
- ULONG Counter;
-
- struct KeyWord *CurWord = NULL;
-
- /* Interpret incoming words as ... */
- enum
- {
- whList, /* List elements */
- whCaseList, /* Case insensitive list elements */
- whEqual, /* Solo elements */
- whNone /* List items not accepted */
- } What = whNone;
-
-
- RsrcLine = 0;
- Expect = FLG_Word | FLG_Eof;
-
- if((fh = fopen(Filename, "r")))
- {
- Success = TRUE;
- do
- {
- Token = ReadWord(ReadBuffer, fh);
- ifn(Expect & Token)
- {
- switch(Token)
- {
- case FLG_Item:
- String = "item";
- break;
- case FLG_Word:
- String = "word";
- break;
- case FLG_Equal:
- String = "`='";
- break;
- case FLG_Open:
- String = "`{'";
- break;
- case FLG_Close:
- String = "`}'";
- break;
- case FLG_BrOpen:
- String = "`['";
- break;
- case FLG_BrClose:
- String = "`]'";
- break;
- case FLG_Eof:
- String = "EOF";
- break;
- }
- PrintPrgErr(pmFaultFmt, Filename, RsrcLine, String);
- Success = FALSE;
- Token = FLG_Eof;
- }
-
- switch(Token)
- {
- case FLG_Word:
- for(Counter = 0;
- Keys[Counter].Name;
- Counter++)
- {
- if(!strcasecmp(ReadBuffer, Keys[Counter].Name))
- {
- CurWord = &Keys[Counter];
- Expect = (CurWord->List? FLG_Open : 0) |
- (CurWord->CaseList? FLG_BrOpen : 0) |
- FLG_Equal;
- break;
- }
- }
- if(!Keys[Counter].Name)
- {
- PrintPrgErr(pmKeyWord, ReadBuffer, Filename);
- Success = FALSE;
- Token = FLG_Eof;
- }
- break;
- case FLG_Item:
- switch(What)
- {
- case whEqual:
- ifn(*(CurWord->String) = strdup(ReadBuffer))
- {
- PrintPrgErr(pmStrDupErr);
- Token = FLG_Eof;
- Success = FALSE;
- }
-
- What = whNone;
- Expect = FLG_Word | FLG_Eof;
- break;
- case whCaseList:
- if(!InsertWord(ReadBuffer, CurWord->CaseList))
- {
- Token = FLG_Eof;
- Success = FALSE;
- }
- break;
- case whList:
- if(!InsertWord(ReadBuffer, CurWord->List))
- {
- Token = FLG_Eof;
- Success = FALSE;
- }
- break;
- case whNone:
- PrintPrgErr(pmAssert);
- }
- break;
- case FLG_Equal:
- What = whEqual;
- Expect = (CurWord->List? FLG_Open : 0) |
- (CurWord->CaseList? FLG_BrOpen : 0) |
- (CurWord->String? FLG_Item : 0);
- break;
- case FLG_BrOpen:
- if(What == whEqual)
- ClearWord(CurWord->CaseList);
- What = whCaseList;
- Expect = FLG_Item | FLG_BrClose;
- break;
- case FLG_Open:
- if(What == whEqual)
- ClearWord(CurWord->List);
- What = whList;
- Expect = FLG_Item | FLG_Close;
- break;
- case FLG_BrClose:
- case FLG_Close:
- Expect = (CurWord->List? FLG_Open : 0) |
- (CurWord->CaseList? FLG_BrOpen : 0) |
- FLG_Equal | FLG_Word | FLG_Eof;
- What = whNone;
- break;
- case FLG_Eof:
- break;
- }
- } while(Token != FLG_Eof);
-
- fclose(fh);
- }
- else
- PrintPrgErr(pmRsrcOpen, Filename);
-
- return(Success);
-}
-
-/*
- * Reads a token from the `.chktexrc' file; if the token is
- * FLG_Item or FLG_Word, Buffer will contain the plaintext of the
- * token. If not, the contents are undefined.
- */
-
-static enum Token ReadWord(STRPTR Buffer, FILE *fh)
-{
- static
- STRPTR String = NULL;
- static
- TEXT StatBuf[BUFSIZ];
- enum Token Retval = FLG_Eof;
-
- UWORD Chr;
-
- STRPTR Ptr;
- BOOL OnceMore = TRUE, Cont = TRUE;
-
- if(Buffer)
- {
- do
- {
- if(!(String && *String))
- {
- if(fgets(StatBuf, BUFSIZ-1, fh))
- String = strip(StatBuf, STRP_RGT);
- RsrcLine++;
- }
-
- Ptr = Buffer;
- if(String && (String = strip(String, STRP_LFT)))
- {
- switch(Chr = *String)
- {
- case 0:
- case CMNT:
- String = NULL;
- break;
- case QUOTE: /* Quoted argument */
- Cont = TRUE;
- String++;
-
- while(Cont)
- {
- switch(Chr = *String++)
- {
- case 0:
- case QUOTE:
- Cont = FALSE;
- break;
- case ESCAPE:
- ifn(Chr = MapChars(&String))
- break;
-
- /* FALLTHRU */
- default:
- *Ptr++ = Chr;
- }
- }
- *Ptr = 0;
- Retval = FLG_Item;
- OnceMore = FALSE;
- break;
-
-#define DONEKEY (FLG_Open | FLG_Equal | FLG_BrOpen)
-#define DONELIST (FLG_Close | FLG_BrClose)
-#define TOKEN(c, ctxt, tk) case c: if(Expect & (ctxt)) Retval = tk; LAST(token);
-
- LOOP(token,
- TOKEN('{', DONEKEY, FLG_Open);
- TOKEN('[', DONEKEY, FLG_BrOpen);
- TOKEN('=', DONEKEY, FLG_Equal);
- TOKEN(']', DONELIST, FLG_BrClose);
- TOKEN('}', DONELIST, FLG_Close);
- )
-
- if(Retval != FLG_Eof)
- {
- OnceMore = FALSE;
- String++;
- break;
- }
-
- /* FALLTHRU */
-
- default: /* Non-quoted argument */
- OnceMore = FALSE;
- if(Expect & FLG_Word)
- {
- while(Cont)
- {
- Chr = *String++;
- if(isalpha(Chr))
- *Ptr++ = Chr;
- else
- Cont = FALSE;
- }
- String--;
- Retval = FLG_Word;
- }
- else /* Expect & FLG_Item */
- {
- while(Cont)
- {
- switch(Chr = *String++)
- {
- case CMNT:
- case 0:
- String = NULL;
- Cont = FALSE;
- break;
- case ESCAPE:
- ifn(Chr = MapChars(&String))
- break;
-
- *Ptr++ = Chr;
- break;
- default:
- if(!isspace(Chr))
- *Ptr++ = Chr;
- else
- Cont = FALSE;
- }
- }
- Retval = FLG_Item;
- }
-
- ifn(Buffer[0])
- {
- PrintPrgErr(pmEmptyToken);
- if(*String)
- String++;
- }
- *Ptr = 0;
- break;
- }
- }
- else
- OnceMore = FALSE;
- } while(OnceMore);
- }
- return(Retval);
-}
-
-
-
-/*
- * Translates escape codes. Give it a pointer to the char after the
- * escape char, and we'll return what it maps to.
- */
-
-#define MAP(a,b) case a: Tmp = b; break;
-
-static TEXT MapChars(STRPTR *String)
-{
- int Chr, Tmp = 0;
- UWORD Cnt;
-
- Chr = *((STRPTR) (*String)++);
-
- switch(tolower(Chr))
- {
- MAP(QUOTE, QUOTE);
- MAP(ESCAPE, ESCAPE);
- MAP(CMNT, CMNT);
- MAP('n', '\n');
- MAP('r', '\r');
- MAP('b', '\b');
- MAP('t', '\t');
- MAP('f', '\f');
- MAP('{', '{');
- MAP('}', '}');
- MAP('[', '[');
- MAP(']', ']');
- MAP('=', '=');
- MAP(' ', ' ');
- case 'x':
- Tmp = 0;
-
- for(Cnt = 0; Cnt < 2; Cnt++)
- {
- Chr = *((*String)++);
- if(isxdigit(Chr))
- {
- Chr = toupper(Chr);
- Tmp = (Tmp<<4) + Chr;
-
- if(isdigit(Chr))
- Tmp -= '0';
- else
- Tmp -= 'A' - 10;
- }
- else
- {
- if(Chr)
- {
- PrintPrgErr(pmNotPSDigit, Chr, "hex");
- Tmp = 0;
- }
- break;
- }
- }
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
-
- Tmp = Chr - '0';
-
- for(Cnt = 0; Cnt < 2; Cnt++)
- {
- Chr = *((*String)++);
- if(within('0',Chr,'7'))
- Tmp = (Tmp * 8) + Chr - '0';
- else
- {
- if(Chr)
- {
- PrintPrgErr(pmNotPSDigit, Chr, "octal");
- Tmp = 0;
- }
- break;
- }
- }
- break;
- case 'd':
- for(Cnt = 0; Cnt < 3; Cnt++)
- {
- if(isdigit(Chr = *((*String)++)))
- Tmp = (Tmp * 10) + Chr - '0';
- else
- {
- if(Chr)
- {
- PrintPrgErr(pmNotPSDigit, Chr, "");
- Tmp = 0;
- }
- break;
- }
- }
- break;
- default:
- PrintPrgErr(pmEscCode, ESCAPE, Chr);
- }
- return(Tmp);
-}
-
-