summaryrefslogtreecommitdiff
path: root/Build/source/texk/tex4htk/htcmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/tex4htk/htcmd.c')
-rw-r--r--Build/source/texk/tex4htk/htcmd.c596
1 files changed, 596 insertions, 0 deletions
diff --git a/Build/source/texk/tex4htk/htcmd.c b/Build/source/texk/tex4htk/htcmd.c
new file mode 100644
index 00000000000..a91a85c7858
--- /dev/null
+++ b/Build/source/texk/tex4htk/htcmd.c
@@ -0,0 +1,596 @@
+
+/**********************************************************/
+/* htcmd.c 2004-12-16-16:20 */
+/* Copyright (C) 1996--2004 Eitan M. Gurari */
+/* */
+/* This work may be distributed and/or modified under the */
+/* conditions of the LaTeX Project Public License, either */
+/* version 1.3 of this license or (at your option) any */
+/* later version. The latest version of this license is */
+/* in */
+/* http://www.latex-project.org/lppl.txt */
+/* and version 1.3 or later is part of all distributions */
+/* of LaTeX version 2003/12/01 or later. */
+/* */
+/* This work has the LPPL maintenance status "maintained".*/
+/* */
+/* This Current Maintainer of this work */
+/* is Eitan M. Gurari. */
+/* */
+/* However, you are allowed to modify this program */
+/* without changing its name, if you modify its */
+/* signature. Changes to the signature can be */
+/* introduced with a directive of the form */
+/* #define PLATFORM "signature" */
+/* */
+/* gurari@cse.ohio-state.edu */
+/* http://www.cse.ohio-state.edu/~gurari */
+/**********************************************************/
+
+/* **********************************************
+ Compiler options *
+ (uncommented | command line) *
+------------------------------------------------*
+ Clasic C (CC) default
+#define ANSI ansi-c, c++
+#define DOS_C
+#define HAVE_STRING_H <string.h>
+#define HAVE_DIRENT_H <dirent.h>
+#define HAVE_SYS_NDIR_H <sys/ndir.h>
+#define HAVE_SYS_DIR_H <sys/dir.h>
+#define HAVE_NDIR_H <ndir.h>
+#define HAVE_IO_H <io.h>
+#define HAVE_UNISTD_H <unistd.h>
+#define WIN32
+#define KPATHSEA
+#define SYSTEM_FUNCTION_OK
+#define CDECL ..........
+#define BCC32 bordland c++
+
+*************************************************
+ Tex4ht variables *
+ (uncommented | command line) *
+----------------------------------------------- */
+
+/* ******************************************** */
+
+
+#ifdef BCC32
+#define WIN32
+#define ANSI
+#define HAVE_IO_H
+#define HAVE_STRING_H
+#define PLATFORM "ms-win32"
+#endif
+
+
+
+#ifdef BCC
+#define DOS_C
+#define ANSI
+#define HAVE_IO_H
+#define PLATFORM "ms-dos"
+#endif
+
+
+
+#ifdef __DJGPP__
+#define DOS_WIN32
+#define ANSI
+#endif
+
+
+#ifdef DOS_C
+#define DOS
+#endif
+#ifdef DOS
+#define DOS_WIN32
+#ifndef HAVE_STRING_H
+#define HAVE_STRING_H
+#endif
+#endif
+#ifdef WIN32
+#define DOS_WIN32
+#endif
+
+#ifdef DOS_WIN32
+#define STRUCT_DIRENT
+#endif
+
+
+
+#ifdef KPATHSEA
+#ifdef WIN32
+#define KWIN32
+#endif
+#endif
+
+
+
+#include <signal.h>
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+
+#ifdef HAVE_DIRENT_H
+
+#include <dirent.h>
+
+
+#else
+#ifndef STRUCT_DIRENT
+#define STRUCT_DIRECT
+#endif
+
+#ifdef HAVE_SYS_NDIR_H
+#include <sys/ndir.h>
+#endif
+#ifdef HAVE_SYS_DIR_H
+#include <sys/dir.h>
+#endif
+#ifdef HAVE_NDIR_H
+#include <ndir.h>
+#endif
+
+
+#endif
+
+
+
+
+#ifndef __DJGPP__
+
+#ifndef F_OK
+#ifdef DOS_WIN32
+#define F_OK 0
+#endif
+#ifndef KPATHSEA
+#ifndef DOS_WIN32
+#define HAVE_UNISTD_H
+#endif
+#endif
+#endif
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+#ifndef KPATHSEA
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#endif
+
+
+#endif
+
+
+#ifdef KPATHSEA
+#include <kpathsea/config.h>
+#include <kpathsea/c-errno.h>
+#include <kpathsea/c-ctype.h>
+#include <kpathsea/c-fopen.h>
+#include <kpathsea/c-pathmx.h>
+#include <kpathsea/proginit.h>
+#include <kpathsea/tex-file.h>
+#include <kpathsea/tex-make.h>
+#include <signal.h>
+#if !defined(_AMIGA) && !defined(WIN32)
+#include <sys/time.h>
+#endif
+#include <fcntl.h>
+#include <setjmp.h>
+#endif
+
+#ifdef __DJGPP__
+
+#ifndef F_OK
+#ifdef DOS_WIN32
+#define F_OK 0
+#endif
+#ifndef KPATHSEA
+#ifndef DOS_WIN32
+#define HAVE_UNISTD_H
+#endif
+#endif
+#endif
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+#ifndef KPATHSEA
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#endif
+
+
+#endif
+
+
+
+
+
+
+#ifdef DOS
+#define PROTOTYP
+#endif
+#ifdef ANSI
+#define PROTOTYP
+#endif
+#ifdef KWIN32
+#define PROTOTYP
+#endif
+
+
+#ifdef KPATHSEA
+#ifdef WIN32
+#undef CDECL
+#define CDECL __cdecl
+#else
+#define CDECL
+#endif
+#endif
+
+
+#if defined(DOS_WIN32) || defined(__MSDOS__)
+#define READ_BIN_FLAGS "rb"
+#define READ_TEXT_FLAGS "r"
+#define WRITE_BIN_FLAGS "wb"
+#define WRITE_TEXT_FLAGS "w"
+#else
+#define READ_BIN_FLAGS "r"
+#define READ_TEXT_FLAGS "r"
+#define WRITE_BIN_FLAGS "w"
+#define WRITE_TEXT_FLAGS "w"
+#endif
+
+
+
+#define Q_CHAR char
+#define U_CHAR char
+#define C_CHAR char
+#define Q_NULL (Q_CHAR *) 0
+#define U_NULL (U_CHAR *) 0
+#define C_NULL (C_CHAR *) 0
+
+
+#define IGNORED void
+
+
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+
+#ifdef PROTOTYP
+#define VOID void
+#define ARG_I(x) x
+#define ARG_II(x,y) x,y
+#define ARG_III(x,y,z) x,y,z
+#define ARG_IV(x,y,z,w) x,y,z,w
+#define ARG_V(x,y,z,w,u) x,y,z,w,u
+#else
+#define VOID
+#define ARG_I(x)
+#define ARG_II(x,y)
+#define ARG_III(x,y,z)
+#define ARG_IV(x,y,z,w)
+#define ARG_V(x,y,z,w,u)
+#endif
+
+
+struct sys_call_rec{
+ Q_CHAR * filter;
+ struct sys_call_rec *next;
+};
+
+
+struct script_struct{
+ Q_CHAR *command;
+ struct script_struct *next;
+};
+
+
+#define NULL_SCRIPT (struct script_struct *) 0
+
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef BOOL
+#define BOOL int
+#endif
+
+
+#define bad_arg err_arg(0)
+#define bad_mem err_i(1)
+
+
+#define eq_str(x,y) (!strcmp(x,y))
+
+
+
+static BOOL system_yes;
+
+
+static int system_return;
+
+
+static C_CHAR *warn_err_mssg[]={
+"\n---------------------------------------------------------------\n\
+htcmd optional-flag command-line\n\n\
+ optional-flag:\n\
+ -slash translate '/' into '\\'\n\
+ -dslash translate '/' into '\\\\'\n\n\
+Example: \n\
+ htcmd t4ht name -d/WWW/temp/ -etex4ht-32.env -m644\n\
+---------------------------------------------------------------\n"
+
+ "" };
+
+
+
+static void
+
+#ifdef CDECL
+CDECL
+#endif
+
+
+sig_err(ARG_I(int));
+
+
+static void err_i( ARG_I(int) );
+
+
+static void err_arg( ARG_I(int) );
+
+
+static void call_sys(ARG_I(Q_CHAR *));
+
+
+static void strct( ARG_II(C_CHAR *, C_CHAR *) );
+
+
+
+
+static void
+
+#ifdef CDECL
+CDECL
+#endif
+
+
+sig_err
+#ifdef ANSI
+#define SEP ,
+( int s
+)
+#undef SEP
+#else
+#define SEP ;
+(s) int s
+;
+#undef SEP
+#endif
+{
+ (void) signal(s,SIG_IGN);
+ switch( s ){
+#ifdef SIGSEGV
+ case SIGSEGV: err_i(2);
+#endif
+ case SIGFPE : err_i(3);
+#if defined(SIGINT) && !defined(WIN32)
+ case SIGINT : err_i(4);
+#endif
+ }
+
+#ifdef __DJGPP__
+ if (s != SIGINT && s != SIGQUIT)
+ exit(EXIT_FAILURE);
+#endif
+
+
+}
+
+
+
+static void err_i
+#ifdef ANSI
+#define SEP ,
+( int n
+
+)
+#undef SEP
+#else
+#define SEP ;
+(n) int n
+
+;
+#undef SEP
+#endif
+{ (IGNORED) fprintf(stderr,"--- error --- ");
+ (IGNORED) fprintf(stderr, warn_err_mssg[n]);
+ exit(EXIT_FAILURE);
+}
+
+
+
+static void err_arg
+#ifdef ANSI
+#define SEP ,
+( int n
+
+)
+#undef SEP
+#else
+#define SEP ;
+(n) int n
+
+;
+#undef SEP
+#endif
+{ (IGNORED) fprintf(stderr,"--- error --- ");
+ (IGNORED) fprintf(stderr, warn_err_mssg[n]);
+ exit(EXIT_FAILURE);
+}
+
+
+
+static void call_sys
+#ifdef ANSI
+#define SEP ,
+( Q_CHAR * command
+)
+#undef SEP
+#else
+#define SEP ;
+(command) Q_CHAR * command
+;
+#undef SEP
+#endif
+{
+ if( *command ){
+ (IGNORED) printf("htcmd calls: %s\n", command);
+ system_return = system_yes? (int) system(command) : -1;
+ (IGNORED) printf("%shtcmd returns: %d\n",
+ system_return? "--- Warning --- " : "", system_return );
+ }
+}
+
+
+
+static void strct
+#ifdef ANSI
+#define SEP ,
+(
+ Q_CHAR * str1 SEP
+ Q_CHAR * str2
+
+)
+#undef SEP
+#else
+#define SEP ;
+( str1, str2 )
+ Q_CHAR * str1 SEP
+ Q_CHAR * str2
+
+;
+#undef SEP
+#endif
+{ Q_CHAR * ch;
+ ch = str1 + (int) strlen(str1);
+ (IGNORED) strcpy( ch, str2 );
+}
+
+
+
+int
+#ifdef CDECL
+CDECL
+#endif
+
+ main
+#ifdef ANSI
+#define SEP ,
+(
+ int argc SEP
+ Q_CHAR **argv
+)
+#undef SEP
+#else
+#define SEP ;
+(argc, argv)
+ int argc SEP
+ Q_CHAR **argv
+;
+#undef SEP
+#endif
+{
+int i;
+BOOL slash, dslash;
+char *in_command, *command, *p, *q;
+
+
+
+
+#ifdef SIGSEGV
+ (void) signal(SIGSEGV,sig_err);
+#endif
+ (void) signal(SIGFPE,sig_err);
+#ifdef KWIN32
+
+SetConsoleCtrlHandler((PHANDLER_ROUTINE)sigint_handler, TRUE);
+
+
+#else
+#ifdef SIGINT
+ (void) signal(SIGINT,sig_err);
+#endif
+#endif
+
+
+#ifdef PLATFORM
+ (IGNORED) printf("htcmd.c (2004-12-16-16:20 %s)\n",PLATFORM);
+#else
+ (IGNORED) printf("htcmd.c (2004-12-16-16:20)\n");
+#endif
+
+{ C_CHAR *yes = NULL;
+ system_yes = (
+#ifdef SYSTEM_FUNCTION_OK
+0
+#else
+system( yes ) != 0
+#endif
+
+);
+}
+
+
+
+ in_command = (char *) malloc(1024);
+ command = (char *) malloc(1024);
+ in_command[0] = '\0';
+
+ if( argc == 1 ){ bad_arg; }
+ slash = eq_str(argv[1],"-slash") ;
+ dslash = eq_str(argv[1],"-dslash") ;
+ for(i=1+slash+dslash; i<argc; i++){
+ (IGNORED) printf("%s ", argv[i]);
+ (IGNORED) strct(in_command,argv[i]);
+ (IGNORED) strct(in_command," ");
+ }
+ (IGNORED) printf("\n");
+
+
+
+p = in_command;
+q = command;
+do{
+ if( (*p != '"' ) && (*p != '\'' ) && (*p != '`' ) ){
+ if(slash && (*p == '/')) {
+ *(q++) = '\\';
+ }
+ else if(dslash && (*p == '/')) {
+ *(q++) = '\\';
+ *(q++) = '\\';
+ }
+ else { *(q++) = *p; }
+ }
+} while (*(p++) != '\0');
+(IGNORED) call_sys(command);
+
+
+ return 0;
+}
+
+