mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			103 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright 1993, 1995 Christopher Seiwald.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This file is part of Jam - see jam.c for Copyright information.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * execcmd.h - execute a shell script.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Defines the interface to be implemented in platform specific implementation
							 | 
						||
| 
								 | 
							
								 * modules as well as different shared utility functions prepared in the
							 | 
						||
| 
								 | 
							
								 * execcmd.c module.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef EXECCMD_H
							 | 
						||
| 
								 | 
							
								#define EXECCMD_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "lists.h"
							 | 
						||
| 
								 | 
							
								#include "strings.h"
							 | 
						||
| 
								 | 
							
								#include "timestamp.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct timing_info
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    double system;
							 | 
						||
| 
								 | 
							
								    double user;
							 | 
						||
| 
								 | 
							
								    timestamp start;
							 | 
						||
| 
								 | 
							
								    timestamp end;
							 | 
						||
| 
								 | 
							
								} timing_info;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef void (* ExecCmdCallback)
							 | 
						||
| 
								 | 
							
								(
							 | 
						||
| 
								 | 
							
								    void * const closure,
							 | 
						||
| 
								 | 
							
								    int const status,
							 | 
						||
| 
								 | 
							
								    timing_info const * const,
							 | 
						||
| 
								 | 
							
								    char const * const cmd_stdout,
							 | 
						||
| 
								 | 
							
								    char const * const cmd_stderr,
							 | 
						||
| 
								 | 
							
								    int const cmd_exit_reason
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Status codes passed to ExecCmdCallback routines. */
							 | 
						||
| 
								 | 
							
								#define EXEC_CMD_OK    0
							 | 
						||
| 
								 | 
							
								#define EXEC_CMD_FAIL  1
							 | 
						||
| 
								 | 
							
								#define EXEC_CMD_INTR  2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int exec_check
							 | 
						||
| 
								 | 
							
								(
							 | 
						||
| 
								 | 
							
								    string const * command,
							 | 
						||
| 
								 | 
							
								    LIST * * pShell,
							 | 
						||
| 
								 | 
							
								    int * error_length,
							 | 
						||
| 
								 | 
							
								    int * error_max_length
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* exec_check() return codes. */
							 | 
						||
| 
								 | 
							
								#define EXEC_CHECK_OK             101
							 | 
						||
| 
								 | 
							
								#define EXEC_CHECK_NOOP           102
							 | 
						||
| 
								 | 
							
								#define EXEC_CHECK_LINE_TOO_LONG  103
							 | 
						||
| 
								 | 
							
								#define EXEC_CHECK_TOO_LONG       104
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void exec_cmd
							 | 
						||
| 
								 | 
							
								(
							 | 
						||
| 
								 | 
							
								    string const * command,
							 | 
						||
| 
								 | 
							
								    ExecCmdCallback func,
							 | 
						||
| 
								 | 
							
								    void * closure,
							 | 
						||
| 
								 | 
							
								    LIST * shell
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void exec_wait();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/******************************************************************************
							 | 
						||
| 
								 | 
							
								 *                                                                            *
							 | 
						||
| 
								 | 
							
								 * Utility functions defined in the execcmd.c module.                         *
							 | 
						||
| 
								 | 
							
								 *                                                                            *
							 | 
						||
| 
								 | 
							
								 ******************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Constructs a list of command-line elements using the format specified by the
							 | 
						||
| 
								 | 
							
								 * given shell list.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void argv_from_shell( char const * * argv, LIST * shell, char const * command,
							 | 
						||
| 
								 | 
							
								    int const slot );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Interrupt routine bumping the internal interrupt counter. Needs to be
							 | 
						||
| 
								 | 
							
								 * registered by platform specific exec*.c modules.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void onintr( int disp );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Returns whether an interrupt has been detected so far. */
							 | 
						||
| 
								 | 
							
								int interrupted( void );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Checks whether the given shell list is actually a request to execute raw
							 | 
						||
| 
								 | 
							
								 * commands without an external shell.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int is_raw_command_request( LIST * shell );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Utility worker for exec_check() checking whether all the given command lines
							 | 
						||
| 
								 | 
							
								 * are under the specified length limit.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int check_cmd_for_too_long_lines( char const * command, int const max,
							 | 
						||
| 
								 | 
							
								    int * const error_length, int * const error_max_length );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |