ppr/include/ppr_base.h

231 lines
5.2 KiB
C
Raw Permalink Normal View History

2026-04-12 23:06:29 +09:00
#ifndef __PPR_BASE_H__
#define __PPR_BASE_H__
#include <ppr_machdep.h>
/* poll.c definitions */
#define PPR_POLLIN (1 << 0)
#define PPR_POLLPRI (1 << 1)
#define PPR_POLLOUT (1 << 2)
struct ppr_pollfd {
int fd;
short events;
short revents;
void* user;
};
/* file.c definitions */
typedef void PPR_FILE;
/* socket.c definitions */
enum ppr_socket_protocol {
PPR_PF_UNSPEC = 0,
PPR_PF_INET,
PPR_PF_INET6,
PPR_PF_UNIX
};
enum ppr_socket_address {
PPR_AF_UNSPEC = 0,
PPR_AF_INET,
PPR_AF_INET6,
PPR_AF_UNIX
};
enum ppr_socket_type {
PPR_SOCK_STREAM = 0,
PPR_SOCK_DGRAM
};
enum ppr_socket_ip_protocol {
PPR_IPPROTO_TCP = 1,
PPR_IPPROTO_UDP
};
struct ppr_sockaddr {
unsigned short sa_family;
char sa_data[14];
};
union ppr_in_addr_union {
ppr_uint8_t addr8[4];
ppr_uint16_t addr16[2];
ppr_uint32_t addr32[1];
};
struct ppr_in_addr {
union ppr_in_addr_union u;
};
struct ppr_sockaddr_in {
unsigned short sin_family;
ppr_uint16_t sin_port;
struct ppr_in_addr sin_addr;
};
union ppr_in6_addr_union {
ppr_uint8_t addr8[16];
ppr_uint16_t addr16[8];
ppr_uint32_t addr32[4];
};
struct ppr_in6_addr {
union ppr_in6_addr_union u;
};
struct ppr_sockaddr_in6 {
unsigned short sin6_family;
ppr_uint16_t sin6_port;
struct ppr_in6_addr sin6_addr;
};
struct ppr_sockaddr_storage {
unsigned short ss_family;
char ss_pad[128];
};
struct ppr_sockaddr_un {
unsigned short sun_family;
char sun_path[104];
};
/* stat.c definitions */
#define PPR_S_IFREG (1 << 0)
#define PPR_S_IFDIR (1 << 1)
#define PPR_S_ISREG(x) ((x) & PPR_S_IFREG)
#define PPR_S_ISDIR(x) ((x) & PPR_S_IFDIR)
struct ppr_stat {
ppr_size_t st_size;
ppr_time_t st_modtime;
int st_mode;
};
/* dirent.c definitions */
typedef void PPR_DIR;
struct ppr_dirent {
char d_name[512];
char d_fullname[1024];
struct ppr_stat d_stat;
};
/* time.c definitions */
struct ppr_tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
/* thread.c definitions */
#if defined(PPR_IS_NETWARE)
struct ppr_semaphore_usage {
long sem;
ppr_bool used;
};
#endif
/* core.c */
void ppr_init(void);
void ppr_uninit(void);
/* poll.c */
int ppr_poll(struct ppr_pollfd* fds, int nfds, int timeout);
/* file.c */
PPR_FILE* ppr_fopen(const char* path, const char* mode);
int ppr_fread(void* ptr, int size, int nmemb, PPR_FILE* stream);
int ppr_fwrite(const void* ptr, int size, int nmemb, PPR_FILE* stream);
void ppr_fclose(PPR_FILE* stream);
/* socket.c */
extern struct ppr_in_addr ppr_inaddr_any;
extern struct ppr_in6_addr ppr_in6addr_any;
void ppr_socket_init(void);
int ppr_socket(int domain, int type, int protocol);
int ppr_recv(int s, void* buf, int len, int flags);
int ppr_send(int s, const void* msg, int len, int flags);
int ppr_bind(int s, const struct ppr_sockaddr* name, int namelen);
int ppr_connect(int s, const struct ppr_sockaddr* name, int namelen);
int ppr_listen(int s, int backlog);
int ppr_accept(int s, struct ppr_sockaddr* addr, int* addrlen);
void ppr_socket_close(int d);
void ppr_socket_uninit(void);
ppr_bool ppr_socket_has_ipv6(void);
/* arpa.c */
ppr_uint16_t ppr_htons(ppr_uint16_t host16);
const char* ppr_inet_ntop(struct ppr_sockaddr* src, char* dst);
struct ppr_sockaddr* ppr_inet_addr(const char* addr, int* len);
/* string.c */
char* ppr_strdup(const char* str);
char* ppr_strvacat(const char* a, ...);
void ppr_strappend(char** dst, const char* src);
char* ppr_strsafehtml(const char* s);
/* dlfcn.c */
void* ppr_dlopen(const char* path);
void* ppr_dlsym(void* handle, const char* symbol);
int ppr_dlclose(void* handle);
/* unistd.c */
int ppr_gethostname(char* name, int namelen);
void ppr_msleep(int ms);
/* stat.c */
int ppr_stat(const char* path, struct ppr_stat* s);
/* thread.c */
#if defined(PPR_IS_NETWARE)
extern struct ppr_semaphore_usage ppr_semaphores[];
long ppr_thread_open_semaphore(long initial);
void ppr_thread_close_semaphore(long sem);
#endif
void* ppr_thread_create(void (*entry)(void* param), void* param);
void ppr_thread_join(void* handle);
void ppr_thread_destroy(void* handle);
void ppr_thread_init(void);
void ppr_thread_uninit(void);
/* mutex.c */
void* ppr_mutex_create(void);
void ppr_mutex_lock(void* handle);
void ppr_mutex_unlock(void* handle);
void ppr_mutex_destroy(void* handle);
/* process.c */
void* ppr_process_create(const char* exec, char** env);
void ppr_process_close(void* handle);
int ppr_process_write(void* handle, const void* data, int len);
int ppr_process_read(void* handle, void* data, int len);
2026-05-13 15:02:13 +09:00
int ppr_process_readable(void* handle);
2026-04-12 23:06:29 +09:00
void ppr_process_destroy(void* handle);
/* dirent.c */
PPR_DIR* ppr_opendir(const char* path);
struct ppr_dirent* ppr_readdir(PPR_DIR* handle);
void ppr_closedir(PPR_DIR* handle);
int ppr_scandir(const char* dirname, struct ppr_dirent*** namelist, int (*selectfn)(const struct ppr_dirent* d), int (*compar)(const struct ppr_dirent** d1, const struct ppr_dirent** d2));
int ppr_alphasort(const struct ppr_dirent** d1, const struct ppr_dirent** d2);
/* time.c */
extern void* ppr_gmtime_mutex;
extern void* ppr_localtime_mutex;
ppr_time_t ppr_time(void);
void ppr_gmtime(struct ppr_tm* tm, ppr_time_t t);
void ppr_localtime(struct ppr_tm* tm, ppr_time_t t);
#endif