tet_api.h

Jamey Sharp jamey at gabe.freedesktop.org
Mon Oct 31 15:09:09 PST 2005


Update of /cvs/xtest/xtest/inc/tet3
In directory gabe:/tmp/cvs-serv27930/inc/tet3

Added Files:
	tet_api.h tet_api.h.orig tet_jrnl.h 
Log Message:
Importing TET 3.3h (unsupported) sources from http://tetworks.opengroup.org/tet/tet3.3h-unsup.src.tgz.
Omitted the contrib directory: we don't care, and the license situation wasn't entirely clear.


--- NEW FILE: tet_jrnl.h ---
/*
 *	SCCS: @(#)tet_jrnl.h	1.6 (97/12/23)
 *
 *	UniSoft Ltd., London, England
 *
 * (C) Copyright 1996 X/Open Company Limited
 *
 * All rights reserved.  No part of this source code may be reproduced,
 * stored in a retrieval system, or transmitted, in any form or by any
 * means, electronic, mechanical, photocopying, recording or otherwise,
 * except as stated in the end-user licence agreement, without the prior
 * permission of the copyright owners.
 * A copy of the end-user licence agreement is contained in the file
 * Licence which accompanies this distribution.
 * 
 * X/Open and the 'X' symbol are trademarks of X/Open Company Limited in
 * the UK and other countries.
 */

/*
 * Copyright 1990 Open Software Foundation (OSF)
 * Copyright 1990 Unix International (UI)
 * Copyright 1990 X/Open Company Limited (X/Open)
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted, provided
 * that the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of OSF, UI or X/Open not be used in 
 * advertising or publicity pertaining to distribution of the software 
 * without specific, written prior permission.  OSF, UI and X/Open make 
 * no representations about the suitability of this software for any purpose.  
 * It is provided "as is" without express or implied warranty.
 *
 * OSF, UI and X/Open DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 
 * EVENT SHALL OSF, UI or X/Open BE LIABLE FOR ANY SPECIAL, INDIRECT OR 
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 
 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 
 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
 * PERFORMANCE OF THIS SOFTWARE.
 *
 */

/************************************************************************

SCCS:          @(#)tet_jrnl.h	1.6 97/12/23 TETware release 3.3
NAME:          tet_jrnl.h
PRODUCT:       TETware
AUTHOR:        OSF Validation & SQA
DATE CREATED:  14 May 1991
CONTENTS:

MODIFICATIONS:

	"TET Rework"
	David G. Sawyer, UniSoft Ltd,  July 1991.

	DTET development - this file is derived from TET Release 1.10
	David G. Sawyer
	John-Paul Leyland
	UniSoft Ltd, June 1992

	Andrew Dingwall, UniSoft Ltd., August 1996
	added defines for TETware

	Andrew Dingwall, UniSoft Ltd., March 1997
	added definition of TET_JNL_UNAME

	Andrew Dingwall, UniSoft Ltd., December 1997
	protect against multiple inclusion

************************************************************************/

#ifndef TET_JRNL_H_INCLUDED
#define TET_JRNL_H_INCLUDED

/* max length of a journal line */
#define TET_JNL_LEN		512


/*
**	journal line identifiers
*/

/* TCC startup message */
#define TET_JNL_TCC_START	0

/* Uname line */
#define TET_JNL_UNAME		5

/* EXEC test case start */
#define TET_JNL_INVOKE_TC	10

/* TCM startup message */
#define TET_JNL_TCM_START	15

/* configuration report start */
#define TET_JNL_CFG_START	20

/* configuration variable assignment */
#define TET_JNL_CFG_VALUE	30

/* configuration report end */
#define TET_JNL_CFG_END		40

/* TCC error message */
#define TET_JNL_TC_MESSAGE	50

/* scenario information line */
#define TET_JNL_SCEN_OUT	70

/* EXEC test case end */
#define TET_JNL_TC_END		80

/* test case aborted by user interrupt */
#define TET_USER_ABORT		90

/* captured output from a test case */
#define TET_JNL_CAPTURED_OUTPUT	100

/* BUILD start and end */
#define TET_JNL_BUILD_START	110
#define TET_JNL_BUILD_END	130

/* test purpose start and end */
#define TET_JNL_TP_START	200
#define TET_JNL_TP_RESULT	220

/* CLEAN start and end */
#define TET_JNL_CLEAN_START	300
#define TET_JNL_CLEAN_OUTPUT	310
#define TET_JNL_CLEAN_END	320

/* invocable component start and end */
#define TET_JNL_IC_START	400
#define TET_JNL_IC_END		410

/* TCM/API error message */
#define TET_JNL_TCM_INFO	510

/* test case information (from tet_infoline() et al) */
#define TET_JNL_TC_INFO		520

/* PARALLEL start and end */
#define TET_JNL_PRL_START	600
#define TET_JNL_PRL_END		620

/* SEQUENTIAL start and end */
#define TET_JNL_SEQ_START	630
#define TET_JNL_SEQ_END		640
/* reserved for future use	650 */
/* reserved for future use	660 */

/* VARIABLE start and end */
#define TET_JNL_VAR_START	670
#define TET_JNL_VAR_END		680

