Milán Major

netscape-revival

1 branch
Code

sun-java/include/sys_api.h

/*
 * @(#)sys_api.h	1.39 95/10/25  
 *
 * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */

/*
 * System or Host dependent API.  This defines the "porting layer" for
 * POSIX.1 compliant operating systems.
 */

#ifndef _SYS_API_H_
#define _SYS_API_H_

/*
 * typedefs_md.h includes basic types for this platform;
 * any macros for HPI functions have been moved to "sysmacros_md.h"
 */
#include "typedefs_md.h"

/*
 * Some platforms, notably Windows, require that extra keywords
 * be prepended for things that can be called from other libs.
 * The default is just to declare things "extern".
 */
#ifndef EXPORTED
#define EXPORTED extern
#endif

/*
 * Miscellaneous system utility APIs that fall outside the POSIX.1
 * spec.
 *
 * Until POSIX (P1003.1a) formerly P.4 is standard, we'll use our
 * time struct definitions found in timeval.h.
 */
#include "timeval.h"
EXPORTED long 	sysGetMilliTicks(void);
EXPORTED long    sysTime(long *);
EXPORTED int64_t sysTimeMillis(void);

#include <time.h>
EXPORTED struct tm * sysLocaltime(time_t *, struct tm*);
EXPORTED struct tm * sysGmtime(time_t *, struct tm*);
EXPORTED void sysStrftime(char *, int, char *, struct tm *);
EXPORTED time_t sysMktime(struct tm*);

/*
 * System API for general allocations
 */
EXPORTED void *	sysMalloc(size_t);
EXPORTED void *	sysRealloc(void*, size_t);
EXPORTED void	sysFree(void*);
EXPORTED void *	sysCalloc(size_t, size_t);

/*
 * System API for dynamic linking libraries into the interpreter
 */
EXPORTED char * sysInitializeLinker(void);
EXPORTED int    sysAddDLSegment(char *);
EXPORTED void   sysSaveLDPath(char *);
EXPORTED long   sysDynamicLink(char *, void* *lib);
EXPORTED void	sysBuildLibName(char *, int, char *, char *);

/*
 * System API for threads
 */
typedef struct   sys_thread sys_thread_t;
typedef struct   sys_mon sys_mon_t;
typedef void   * stackp_t;

EXPORTED int 	 sysThreadBootstrap(sys_thread_t **);
EXPORTED void 	 sysThreadInitializeSystemThreads(void);
EXPORTED int 	 sysThreadCreate(long, uint_t flags, 
				     void *(*)(void *), 
				     sys_thread_t **,
	 			     void *);
EXPORTED  void	 sysThreadExit(void);
EXPORTED  sys_thread_t * sysThreadSelf(void);
EXPORTED  void	 sysThreadYield(void);
EXPORTED  int	 sysThreadSuspend(sys_thread_t *);
EXPORTED  int	 sysThreadResume(sys_thread_t *);
EXPORTED  int	 sysThreadSetPriority(sys_thread_t *, int32_t);
EXPORTED  int	 sysThreadGetPriority(sys_thread_t *, int32_t *);
EXPORTED  void * sysThreadStackPointer(sys_thread_t *); 
EXPORTED  stackp_t sysThreadStackBase(sys_thread_t *); 
EXPORTED  int	 sysThreadSingle(void);
EXPORTED  void	 sysThreadMulti(void);
EXPORTED  int    sysThreadEnumerateOver(int (*)(sys_thread_t *, void *), void *);
EXPORTED  void	 sysThreadInit(sys_thread_t *, stackp_t);
EXPORTED  void	 sysThreadSetBackPtr(sys_thread_t *, void *);
EXPORTED  void * sysThreadGetBackPtr(sys_thread_t *);
EXPORTED  int    sysThreadCheckStack(void);
EXPORTED  int    sysInterruptsPending(void);
EXPORTED  void	 sysThreadPostException(sys_thread_t *, void *);
JAVA_PUBLIC_API(void)	 sysThreadDumpInfo(sys_thread_t *, FILE*);

/*
 * System API for monitors
 */
EXPORTED int     sysMonitorSizeof(void);
EXPORTED int     sysMonitorInit(sys_mon_t *, bool_t);
EXPORTED int     sysMonitorEnter(sys_mon_t *);
EXPORTED bool_t  sysMonitorEntered(sys_mon_t *);
EXPORTED int     sysMonitorExit(sys_mon_t *);
EXPORTED int     sysMonitorNotify(sys_mon_t *);
EXPORTED int     sysMonitorNotifyAll(sys_mon_t *);
EXPORTED int 	 sysMonitorWait(sys_mon_t *, int);
EXPORTED int	 sysMonitorDestroy(sys_mon_t *, sys_thread_t *);
EXPORTED void    sysMonitorDumpInfo(sys_mon_t *);

#define SYS_OK	        0
#define SYS_TIMEOUT     1
#define SYS_ERR	       -1
#define SYS_INVALID    -2    /* invalid arguments */
#define SYS_NOTHREAD   -3    /* no such thread */
#define SYS_MINSTACK   -4    /* supplied stack size less than min stack size */
#define SYS_NOMEM      -5
#define SYS_NORESOURCE -6
#define SYS_DESTROY    -7

/*
 * System API for raw memory allocation
 */
EXPORTED void * sysMapMem(long, long *);
EXPORTED void * sysUnmapMem(void *, long, long *);
EXPORTED void * sysCommitMem(void *, long, long *);
EXPORTED void * sysUncommitMem(void *, long, long *);

/*
 * System API for termination
 */
EXPORTED void sysExit(int);
EXPORTED int sysAtexit(void (*func)(void));
EXPORTED void sysAbort(void);

/*
 * System API for filesystem access
 */
EXPORTED int sysOpen(const char *name, int flags, int mode);
EXPORTED long sysRead(int fd, void *buf, long amount);
EXPORTED long sysWrite(int fd, const void *buf, long amount);
EXPORTED long sysSeek(int fd, long offset, int whence);
EXPORTED void sysClose(int fd);

EXPORTED int sysAccess(const char *path, int mode);
struct stat;
EXPORTED int sysStat(const char *path, struct stat *buf);
EXPORTED int sysIsAbsolute(const char *path);
EXPORTED int sysMkdir(const char *path, int mode);
EXPORTED int sysUnlink(const char *path);

/*
 * Include platform specific macros to override these
 */
#include "sysmacros_md.h"
 
#endif /* !_SYS_API_H_ */