summaryrefslogtreecommitdiff
path: root/Build/source/texk/chktex/OpSys.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/chktex/OpSys.c')
-rw-r--r--Build/source/texk/chktex/OpSys.c644
1 files changed, 0 insertions, 644 deletions
diff --git a/Build/source/texk/chktex/OpSys.c b/Build/source/texk/chktex/OpSys.c
deleted file mode 100644
index 02589d1c5f1..00000000000
--- a/Build/source/texk/chktex/OpSys.c
+++ /dev/null
@@ -1,644 +0,0 @@
-/*
- * ChkTeX v1.5, operating system specific code for ChkTeX.
- * 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>
- *
- *
- */
-
-
-/*
- * Some functions which have to be made different from OS to OS,
- * unfortunately...:\
- *
- */
-
-#ifdef KPATHSEA
-#include <kpathsea/config.h>
-#include <kpathsea/lib.h>
-#include <kpathsea/expand.h>
-#include <kpathsea/tex-file.h>
-#endif
-
-#include "ChkTeX.h"
-#include "OpSys.h"
-#include "Utility.h"
-
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef HAVE_STAT_H
-# include <stat.h>
-#endif
-
-#if HAVE_DIRENT_H
-# include <dirent.h>
-# define NAMLEN(dirent) strlen((dirent)->d_name)
-#else
-# define dirent direct
-# define NAMLEN(dirent) (dirent)->d_namlen
-# if HAVE_SYS_NDIR_H
-# include <sys/ndir.h>
-# endif
-# if HAVE_SYS_DIR_H
-# include <sys/dir.h>
-# endif
-# if HAVE_NDIR_H
-# include <ndir.h>
-# endif
-#endif
-
-#if defined(HAVE_OPENDIR) && defined(HAVE_CLOSEDIR) && \
- defined(HAVE_READDIR) && defined(HAVE_STAT) && \
- defined(S_IFDIR) && defined(SLASH)
-# define USE_RECURSE 1
-#else
-# define USE_RECURSE 0
-#endif
-
-#if defined(HAVE_LIBTERMCAP) || defined(HAVE_LIBTERMLIB)
-# define USE_TERMCAP 1
-#endif
-
-
-#ifdef USE_TERMCAP
-# ifdef HAVE_TERMCAP_H
-# include <termcap.h>
-# elif HAVE_TERMLIB_H
-# include <termlib.h>
-# else
-int tgetent (char *BUFFER, char *TERMTYPE);
-char *tgetstr (char *NAME, char **AREA);
-# endif
-static char term_buffer[2048];
-#endif
-
-#ifdef AMIGA
-# define __USE_SYSBASE
-# include <dos.h>
-# include <dos/dos.h>
-# include <dos/dosasl.h>
-# include <proto/dos.h>
-# include <proto/exec.h>
-# include <signal.h>
-#endif
-
-/* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */
-
-
-#ifdef AMIGA
-const char
- VersString [] = "$VER: ChkTeX 1.5 " __AMIGADATE__
- " Copyright (c) 1995-96 Jens T. Berger Thielemann "
- "<jensthi@ifi.uio.no>",
- __stdiowin [] = "CON:0/10/640/180/ChkTeX",
- __stdiov37 [] = "/AUTO/CLOSE/WAIT";
-
-const ULONG __MemPoolPuddleSize = 16384,
- __MemPoolThreshSize = 8192;
-
-static struct AnchorPath *AnchorPath = NULL;
-
-static void KillAnchorPath(void);
-static STRPTR InitAnchorPath(STRPTR String);
-# define V37 (DOSBase->dl_lib.lib_Version > 36)
-#endif
-
-
-/*
- * This is the name of the global resource file.
- */
-
-#ifndef DATADIR
-# ifdef AMIGA
-# define DATADIR "S:"
-# elif defined(__unix__)
-# define DATADIR "/usr/local/lib/"
-# elif defined(__MSDOS__)
-# define DATADIR "\\emtex\\data\\"
-# else
-# define DATADIR
-# endif
-#endif
-#define RCBASENAME "chktexrc"
-
-#ifdef __MSDOS__
-# define LOCALRCFILE RCBASENAME
-#else
-# define LOCALRCFILE "." RCBASENAME
-#endif
-
-TEXT ConfigFile [BUFSIZ] = LOCALRCFILE;
-STRPTR ReverseOn, ReverseOff;
-
-
-static BOOL HasFile(STRPTR Dir, const STRPTR Filename, const STRPTR App);
-
-#if USE_RECURSE
-static BOOL SearchFile(STRPTR Dir, const STRPTR Filename, const STRPTR App);
-#endif /* USE_RECURSE */
-
-/* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */
-
-
-/*
- * Modify this one to suit your needs. In any case, it should fill
- * the ConfigFile (sized BUFLEN) buffer above with full name & path
- * for the configuration file. The macro RCFILE will give you the
- * filename part of the file, if you need that.
- *
- * Note: This routine will be called several times. Your mission will
- * be to look in each location, and see whether a .chktexrc file exist
- * there.
- *
- * If you choose to do nothing, only the current directory will be
- * searched.
- *
- */
-
-enum LookIn
-{
- liMin,
- liSysDir,
- liUsrDir,
- liEnvir,
- liCurDir,
- liNFound,
- liMax
-};
-
-
-BOOL SetupVars(void)
-{
- STRPTR Env;
-#ifdef __MSDOS__
- STRPTR Ptr;
-#endif
- static enum LookIn i = liMin;
- static BOOL FoundFile;
-
- while(++i < liMax)
- {
- switch(i)
- {
- case liCurDir: /* Current directory */
- strcpy(ConfigFile, LOCALRCFILE);
- break;
- case liEnvir: /* Environment defined */
-#ifdef __MSDOS__
- if((Env = getenv("CHKTEXRC")) ||
- (Env = getenv("CHKTEX_HOME")))
-#else
- if((Env = getenv("CHKTEXRC")))
-#endif
- {
- strcpy(ConfigFile, Env);
- tackon(ConfigFile, LOCALRCFILE);
- }
- else
-#ifdef __MSDOS__
- if((Env = getenv("EMTEXDIR")))
- {
- strcpy(ConfigFile, Env);
- tackon(ConfigFile, "data");
- tackon(ConfigFile, LOCALRCFILE);
- }
- else
-#endif
- *ConfigFile = 0;
- break;
- case liUsrDir: /* User dir for resource files */
-#ifdef KPATHSEA
- {
- char *f = concat("~/", LOCALRCFILE);
- char *p = kpse_path_expand(f);
- if (p) {
- strcpy(ConfigFile, p);
- free(p);
- }
- else {
- *ConfigFile = 0;
- }
- free(f);
- }
-#else /* ! KPATHSEA */
-#ifdef AMIGA
- if(V37)
- strcpy(ConfigFile, "ENV:");
- else
- strcpy(ConfigFile, "S:");
-
- tackon(ConfigFile, LOCALRCFILE);
-#elif defined(__unix__)
- if((Env = getenv("HOME")) ||
- (Env = getenv("LOGDIR")))
- {
- strcpy(ConfigFile, Env);
- tackon(ConfigFile, LOCALRCFILE);
- }
- else
- *ConfigFile = 0;
-#elif defined(__MSDOS__)
- strcpy(ConfigFile, PrgName);
- if((Ptr = strrchr(ConfigFile, '\\')) ||
- (Ptr = strchr(ConfigFile, ':')))
- strcpy(++Ptr, RCBASENAME);
- else
- *ConfigFile = 0;
-#endif
-#endif /* KPATHSEA */
- break;
- case liSysDir: /* System dir for resource files */
-#ifdef KPATHSEA
- {
- char *f = kpse_find_file(LOCALRCFILE, kpse_program_text_format, TRUE);
- if (f) {
- strcpy(ConfigFile, f);
- }
- else {
- *ConfigFile = '\0';
- }
- }
-#else /* ! KPATHSEA */
-#if defined(__unix__) || defined(__MSDOS__)
- strcpy(ConfigFile, DATADIR);
- tackon(ConfigFile, RCBASENAME);
-#else
- *ConfigFile = 0;
-#endif
-#endif /* KPATHSEA */
- break;
- case liNFound:
- case liMin:
- case liMax:
- *ConfigFile = 0;
- if(!FoundFile)
- PrintPrgErr(pmNoRsrc);
- }
-
- if(*ConfigFile && fexists(ConfigFile))
- break;
- }
- FoundFile |= *ConfigFile;
-
- return(*ConfigFile);
-}
-
-/* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */
-
-/*
- * This function should initialize the global variables ReverseOn
- * and ReverseOff to magic cookies, which when printed, makes the
- * text in between stand out.
- */
-
-void SetupTerm(void)
-{
-#ifdef USE_TERMCAP
- char *termtype = getenv("TERM");
- int success;
- char *buffer;
-
- ifn(termtype)
- PrintPrgErr(pmSpecifyTerm);
-
- success = tgetent(term_buffer, termtype);
- if(success < 0)
- PrintPrgErr(pmNoTermData);
- if(success == 0)
- PrintPrgErr(pmNoTermDefd);
-
- ifn((buffer = (char *) malloc(strlen(term_buffer))) &&
- (ReverseOn = tgetstr("so", &buffer)) &&
- (ReverseOff = tgetstr("se", &buffer)))
-#endif
- {
- ReverseOn = PRE_ERROR_STR;
- ReverseOff = POST_ERROR_STR;
- }
-
-}
-
-/* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */
-
-/*
- * Concatenates the `File' string to the `Dir' string, leaving the result
- * in the `Dir' buffer. Takes care of inserting `directory' characters;
- * if we've got the strings "/usr/foo" and "bar", we'll get
- * "/usr/foo/bar".
- *
- * Behaviour somewhat controlled by the macros SLASH and DIRCHARS in the
- * OpSys.h file.
- *
- */
-
-void tackon(STRPTR Dir, const STRPTR File)
-{
- int EndC;
- ULONG SLen;
-
- if(Dir && (SLen = strlen(Dir)))
- {
- EndC = Dir[SLen -1];
- ifn(strchr(DIRCHARS, EndC))
- {
- Dir[SLen++] = SLASH;
- Dir[SLen ] = 0L;
- }
- }
-
- strcat(Dir, File);
-}
-
-/*
- * This function should add the appendix App to the filename Name.
- * If the resulting filename gets too long due to this, it may
- * overwrite the old appendix.
- *
- * Name may be assumed to be a legal filename under your OS.
- *
- * The appendix should contain a leading dot.
- */
-
-void AddAppendix(STRPTR Name, const STRPTR App)
-{
-#ifdef __MSDOS__
- STRPTR p;
-
- if((p = strrchr(Name, '.')))
- strcpy(p, App);
- else
- strcat(Name, App);
-#else
- /*
- * NOTE! This may fail if your system has a claustrophobic file
- * name length limit.
- */
- strcat(Name, App);
-#endif
-
-}
-
-/* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */
-
-
-/*
- * Locates a file, given a wordlist containing paths. If a
- * dir ends in a double SLASH, we'll search it recursively.
- *
- * We assume that
- * a) a deeper level in the dir. tree. has a longer path than
- * one above.
- * b) adding a level doesn't change any of the previous levels.
- *
- * If this function returns TRUE, Dest is guaranteed to contain
- * path & name of the found file.
- *
- * FALSE indicates that the file was not found; Dest is then
- * unspecified.
- */
-
-#ifdef KPATHSEA
-BOOL LocateFile(const STRPTR Filename, /* File to search for */
- STRPTR Dest, /* Where to put final file */
- const STRPTR App, /* Extra optional appendix */
- struct WordList *wl) /* Not used with kpathsea.
- */
-{
- BOOL ret;
- char *fn, *p;
-
- fn = Filename;
- p = kpse_find_file(fn, kpse_tex_format, FALSE);
-
- if (! p || ! *p) {
- fn = concat(Filename, App);
- p = kpse_find_file(fn, kpse_tex_format, FALSE);
- free(fn);
- }
-
- if (p) {
- strcpy(Dest, p);
- free(p);
- ret = TRUE;
- }
- else {
- fprintf(stderr, "%s: warning, file %s%s not found.\n", kpse_program_name, Filename, App);
- ret = FALSE;
- }
-
- return ret;
-}
-#else
-BOOL LocateFile(const STRPTR Filename, /* File to search for */
- STRPTR Dest, /* Where to put final file */
- const STRPTR App, /* Extra optional appendix */
- struct WordList *wl) /* List of paths, entries
- * ending in // will be recursed
- */
-{
- ULONG i, Len;
-
- FORWL(i, *wl)
- {
- strcpy(Dest, wl->Stack.Data[i]);
-
-#if USE_RECURSE
- Len = strlen(Dest);
-
- if(Len && (Dest[Len - 1] == SLASH) && (Dest[Len - 2] == SLASH))
- {
- Dest[Len - 1] = Dest[Len - 2] = 0;
- if(SearchFile(Dest, Filename, App))
- return(TRUE);
- }
- else
-#endif /* USE_RECURSE */
- {
- if(HasFile(Dest, Filename, App))
- return(TRUE);
- }
- }
- return(FALSE);
-}
-#endif
-
-static BOOL HasFile(STRPTR Dir, const STRPTR Filename, const STRPTR App)
-{
- int DirLen = strlen(Dir);
-
- tackon(Dir, Filename);
- if(fexists(Dir))
- return(TRUE);
-
- if(App)
- {
- AddAppendix(Dir, App);
- if(fexists(Dir))
- return(TRUE);
- }
-
- Dir[DirLen] = 0;
- return(FALSE);
-
-}
-
-
-#if USE_RECURSE
-static BOOL SearchFile(STRPTR Dir, const STRPTR Filename, const STRPTR App)
-{
- struct stat *statbuf;
- struct dirent *de;
- DIR *dh;
-
- int DirLen = strlen(Dir);
- BOOL Found = FALSE;
-
- DEBUG(("Searching %s for %s\n", Dir, Filename));
-
- if(HasFile(Dir, Filename, App))
- return(TRUE);
- else
- {
- if((statbuf = malloc(sizeof(struct stat))))
- {
- if((dh = opendir(Dir)))
- {
- while(!Found && (de = readdir(dh)))
- {
- Dir[DirLen] = 0;
- if(strcmp(de->d_name, ".") && strcmp(de->d_name, ".."))
- {
- tackon(Dir, de->d_name);
-
- if(!stat(Dir, statbuf))
- {
- if((statbuf->st_mode & S_IFMT) == S_IFDIR)
- Found = SearchFile(Dir, Filename, App);
- }
- }
- }
- closedir(dh);
- }
- else
- PrintPrgErr(pmNoOpenDir, Dir);
- free(statbuf);
- }
- }
- return(Found);
-}
-#endif /* USE_RECURSE */
-
-
-
-/* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */
-
-/*
- * This function should be called first with String being a file pattern.
- * It should then return the first filename matching that pattern.
- * Subsequent calls will be made with String = NULL; it should then return
- * any other filenames that matches the same pattern.
- * If the first call is made with NULL, you should return NULL.
- * It may be called more than once with String != NULL, however, you need
- * only to keep track of the last invocation.
- *
- * If a string doesn't match any pattern at all, return the string itself.
- *
- * Don't assume that the String passed will live on until the next
- * invocation, though. strdup() it if you need it after the first time.
- */
-
-#ifdef AMIGA
-
-STRPTR MatchFileName(STRPTR String)
-{
- STRPTR Retval = NULL;
-
- if(AnchorPath || String) /* Is this the first invocation? */
- {
- if(V37)
- {
- ifn(AnchorPath)
- {
- if(AnchorPath = malloc(sizeof(struct AnchorPath) + FMSIZE))
- {
- Retval = InitAnchorPath(String);
- atexit(&KillAnchorPath);
- }
- }
- else
- {
- if(String)
- {
- MatchEnd(AnchorPath);
- Retval = InitAnchorPath(String);
- }
- else
- {
- ifn(MatchNext(AnchorPath))
- Retval = AnchorPath->ap_Buf;
- }
- }
- }
- else /* ARP support may be added in the future */
- Retval = String;
-
- if(AnchorPath && AnchorPath->ap_FoundBreak)
- raise(SIGINT);
- }
-
- if(!Retval && String)
- Retval = String;
-
- return(Retval);
-}
-
-static void KillAnchorPath(void)
-{
- MatchEnd(AnchorPath);
-}
-
-static STRPTR InitAnchorPath(STRPTR String)
-{
- STRPTR Retval = NULL;
-
- AnchorPath->ap_BreakBits = SIGBREAKF_CTRL_C;
- AnchorPath->ap_Strlen = FMSIZE;
- AnchorPath->ap_FoundBreak = FALSE;
- AnchorPath->ap_Flags = 0L;
-
- ifn(MatchFirst(String, AnchorPath))
- Retval = AnchorPath->ap_Buf;
- else
- PrintPrgErr(pmNoFileMatch, String);
-
- AnchorPath->ap_Flags &= ~(APF_DODIR);
- return(Retval);
-}
-
-#else
-STRPTR MatchFileName(STRPTR String)
-{
- return(String);
-}
-#endif