/* REPEAT start and end */
#define TET_JNL_RPT_START	700
#define TET_JNL_RPT_END		720

/* TIMED_LOOP start and end */
#define TET_JNL_TLOOP_START	730
#define TET_JNL_TLOOP_END	740

/* RANDOM start and end */
#define TET_JNL_RND_START	750
#define TET_JNL_RND_END		760

/* REMOTE start and end */
#define TET_JNL_RMT_START	800
#define TET_JNL_RMT_END		820

/* DISTRIBUTED start and end */
#define TET_JNL_DIST_START	830
#define TET_JNL_DIST_END	840

/* TCC end */
#define TET_JNL_TCC_END		900


/* END status - may be used in field 2.2 of a BUILD, EXEC and CLEAN end line */
#define TET_ESTAT_EXEC_FAILED	-1	/* exec failed */
#define TET_ESTAT_TIMEOUT	-2	/* test case or tool timed out */
#define TET_ESTAT_LOCK		-3	/* could not get required locks */
#define TET_ESTAT_ERROR		-4	/* general error code (usually build
					   or clean tool not defined) */
#endif /* TET_JRNL_H_INCLUDED */


--- NEW FILE: tet_api.h ---
/*
 *	SCCS: @(#)tet_api.h	1.28 (98/08/28)
 *
 *	UniSoft Ltd., London, England
 *
 * (C) Copyright 1996 X/Open Company Limited
 *
 * All rights reserved.  No part of this source code may be reproduced,
 * stored in a retrieval system, or transmitted, in any form or by any
 * means, electronic, mechanical, photocopying, recording or otherwise,
 * except as stated in the end-user licence agreement, without the prior
 * permission of the copyright owners.
 * A copy of the end-user licence agreement is contained in the file
 * Licence which accompanies this distribution.
 * 
 * X/Open and the 'X' symbol are trademarks of X/Open Company Limited in
 * the UK and other countries.
 */

/*
 * Copyright 1990 Open Software Foundation (OSF)
 * Copyright 1990 Unix International (UI)
 * Copyright 1990 X/Open Company Limited (X/Open)
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted, provided
 * that the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of OSF, UI or X/Open not be used in 
 * advertising or publicity pertaining to distribution of the software 
 * without specific, written prior permission.  OSF, UI and X/Open make 
 * no representations about the suitability of this software for any purpose.  
 * It is provided "as is" without express or implied warranty.
 *
 * OSF, UI and X/Open DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 
 * EVENT SHALL OSF, UI or X/Open BE LIABLE FOR ANY SPECIAL, INDIRECT OR 
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 
 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 
 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
 * PERFORMANCE OF THIS SOFTWARE.
 */

/************************************************************************

SCCS:   	@(#)tet_api.h	1.28 98/08/28 TETware release 3.3
NAME:		'C' API header
PRODUCT:	TETware
AUTHOR:		Geoff Clare, UniSoft Ltd.
DATE CREATED:	23 July 1990
CONTENTS:

	struct tet_testlist definition
	result code values for use with tet_result()
	TET_NULLFP null function pointer for use with tet_fork()
	declarations/prototypes for all API interfaces

MODIFICATIONS:

	Geoff Clare, UniSoft Ltd., 10 Oct 1990
		Remove const keywords.

	Geoff Clare, UniSoft Ltd., 18 Oct 1990
		Add tet_pname.

	Geoff Clare, UniSoft Ltd., 28 Nov 1990
		Add tet_nosigreset.

	Geoff Clare, UniSoft Ltd., 21 June 1991
		Make tet_fork() prototype consistent with definition.

	DTET development - this file is derived from TET Release 1.10
	David G. Sawyer
	John-Paul Leyland
	UniSoft Ltd, June 1992

	Andrew Dingwall, UniSoft Ltd., October 1992
	Added DTET API function declarations.

	Denis McConalogue, UniSoft Limited, September 1993
	changed prototype for tet_sync()

	Andrew Dingwall, UniSoft Ltd., February 1994
	removed comment from #include line (for strict ANSI compliance?)

	Andrew Dingwall, UniSoft Ltd., October 1994
	added support for tet_msync() API function

	Geoff Clare, UniSoft Ltd., July 1996
	Changes for TETWare.

	Geoff Clare, UniSoft Ltd., Sept 1996
	Changes for TETWare-Lite and POSIX threads.

	Andrew Dingwall, UniSoft Ltd., June 1997
	changes to support the defined test case interface

	Geoff Clare, UniSoft Ltd., June 1997
	Changes for NT threads.

	Andrew Dingwall, UniSoft Ltd., December 1997
	protect against multiple inclusion

	Andrew Dingwall, UniSoft Ltd., August 1998
	Added support for shared libraries.

************************************************************************/

#ifndef TET_API_H_INCLUDED
#define TET_API_H_INCLUDED

