/* * ChkTeX, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Contact the author at: * Jens Berger * Spektrumvn. 4 * N-0666 Oslo * Norway * E-mail: * * */ #ifndef OPSYS_H #define OPSYS_H #include "ChkTeX.h" #include "Utility.h" /********************************************************************/ /**************** START OF USER SETTABLE PREFERENCES ****************/ /* * Note: This file contains most defines you'll wish to change if you * wish to adopt ChkTeX to a new system. It is, as you might notice, * heavily documented. If you wish to get into the internals of ChkTeX, * the interesting stuff is at the bottom of this file, and in the .c * files. However, you should also take a look at the "config.h.in" file * in this directory if you haven't got a shell able to run the "configure" * script. * * This program relies heavily on that the system which * automagically free()'s all malloc()'ed memory, works. The program * itself does not call free() very much. This is because we're doing * lots of tiny allocations, and a properly designed pooling system will * hopefully do a quicker job than we'll be able to do. So there. * * To keep things simple, we trust that the fclose()'ing of fopen()'ed * also happens automagically. * * Please use the getopt included, as we will modify optarg during * command processing. * * You may wish to modify the SetupVars() (OpSys.c) to better suit your * preferences. In any case, it should put the filename (and full path) * of the `.chktexrc' file into the ConfigFile array. The array is sized * BUFFER_SIZE bytes. * * The program does also assume that __unix__ is defined if the source is * compiled on a UNIX machine. * */ /* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */ /* * Here you should define what codes which should be returned to the * shell upon success/failure. * */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif #define EXIT_WARNINGS 2 #define EXIT_ERRORS 3 /* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */ /* * SLASH should be defined to the character your computer uses to * separate files/directories. Most systems use '/', messydos uses * '\'. * * DIRCHARS should be defined to the characters a directory entry * may end on. On Amigas, this is ":/" (either "FOO:BAR/" or "FOO:"), * Unix uses only "/", while messydos uses ":\\". * * This data will be used to automatically concatenate a directory * path and a filename. * * Adjust both to suit your needs. */ #ifdef TEX_LIVE #if defined(__MSDOS__) || defined(WIN32) # define SLASH '\\' # define DIRCHARS ":\\" #else # define SLASH '/' # define DIRCHARS "/" #endif #else /* TEX_LIVE */ #if defined(__unix__) # define SLASH '/' #elif defined(__MSDOS__) # define SLASH '\\' #endif #if defined(__unix__) # define DIRCHARS "/" #elif defined(__MSDOS__) # define DIRCHARS ":\\" #endif #endif /* TEX_LIVE */ /* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */ /* * Here, define what key-combination which is used to abort stdin * keyboard input. It should be a string, as we we'll type it out as * information to the user. */ #if defined(__unix__) # define STDIN_BREAK "Ctrl-D" #elif defined(__MSDOS__) # define STDIN_BREAK "Ctrl-Z + Enter" #else # define STDIN_BREAK "stdin break combination" #endif /* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */ /* * For fancy printing of commands, we'll use these strings to turn * on/off the error indication. The codes listed here are ANSI * compatible; if you don't have that type of terminal, you may wish * to adjust this. Use "chktex -v2 Test.tex" to check the effects of * these macros. Note: These strings will be printf()'ed, so watch your * %'s. * * Under UNIX, we'll ignore these values and use termcap instead, where * that is installed. * * If these strings can't be specified statically, you'll have to add * code in the SetupTerm() function. * * PRE_ERROR_STR is of course printed in front of each location we * wish to show as an error, and POST_ERROR_STR after each location. * * The codes #defined here, will switch back- and foreground colours. * We're using '\033[' as escape character, some terminals may like * '\233' better. * */ # define PRE_ERROR_STR "\033[7m" # define POST_ERROR_STR "\033[0m" /* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */ /* * This macro should contain the appendix for backup files, which * will be appended onto the original filename. It should contain * a leading dot. */ #ifdef __MSDOS__ # define BAKAPPENDIX ".$cl" #else # define BAKAPPENDIX ".bak" #endif /* -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- -=><=- */ /* * This defines the buffer size used in many places. The biggest * limitation imposed by a small buffer is the size of a line which * can be accurately processed by chktex. On the other hand, a large * buffer size will waste memory. However, memory is quite cheap * these days, especially considering the amount needed by ChkTeX. * * ChkTeX used to use BUFSIZ which was 1024 (fairly reasonable) on * many UNIX-like systems, but was much smaller on Windows. So, * instead we create our own buffer size and hope that no-one has * lines longer than 4k. * */ #define BUFFER_SIZE 4096 /***************** END OF USER SETTABLE PREFERENCES *****************/ /********************************************************************/ #ifndef WORDLIST_DEFINED struct WordList; #endif /* Sorry; there are now cyclic dependencies in the * source tree. :-/ */ extern const char *ReverseOn; extern const char *ReverseOff; extern char ConfigFile[BUFFER_SIZE]; extern struct WordList ConfigFiles; int SetupVars(void); void SetupTerm(void); void AddAppendix(char *Name, const char *App); void tackon(char *, const char *); int LocateFile(const char *Filename, char *Dest, const char *App, struct WordList *wl); void AddDirectoryFromRelativeFile(const char * Filename, struct WordList *TeXInputs); int IsRegFile(const char *Filename); #endif /* OPSYS_H */