#ifdef __cplusplus
extern "C" {
#endif


/*
** support for shared API libraries on Win32 systems
*/


   /* not using a shared API library on a Win32 system */
#  ifndef TET_IMPORT
#    define TET_IMPORT
#  endif


#ifndef TET_EXPORT
#  define TET_EXPORT
#endif

/*
** TET_EXPORT_DATA is used to declare a data item that is exported from
** a program to a shared library.
** TET_IMPORT_DATA, TET_IMPORT_ARRAY, TET_IMPORT_FUNC and TET_IMPORT_FUNC_PTR
** are used to declare a data item, array, function or function pointer that
** is imported by a program from a shared library.
** Definitions used when compiling TETware source files appear in dtmac.h.
** These definitions are sufficient for user-level code.
*/
#ifndef TET_EXPORT_DATA
#  define TET_EXPORT_DATA(TYPE, NAME) \
	TET_EXPORT extern TYPE NAME
#endif
#ifndef TET_IMPORT_DATA
#  define TET_IMPORT_DATA(TYPE, NAME) \
	TET_IMPORT extern TYPE NAME
#endif
#ifndef TET_IMPORT_ARRAY
#  define TET_IMPORT_ARRAY(TYPE, NAME, DIM) \
	TET_IMPORT extern TYPE NAME DIM
#endif
#ifndef TET_IMPORT_FUNC
#  define TET_IMPORT_FUNC(TYPE, NAME, ARGS) \
	TET_IMPORT extern TYPE NAME ARGS
#endif
#ifndef TET_IMPORT_FUNC_PTR
#  define TET_IMPORT_FUNC_PTR(TYPE, NAME, ARGS) \
	TET_IMPORT extern TYPE (*NAME) ARGS
#endif

/* the following are needed for types used in declarations */
#include <sys/types.h>
#define TET_PID_T_DEFINED
#if defined(__STDC__) || defined(__cplusplus) || defined(_WIN32)
#  include <time.h>
#  include <stdarg.h>
#endif
#ifdef TET_POSIX_THREADS
#  include <pthread.h>
#else /* !TET_POSIX_THREADS */
#  ifdef TET_THREADS
#    ifndef _WIN32
#      include <thread.h>
#    endif
#  endif /* TET_THREADS */
#endif /* !TET_POSIX_THREADS */


/* values of the standard result codes - may be passed to tet_result() */
#define TET_PASS	0
#define TET_FAIL	1
#define TET_UNRESOLVED	2
#define TET_NOTINUSE	3
#define TET_UNSUPPORTED	4
#define TET_UNTESTED	5
#define TET_UNINITIATED	6
#define TET_NORESULT	7


/* tet_errno values, may be used to index into tet_errlist[] */
#define TET_ER_OK		0	/* ok  success */
#define TET_ER_ERR		1	/* general error code */
#define TET_ER_MAGIC		2	/* bad magic number */
#define TET_ER_LOGON		3	/* not logged on */
#define TET_ER_RCVERR		4	/* receive message error */
#define TET_ER_REQ		5	/* unknown request code */
#define TET_ER_TIMEDOUT		6	/* request timed out */
#define TET_ER_DUPS		7	/* request contained duplicate IDs */
#define TET_ER_SYNCERR		8	/* sync completed unsuccessfully */
#define TET_ER_INVAL		9	/* invalid request parameter */
#define TET_ER_TRACE		10	/* tracing not configured */
#define TET_ER_WAIT		11	/* process not terminated */
#define TET_ER_XRID		12	/* bad xrid in xresd request */
#define TET_ER_SNID		13	/* bad snid in syncd request */
#define TET_ER_SYSID		14	/* sysid not in system name list */
#define TET_ER_INPROGRESS	15	/* event in progress */
#define TET_ER_DONE		16	/* event finished or already happened */
#define TET_ER_CONTEXT		17	/* request out of context */
#define TET_ER_PERM		18	/* priv request/kill error */
#define TET_ER_FORK		19	/* can't fork */
#define TET_ER_NOENT		20	/* no such file or directory */
#define TET_ER_PID		21	/* no such process */
#define TET_ER_SIGNUM		22	/* bad signal number */
#define TET_ER_FID		23	/* bad file id */
#define TET_ER_INTERN		24	/* server internal error */
#define TET_ER_ABORT		25	/* abort TCM on TP end */
#define TET_ER_2BIG		26	/* argument list too long */


/*
**	function prototype macros
*/

#if defined(__STDC__) || defined(__cplusplus) || defined(_WIN32)
#  ifndef TET_PROTOTYPES
#    define TET_PROTOTYPES
#  endif
#endif

#ifdef TET_PROTOTYPES
#  define TET_PROTOLIST(list)	list
#else
#  define TET_PROTOLIST(list)	()
#endif


/* NULL function pointer - may be used as an argument to tet_fork() */
#define TET_NULLFP	((void (*) ()) 0)


#ifndef TET_LITE /* -START-LITE-CUT- */

   /*
   ** sync requests and sync error reporting
   */

   /* structure used in tet_msync() and tet_remsync() calls */
   struct tet_synmsg {
   	char *tsm_data;	/* ptr to sync message data buffer */
   	int tsm_dlen;	/* no of bytes in sm_data */
   	int tsm_sysid;	/* id of system sending sync message data */
   	int tsm_flags;	/* flags - see below */
   };

   /* values for tsm_flags (a bit field) */
#  define TET_SMSNDMSG	001	/* system is sending message data */
#  define TET_SMRCVMSG	002	/* system is receiving message data */
#  define TET_SMDUP	004	/* more than one system attempted to send */
#  define TET_SMTRUNC	010	/* message data was truncated */

#  define TET_SMMSGMAX	1024	/* maximum size of a tet_msync message -
   				   size must be expressable in 12 bits
   				   (see ST_COUNTMASK in ldst.h) */

   /* sync votes */
#  define TET_SV_YES		1
#  define TET_SV_NO		2

   /* structure of an element in the array describing sync status
      that is passed by the API to the sync error reporting function */
   struct tet_syncstat {
   	int tsy_sysid;	/* system ID */
   	int tsy_state;	/* sync state */
   };

   /* values for tsy_state */
#  define TET_SS_NOTSYNCED	1	/* sync request not received */
#  define TET_SS_SYNCYES	2	/* system voted YES */
#  define TET_SS_SYNCNO		3	/* system voted NO */
#  define TET_SS_TIMEDOUT	4	/* system timed out */
#  define TET_SS_DEAD		5	/* process exited */


   /* structure of the data item that is filled in by tet_getsysbyid() */
#  define TET_SNAMELEN	32		/* maximum system name length */
   struct tet_sysent {
   	int ts_sysid;			/* system ID */
   	char ts_name[TET_SNAMELEN];	/* system name */
   };

#endif /* -END-LITE-CUT- */


/*
**	declarations of public functions provided by the API
*/

/* functions in TETware-Lite and in Distrubuted TETware */
TET_IMPORT_FUNC(void, tet_delete, TET_PROTOLIST((int, char *)));
TET_IMPORT_FUNC(void, tet_exit, TET_PROTOLIST((int)));
TET_IMPORT_FUNC(char *, tet_getvar, TET_PROTOLIST((char *)));
TET_IMPORT_FUNC(void, tet_infoline,  TET_PROTOLIST((char *)));
TET_IMPORT_FUNC(int, tet_kill, TET_PROTOLIST((pid_t, int)));
TET_IMPORT_FUNC(void, tet_logoff, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(int, tet_minfoline, TET_PROTOLIST((char **, int)));
TET_IMPORT_FUNC(int, tet_printf, TET_PROTOLIST((char *, ...)));
TET_IMPORT_FUNC(char *, tet_reason, TET_PROTOLIST((int)));
TET_IMPORT_FUNC(int, tet_remgetlist, TET_PROTOLIST((int **)));
TET_IMPORT_FUNC(int, tet_remgetsys, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(void, tet_result, TET_PROTOLIST((int)));
TET_IMPORT_FUNC(void, tet_setblock, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(void, tet_setcontext, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(pid_t, tet_spawn, TET_PROTOLIST((char *, char **, char **)));
TET_IMPORT_FUNC(int, tet_vprintf, TET_PROTOLIST((char *, va_list)));
TET_IMPORT_FUNC(int, tet_wait, TET_PROTOLIST((pid_t, int *)));
#ifndef _WIN32
   TET_IMPORT_FUNC(int, tet_exec, TET_PROTOLIST((char *, char *[], char *[])));
   TET_IMPORT_FUNC(int, tet_fork,
	TET_PROTOLIST((void (*) TET_PROTOLIST((void)),
	void (*) TET_PROTOLIST((void)), int, int)));
#endif /* !_WIN32 */

/* functions only in Distributed TETware */
#ifndef TET_LITE /* -START-LITE-CUT- */
   TET_IMPORT_FUNC(int, tet_getsysbyid,
	TET_PROTOLIST((int, struct tet_sysent *)));
   TET_IMPORT_FUNC(int, tet_msync,
	TET_PROTOLIST((long, int *, int, struct tet_synmsg *)));
   TET_IMPORT_FUNC(int, tet_remsync,
	TET_PROTOLIST((long, int *, int, int, int, struct tet_synmsg *)));
   TET_IMPORT_FUNC(int, tet_remtime, TET_PROTOLIST((int, time_t *)));
   TET_IMPORT_FUNC(int, tet_sync, TET_PROTOLIST((long, int *, int)));
   TET_IMPORT_FUNC(void, tet_syncreport,
	TET_PROTOLIST((long, struct tet_syncstat *, int)));
#  if !defined(TET_THREADS) && !defined(TET_POSIX_THREADS)
     TET_IMPORT_FUNC(int, tet_remexec, TET_PROTOLIST((int, char *, char **)));
     TET_IMPORT_FUNC(int, tet_remkill, TET_PROTOLIST((int)));
     TET_IMPORT_FUNC(int, tet_remwait, TET_PROTOLIST((int, int, int *)));
#  endif /* !THREADS */
#endif /* -END-LITE-CUT- */


/* functions only in the Thread-safe API */
#if defined(TET_THREADS) || defined(TET_POSIX_THREADS)
#  ifdef TET_POSIX_THREADS
     TET_IMPORT_FUNC(int, tet_pthread_create,
	TET_PROTOLIST((pthread_t *, pthread_attr_t *,
	void *(*) TET_PROTOLIST((void *)), void *, int)));
     TET_IMPORT_FUNC(int, tet_pthread_join, TET_PROTOLIST((pthread_t, void **)));
     TET_IMPORT_FUNC(int, tet_pthread_detach, TET_PROTOLIST((pthread_t)));
#  else /* !TET_POSIX_THREADS */
#    ifndef _WIN32	/* -WIN32-CUT-LINE- */
       TET_IMPORT_FUNC(int, tet_thr_create,
	TET_PROTOLIST((void *, size_t, void *(*) TET_PROTOLIST((void *)),
	void *, long, thread_t *, int)));
       TET_IMPORT_FUNC(int, tet_thr_join, TET_PROTOLIST((thread_t, void **)));
#    else		/* -START-WIN32-CUT- */
       TET_IMPORT_FUNC(unsigned long, tet_beginthreadex,
	(void *, unsigned int, unsigned int (__stdcall *) (void *), void *,
	unsigned int, unsigned int *, int));
#    endif		/* -END-WIN32-CUT- */
#  endif /* !TET_POSIX_THREADS */
#  ifndef _WIN32
     TET_IMPORT_FUNC(int, tet_fork1,
	TET_PROTOLIST((void (*) TET_PROTOLIST((void)),
	void (*) TET_PROTOLIST((void)), int, int)));
#  endif /* !_WIN32 */
#endif /* THREADS */

/*
**	declarations of public data items provided by the API
*/

/* the following are imported from the API library */
#if defined(TET_THREADS) || defined(TET_POSIX_THREADS)
#  ifndef _WIN32
#    define tet_child (*tet_thr_child())
     TET_IMPORT_FUNC(pid_t *, tet_thr_child, TET_PROTOLIST((void)));
#  endif /* !_WIN32 */
#  define tet_errno (*tet_thr_errno())
   TET_IMPORT_FUNC(int *, tet_thr_errno, TET_PROTOLIST((void)));
#else /* !THREADS */
#  ifndef _WIN32
     TET_IMPORT_DATA(pid_t, tet_child);
#  endif /* !_WIN32 */
   TET_IMPORT_DATA(int, tet_errno);
#endif /* !THREADS */

TET_IMPORT_ARRAY(char *, tet_errlist, []);
TET_IMPORT_DATA(int, tet_nerr);
#ifndef TET_LITE /* -START-LITE-CUT- */
  TET_IMPORT_FUNC_PTR(void, tet_syncerr,
	TET_PROTOLIST((long, struct tet_syncstat *, int)));
#endif /* -END-LITE-CUT- */

/* the following are in the TCM */
extern int tet_nosigreset;

/* the following are in the TCM and must be "exported" to the API library */
TET_EXPORT_DATA(char *, tet_pname);
TET_EXPORT_DATA(int, tet_thistest);


/*
**	definitions used by the interface between the TCM and the test case
**
**	these items must be provided by the user
*/

/* the test case startup and cleanup functions */
extern void (*tet_startup)();
extern void (*tet_cleanup)();

/* and EITHER this data structure */
struct tet_testlist {
	void (*testfunc)();
	int icref;
};
extern struct tet_testlist tet_testlist[];

/* OR all of these test case interface functions */
extern int tet_getmaxic TET_PROTOLIST((void));
extern int tet_getminic TET_PROTOLIST((void));
extern int tet_gettestnum TET_PROTOLIST((int, int));
extern int tet_gettpcount TET_PROTOLIST((int));
extern int tet_invoketp TET_PROTOLIST((int, int));
extern int tet_isdefic TET_PROTOLIST((int));


/*
**	definition of the interface between an executed program and the
**	child process controller
**
**	this item must be provided by the user
*/

extern int tet_main TET_PROTOLIST((int, char *[]));


#ifdef __cplusplus
}
#endif

#endif /* TET_API_H_INCLUDED */


--- NEW FILE: tet_api.h.orig ---
/*
 *	SCCS: @(#)tet_api.h	1.28 (98/08/28)
 *
 *	UniSoft Ltd., London, England
 *
 * (C) Copyright 1996 X/Open Company Limited
 *
 * All rights reserved.  No part of this source code may be reproduced,
 * stored in a retrieval system, or transmitted, in any form or by any
 * means, electronic, mechanical, photocopying, recording or otherwise,
 * except as stated in the end-user licence agreement, without the prior
 * permission of the copyright owners.
 * A copy of the end-user licence agreement is contained in the file
 * Licence which accompanies this distribution.
 * 
 * X/Open and the 'X' symbol are trademarks of X/Open Company Limited in
 * the UK and other countries.
 */

/*
 * Copyright 1990 Open Software Foundation (OSF)
 * Copyright 1990 Unix International (UI)
 * Copyright 1990 X/Open Company Limited (X/Open)
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted, provided
 * that the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of OSF, UI or X/Open not be used in 
 * advertising or publicity pertaining to distribution of the software 
 * without specific, written prior permission.  OSF, UI and X/Open make 
 * no representations about the suitability of this software for any purpose.  
 * It is provided "as is" without express or implied warranty.
 *
 * OSF, UI and X/Open DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 
 * EVENT SHALL OSF, UI or X/Open BE LIABLE FOR ANY SPECIAL, INDIRECT OR 
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 
 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 
 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
 * PERFORMANCE OF THIS SOFTWARE.
 */

/************************************************************************

SCCS:   	@(#)tet_api.h	1.28 98/08/28 TETware release 3.3
NAME:		'C' API header
PRODUCT:	TETware
AUTHOR:		Geoff Clare, UniSoft Ltd.
DATE CREATED:	23 July 1990
CONTENTS:

	struct tet_testlist definition
	result code values for use with tet_result()
	TET_NULLFP null function pointer for use with tet_fork()
	declarations/prototypes for all API interfaces

MODIFICATIONS:

	Geoff Clare, UniSoft Ltd., 10 Oct 1990
		Remove const keywords.

	Geoff Clare, UniSoft Ltd., 18 Oct 1990
		Add tet_pname.

	Geoff Clare, UniSoft Ltd., 28 Nov 1990
		Add tet_nosigreset.

	Geoff Clare, UniSoft Ltd., 21 June 1991
		Make tet_fork() prototype consistent with definition.

	DTET development - this file is derived from TET Release 1.10
	David G. Sawyer
	John-Paul Leyland
	UniSoft Ltd, June 1992

	Andrew Dingwall, UniSoft Ltd., October 1992
	Added DTET API function declarations.

	Denis McConalogue, UniSoft Limited, September 1993
	changed prototype for tet_sync()

	Andrew Dingwall, UniSoft Ltd., February 1994
	removed comment from #include line (for strict ANSI compliance?)

	Andrew Dingwall, UniSoft Ltd., October 1994
	added support for tet_msync() API function

	Geoff Clare, UniSoft Ltd., July 1996
	Changes for TETWare.

	Geoff Clare, UniSoft Ltd., Sept 1996
	Changes for TETWare-Lite and POSIX threads.

	Andrew Dingwall, UniSoft Ltd., June 1997
	changes to support the defined test case interface

	Geoff Clare, UniSoft Ltd., June 1997
	Changes for NT threads.

	Andrew Dingwall, UniSoft Ltd., December 1997
	protect against multiple inclusion

	Andrew Dingwall, UniSoft Ltd., August 1998
	Added support for shared libraries.

************************************************************************/

#ifndef TET_API_H_INCLUDED
#define TET_API_H_INCLUDED

#ifdef __cplusplus
extern "C" {
#endif


/*
** support for shared API libraries on Win32 systems
*/


   /* not using a shared API library on a Win32 system */
#  ifndef TET_IMPORT
#    define TET_IMPORT
#  endif


#ifndef TET_EXPORT
#  define TET_EXPORT
#endif

/*
** TET_EXPORT_DATA is used to declare a data item that is exported from
** a program to a shared library.
** TET_IMPORT_DATA, TET_IMPORT_ARRAY, TET_IMPORT_FUNC and TET_IMPORT_FUNC_PTR
** are used to declare a data item, array, function or function pointer that
** is imported by a program from a shared library.
** Definitions used when compiling TETware source files appear in dtmac.h.
** These definitions are sufficient for user-level code.
*/
#ifndef TET_EXPORT_DATA
#  define TET_EXPORT_DATA(TYPE, NAME) \
	TET_EXPORT extern TYPE NAME
#endif
#ifndef TET_IMPORT_DATA
#  define TET_IMPORT_DATA(TYPE, NAME) \
	TET_IMPORT extern TYPE NAME
#endif
#ifndef TET_IMPORT_ARRAY
#  define TET_IMPORT_ARRAY(TYPE, NAME, DIM) \
	TET_IMPORT extern TYPE NAME DIM
#endif
#ifndef TET_IMPORT_FUNC
#  define TET_IMPORT_FUNC(TYPE, NAME, ARGS) \
	TET_IMPORT extern TYPE NAME ARGS
#endif
#ifndef TET_IMPORT_FUNC_PTR
#  define TET_IMPORT_FUNC_PTR(TYPE, NAME, ARGS) \
	TET_IMPORT extern TYPE (*NAME) ARGS
#endif

/* the following are needed for types used in declarations */
#include <sys/types.h>
#define TET_PID_T_DEFINED
#if defined(__STDC__) || defined(__cplusplus) || defined(_WIN32)
#  include <time.h>
#  include <stdarg.h>
#endif
#ifdef TET_POSIX_THREADS
#  include <pthread.h>
#else /* !TET_POSIX_THREADS */
#  ifdef TET_THREADS
#    ifndef _WIN32
#      include <thread.h>
#    endif
#  endif /* TET_THREADS */
#endif /* !TET_POSIX_THREADS */


/* values of the standard result codes - may be passed to tet_result() */
#define TET_PASS	0
#define TET_FAIL	1
#define TET_UNRESOLVED	2
#define TET_NOTINUSE	3
#define TET_UNSUPPORTED	4
#define TET_UNTESTED	5
#define TET_UNINITIATED	6
#define TET_NORESULT	7


/* tet_errno values, may be used to index into tet_errlist[] */
#define TET_ER_OK		0	/* ok  success */
#define TET_ER_ERR		1	/* general error code */
#define TET_ER_MAGIC		2	/* bad magic number */
#define TET_ER_LOGON		3	/* not logged on */
#define TET_ER_RCVERR		4	/* receive message error */
#define TET_ER_REQ		5	/* unknown request code */
#define TET_ER_TIMEDOUT		6	/* request timed out */
#define TET_ER_DUPS		7	/* request contained duplicate IDs */
#define TET_ER_SYNCERR		8	/* sync completed unsuccessfully */
#define TET_ER_INVAL		9	/* invalid request parameter */
#define TET_ER_TRACE		10	/* tracing not configured */
#define TET_ER_WAIT		11	/* process not terminated */
#define TET_ER_XRID		12	/* bad xrid in xresd request */
#define TET_ER_SNID		13	/* bad snid in syncd request */
#define TET_ER_SYSID		14	/* sysid not in system name list */
#define TET_ER_INPROGRESS	15	/* event in progress */
#define TET_ER_DONE		16	/* event finished or already happened */
#define TET_ER_CONTEXT		17	/* request out of context */
#define TET_ER_PERM		18	/* priv request/kill error */
#define TET_ER_FORK		19	/* can't fork */
#define TET_ER_NOENT		20	/* no such file or directory */
#define TET_ER_PID		21	/* no such process */
#define TET_ER_SIGNUM		22	/* bad signal number */
#define TET_ER_FID		23	/* bad file id */
#define TET_ER_INTERN		24	/* server internal error */
#define TET_ER_ABORT		25	/* abort TCM on TP end */
#define TET_ER_2BIG		26	/* argument list too long */


/*
**	function prototype macros
*/

#if defined(__STDC__) || defined(__cplusplus) || defined(_WIN32)
#  ifndef TET_PROTOTYPES
#    define TET_PROTOTYPES
#  endif
#endif

#ifdef TET_PROTOTYPES
#  define TET_PROTOLIST(list)	list
#else
#  define TET_PROTOLIST(list)	()
#endif


/* NULL function pointer - may be used as an argument to tet_fork() */
#define TET_NULLFP	((void (*) ()) 0)


#ifndef TET_LITE /* -START-LITE-CUT- */

   /*
   ** sync requests and sync error reporting
   */

   /* structure used in tet_msync() and tet_remsync() calls */
   struct tet_synmsg {
   	char *tsm_data;	/* ptr to sync message data buffer */
   	int tsm_dlen;	/* no of bytes in sm_data */
   	int tsm_sysid;	/* id of system sending sync message data */
   	int tsm_flags;	/* flags - see below */
   };

   /* values for tsm_flags (a bit field) */
#  define TET_SMSNDMSG	001	/* system is sending message data */
#  define TET_SMRCVMSG	002	/* system is receiving message data */
#  define TET_SMDUP	004	/* more than one system attempted to send */
#  define TET_SMTRUNC	010	/* message data was truncated */

#  define TET_SMMSGMAX	1024	/* maximum size of a tet_msync message -
   				   size must be expressable in 12 bits
   				   (see ST_COUNTMASK in ldst.h) */

   /* sync votes */
#  define TET_SV_YES		1
#  define TET_SV_NO		2

   /* structure of an element in the array describing sync status
      that is passed by the API to the sync error reporting function */
   struct tet_syncstat {
   	int tsy_sysid;	/* system ID */
   	int tsy_state;	/* sync state */
   };

   /* values for tsy_state */
#  define TET_SS_NOTSYNCED	1	/* sync request not received */
#  define TET_SS_SYNCYES	2	/* system voted YES */
#  define TET_SS_SYNCNO		3	/* system voted NO */
#  define TET_SS_TIMEDOUT	4	/* system timed out */
#  define TET_SS_DEAD		5	/* process exited */


   /* structure of the data item that is filled in by tet_getsysbyid() */
#  define TET_SNAMELEN	32		/* maximum system name length */
   struct tet_sysent {
   	int ts_sysid;			/* system ID */
   	char ts_name[TET_SNAMELEN];	/* system name */
   };

#endif /* -END-LITE-CUT- */


/*
**	declarations of public functions provided by the API
*/

/* functions in TETware-Lite and in Distrubuted TETware */
TET_IMPORT_FUNC(void, tet_delete, TET_PROTOLIST((int, char *)));
TET_IMPORT_FUNC(void, tet_exit, TET_PROTOLIST((int)));
TET_IMPORT_FUNC(char *, tet_getvar, TET_PROTOLIST((char *)));
TET_IMPORT_FUNC(void, tet_infoline,  TET_PROTOLIST((char *)));
TET_IMPORT_FUNC(int, tet_kill, TET_PROTOLIST((pid_t, int)));
TET_IMPORT_FUNC(void, tet_logoff, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(int, tet_minfoline, TET_PROTOLIST((char **, int)));
TET_IMPORT_FUNC(int, tet_printf, TET_PROTOLIST((char *, ...)));
TET_IMPORT_FUNC(char *, tet_reason, TET_PROTOLIST((int)));
TET_IMPORT_FUNC(int, tet_remgetlist, TET_PROTOLIST((int **)));
TET_IMPORT_FUNC(int, tet_remgetsys, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(void, tet_result, TET_PROTOLIST((int)));
TET_IMPORT_FUNC(void, tet_setblock, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(void, tet_setcontext, TET_PROTOLIST((void)));
TET_IMPORT_FUNC(pid_t, tet_spawn, TET_PROTOLIST((char *, char **, char **)));
TET_IMPORT_FUNC(int, tet_vprintf, TET_PROTOLIST((char *, va_list)));
TET_IMPORT_FUNC(int, tet_wait, TET_PROTOLIST((pid_t, int *)));
#ifndef _WIN32
   TET_IMPORT_FUNC(int, tet_exec, TET_PROTOLIST((char *, char *[], char *[])));
   TET_IMPORT_FUNC(int, tet_fork,
	TET_PROTOLIST((void (*) TET_PROTOLIST((void)),
	void (*) TET_PROTOLIST((void)), int, int)));
#endif /* !_WIN32 */

/* functions only in Distributed TETware */
#ifndef TET_LITE /* -START-LITE-CUT- */
   TET_IMPORT_FUNC(int, tet_getsysbyid,
	TET_PROTOLIST((int, struct tet_sysent *)));
   TET_IMPORT_FUNC(int, tet_msync,
	TET_PROTOLIST((long, int *, int, struct tet_synmsg *)));
   TET_IMPORT_FUNC(int, tet_remsync,
	TET_PROTOLIST((long, int *, int, int, int, struct tet_synmsg *)));
   TET_IMPORT_FUNC(int, tet_remtime, TET_PROTOLIST((int, time_t *)));
   TET_IMPORT_FUNC(int, tet_sync, TET_PROTOLIST((long, int *, int)));
   TET_IMPORT_FUNC(void, tet_syncreport,
	TET_PROTOLIST((long, struct tet_syncstat *, int)));
#  if !defined(TET_THREADS) && !defined(TET_POSIX_THREADS)
     TET_IMPORT_FUNC(int, tet_remexec, TET_PROTOLIST((int, char *, char **)));
     TET_IMPORT_FUNC(int, tet_remkill, TET_PROTOLIST((int)));
     TET_IMPORT_FUNC(int, tet_remwait, TET_PROTOLIST((int, int, int *)));
#  endif /* !THREADS */
#endif /* -END-LITE-CUT- */

/* functions only in the Thread-safe API */
#if defined(TET_THREADS) || defined(TET_POSIX_THREADS)
#  ifdef TET_POSIX_THREADS
     TET_IMPORT_FUNC(int, tet_pthread_create,
	TET_PROTOLIST((pthread_t *, pthread_attr_t *,
	void *(*) TET_PROTOLIST((void *)), void *, int)));
#  else /* !TET_POSIX_THREADS */
       TET_IMPORT_FUNC(int, tet_thr_create,
	TET_PROTOLIST((void *, size_t, void *(*) TET_PROTOLIST((void *)),
	void *, long, thread_t *, int)));
#  endif /* !TET_POSIX_THREADS */
#  ifndef _WIN32
     TET_IMPORT_FUNC(int, tet_fork1,
	TET_PROTOLIST((void (*) TET_PROTOLIST((void)),
	void (*) TET_PROTOLIST((void)), int, int)));
#  endif /* !_WIN32 */
#endif /* THREADS */


/*
**	declarations of public data items provided by the API
*/

/* the following are imported from the API library */
#if defined(TET_THREADS) || defined(TET_POSIX_THREADS)
#  ifndef _WIN32
#    define tet_child (*tet_thr_child())
     TET_IMPORT_FUNC(pid_t *, tet_thr_child, TET_PROTOLIST((void)));
#  endif /* !_WIN32 */
#  define tet_errno (*tet_thr_errno())
   TET_IMPORT_FUNC(int *, tet_thr_errno, TET_PROTOLIST((void)));
#else /* !THREADS */
#  ifndef _WIN32
     TET_IMPORT_DATA(pid_t, tet_child);
#  endif /* !_WIN32 */
   TET_IMPORT_DATA(int, tet_errno);
#endif /* !THREADS */

TET_IMPORT_ARRAY(char *, tet_errlist, []);
TET_IMPORT_DATA(int, tet_nerr);
#ifndef TET_LITE /* -START-LITE-CUT- */
  TET_IMPORT_FUNC_PTR(void, tet_syncerr,
	TET_PROTOLIST((long, struct tet_syncstat *, int)));
#endif /* -END-LITE-CUT- */

/* the following are in the TCM */
extern int tet_nosigreset;

/* the following are in the TCM and must be "exported" to the API library */
TET_EXPORT_DATA(char *, tet_pname);
TET_EXPORT_DATA(int, tet_thistest);


/*
**	definitions used by the interface between the TCM and the test case
**
**	these items must be provided by the user
*/

/* the test case startup and cleanup functions */
extern void (*tet_startup)();
extern void (*tet_cleanup)();

/* and EITHER this data structure */
struct tet_testlist {
	void (*testfunc)();
	int icref;
};
extern struct tet_testlist tet_testlist[];

/* OR all of these test case interface functions */
extern int tet_getmaxic TET_PROTOLIST((void));
extern int tet_getminic TET_PROTOLIST((void));
extern int tet_gettestnum TET_PROTOLIST((int, int));
extern int tet_gettpcount TET_PROTOLIST((int));
extern int tet_invoketp TET_PROTOLIST((int, int));
extern int tet_isdefic TET_PROTOLIST((int));


/*
**	definition of the interface between an executed program and the
**	child process controller
**
**	this item must be provided by the user
*/

extern int tet_main TET_PROTOLIST((int, char *[]));


#ifdef __cplusplus
}
#endif

#endif /* TET_API_H_INCLUDED */




More information about the xorg-test-commit mailing list