blob: e8284335bcf2519d7120f9559c13c7c85523299b [file] [log] [blame]
/****************************************************************************
* *
* GNAT SYSTEM UTILITIES *
* *
* G E N - S O C C O N *
* *
* Copyright (C) 2004-2005, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
* ware Foundation; either version 2, or (at your option) any later ver- *
* sion. GNAT is distributed in the hope that it will be useful, but WITH- *
* OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
* for more details. You should have received a copy of the GNU General *
* Public License distributed with GNAT; see file COPYING. If not, write *
* to the Free Software Foundation, 51 Franklin Street, Fifth Floor, *
* Boston, MA 02110-1301, USA. *
* *
* GNAT was originally developed by the GNAT team at New York University. *
* Extensive contributions were provided by Ada Core Technologies Inc. *
* *
****************************************************************************/
/* This program generates g-soccon.ads */
/* To build using DEC C:
CC/DEFINE="TARGET=""OpenVMS""" gen-soccon
LINK gen-soccon
RUN gen-soccon
*/
#ifndef TARGET
# error Please define TARGET
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#ifdef __MINGW32__
#include <fcntl.h>
#endif
#include "gsocket.h"
struct line {
char *text;
char *value;
char *comment;
struct line *next;
};
struct line *first = NULL, *last = NULL;
#define TXT(_text) add_line(_text, NULL, NULL);
/* Plain text */
#define _NL TXT("")
/* Empty line */
#define itoad(n) f_itoa ("%d", (n))
#define itoax(n) f_itoa ("16#%08x#", (n))
#define CND(name,comment) add_line(#name, itoad (name), comment);
/* Constant (decimal) */
#define CNX(name,comment) add_line(#name, itoax (name), comment);
/* Constant (hexadecimal) */
#define CN_(name,comment) add_line(#name, name, comment);
/* Constant (generic) */
#define STR(p) STR1(p)
#define STR1(p) #p
void output (void);
/* Generate output spec */
char *f_itoa (char *, int);
/* int to string */
void add_line (char *, char*, char*);
#ifdef __MINGW32__
unsigned int _CRT_fmode = _O_BINARY;
#endif
int
main (void) {
TXT("------------------------------------------------------------------------------")
TXT("-- --")
TXT("-- GNAT COMPILER COMPONENTS --")
TXT("-- --")
TXT("-- G N A T . S O C K E T S . C O N S T A N T S --")
TXT("-- --")
TXT("-- S p e c --")
TXT("-- --")
TXT("-- Copyright (C) 2000-2005, Free Software Foundation, Inc. --")
TXT("-- --")
TXT("-- GNAT is free software; you can redistribute it and/or modify it under --")
TXT("-- terms of the GNU General Public License as published by the Free Soft- --")
TXT("-- ware Foundation; either version 2, or (at your option) any later ver- --")
TXT("-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --")
TXT("-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --")
TXT("-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --")
TXT("-- for more details. You should have received a copy of the GNU General --")
TXT("-- Public License distributed with GNAT; see file COPYING. If not, write --")
TXT("-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --")
TXT("-- Boston, MA 02110-1301, USA. --")
TXT("-- --")
TXT("-- As a special exception, if other files instantiate generics from this --")
TXT("-- unit, or you link this unit with other files to produce an executable, --")
TXT("-- this unit does not by itself cause the resulting executable to be --")
TXT("-- covered by the GNU General Public License. This exception does not --")
TXT("-- however invalidate any other reasons why the executable file might be --")
TXT("-- covered by the GNU Public License. --")
TXT("-- --")
TXT("-- GNAT was originally developed by the GNAT team at New York University. --")
TXT("-- Extensive contributions were provided by Ada Core Technologies Inc. --")
TXT("-- --")
TXT("------------------------------------------------------------------------------")
_NL
TXT("-- This package provides target dependent definitions of constant for use")
TXT("-- by the GNAT.Sockets package (g-socket.ads). This package should not be")
TXT("-- directly with'ed by an applications program.")
_NL
TXT("-- This is the version for " TARGET)
TXT("-- This file is generated automatically, do not modify it by hand! Instead,")
TXT("-- make changes to gen-soccon.c and re-run it on each target.")
_NL
TXT("package GNAT.Sockets.Constants is")
_NL
TXT(" --------------")
TXT(" -- Families --")
TXT(" --------------")
_NL
#ifndef AF_INET
#define AF_INET -1
#endif
CND(AF_INET, "IPv4 address family")
#ifndef AF_INET6
#define AF_INET6 -1
#endif
CND(AF_INET6, "IPv6 address family")
_NL
TXT(" -----------")
TXT(" -- Modes --")
TXT(" -----------")
_NL
#ifndef SOCK_STREAM
#define SOCK_STREAM -1
#endif
CND(SOCK_STREAM, "Stream socket")
#ifndef SOCK_DGRAM
#define SOCK_DGRAM -1
#endif
CND(SOCK_DGRAM, "Datagram socket")
_NL
TXT(" -------------------")
TXT(" -- Socket errors --")
TXT(" -------------------")
_NL
#ifndef EACCES
#define EACCES -1
#endif
CND(EACCES, "Permission denied")
#ifndef EADDRINUSE
#define EADDRINUSE -1
#endif
CND(EADDRINUSE, "Address already in use")
#ifndef EADDRNOTAVAIL
#define EADDRNOTAVAIL -1
#endif
CND(EADDRNOTAVAIL, "Cannot assign address")
#ifndef EAFNOSUPPORT
#define EAFNOSUPPORT -1
#endif
CND(EAFNOSUPPORT, "Addr family not supported")
#ifndef EALREADY
#define EALREADY -1
#endif
CND(EALREADY, "Operation in progress")
#ifndef EBADF
#define EBADF -1
#endif
CND(EBADF, "Bad file descriptor")
#ifndef ECONNABORTED
#define ECONNABORTED -1
#endif
CND(ECONNABORTED, "Connection aborted")
#ifndef ECONNREFUSED
#define ECONNREFUSED -1
#endif
CND(ECONNREFUSED, "Connection refused")
#ifndef ECONNRESET
#define ECONNRESET -1
#endif
CND(ECONNRESET, "Connection reset by peer")
#ifndef EDESTADDRREQ
#define EDESTADDRREQ -1
#endif
CND(EDESTADDRREQ, "Destination addr required")
#ifndef EFAULT
#define EFAULT -1
#endif
CND(EFAULT, "Bad address")
#ifndef EHOSTDOWN
#define EHOSTDOWN -1
#endif
CND(EHOSTDOWN, "Host is down")
#ifndef EHOSTUNREACH
#define EHOSTUNREACH -1
#endif
CND(EHOSTUNREACH, "No route to host")
#ifndef EINPROGRESS
#define EINPROGRESS -1
#endif
CND(EINPROGRESS, "Operation now in progress")
#ifndef EINTR
#define EINTR -1
#endif
CND(EINTR, "Interrupted system call")
#ifndef EINVAL
#define EINVAL -1
#endif
CND(EINVAL, "Invalid argument")
#ifndef EIO
#define EIO -1
#endif
CND(EIO, "Input output error")
#ifndef EISCONN
#define EISCONN -1
#endif
CND(EISCONN, "Socket already connected")
#ifndef ELOOP
#define ELOOP -1
#endif
CND(ELOOP, "Too many symbolic lynks")
#ifndef EMFILE
#define EMFILE -1
#endif
CND(EMFILE, "Too many open files")
#ifndef EMSGSIZE
#define EMSGSIZE -1
#endif
CND(EMSGSIZE, "Message too long")
#ifndef ENAMETOOLONG
#define ENAMETOOLONG -1
#endif
CND(ENAMETOOLONG, "Name too long")
#ifndef ENETDOWN
#define ENETDOWN -1
#endif
CND(ENETDOWN, "Network is down")
#ifndef ENETRESET
#define ENETRESET -1
#endif
CND(ENETRESET, "Disconn. on network reset")
#ifndef ENETUNREACH
#define ENETUNREACH -1
#endif
CND(ENETUNREACH, "Network is unreachable")
#ifndef ENOBUFS
#define ENOBUFS -1
#endif
CND(ENOBUFS, "No buffer space available")
#ifndef ENOPROTOOPT
#define ENOPROTOOPT -1
#endif
CND(ENOPROTOOPT, "Protocol not available")
#ifndef ENOTCONN
#define ENOTCONN -1
#endif
CND(ENOTCONN, "Socket not connected")
#ifndef ENOTSOCK
#define ENOTSOCK -1
#endif
CND(ENOTSOCK, "Operation on non socket")
#ifndef EOPNOTSUPP
#define EOPNOTSUPP -1
#endif
CND(EOPNOTSUPP, "Operation not supported")
#ifndef EPFNOSUPPORT
#define EPFNOSUPPORT -1
#endif
CND(EPFNOSUPPORT, "Unknown protocol family")
#ifndef EPROTONOSUPPORT
#define EPROTONOSUPPORT -1
#endif
CND(EPROTONOSUPPORT, "Unknown protocol")
#ifndef EPROTOTYPE
#define EPROTOTYPE -1
#endif
CND(EPROTOTYPE, "Unknown protocol type")
#ifndef ESHUTDOWN
#define ESHUTDOWN -1
#endif
CND(ESHUTDOWN, "Cannot send once shutdown")
#ifndef ESOCKTNOSUPPORT
#define ESOCKTNOSUPPORT -1
#endif
CND(ESOCKTNOSUPPORT, "Socket type not supported")
#ifndef ETIMEDOUT
#define ETIMEDOUT -1
#endif
CND(ETIMEDOUT, "Connection timed out")
#ifndef ETOOMANYREFS
#define ETOOMANYREFS -1
#endif
CND(ETOOMANYREFS, "Too many references")
#ifndef EWOULDBLOCK
#define EWOULDBLOCK -1
#endif
CND(EWOULDBLOCK, "Operation would block")
_NL
TXT(" -----------------")
TXT(" -- Host errors --")
TXT(" -----------------")
_NL
#ifndef HOST_NOT_FOUND
#define HOST_NOT_FOUND -1
#endif
CND(HOST_NOT_FOUND, "Unknown host")
#ifndef TRY_AGAIN
#define TRY_AGAIN -1
#endif
CND(TRY_AGAIN, "Host name lookup failure")
#ifndef NO_DATA
#define NO_DATA -1
#endif
CND(NO_DATA, "No data record for name")
#ifndef NO_RECOVERY
#define NO_RECOVERY -1
#endif
CND(NO_RECOVERY, "Non recoverable errors")
_NL
TXT(" -------------------")
TXT(" -- Control flags --")
TXT(" -------------------")
_NL
#ifndef FIONBIO
#define FIONBIO -1
#endif
CND(FIONBIO, "Set/clear non-blocking io")
#ifndef FIONREAD
#define FIONREAD -1
#endif
CND(FIONREAD, "How many bytes to read")
_NL
TXT(" --------------------")
TXT(" -- Shutdown modes --")
TXT(" --------------------")
_NL
#ifndef SHUT_RD
#define SHUT_RD -1
#endif
CND(SHUT_RD, "No more recv")
#ifndef SHUT_WR
#define SHUT_WR -1
#endif
CND(SHUT_WR, "No more send")
#ifndef SHUT_RDWR
#define SHUT_RDWR -1
#endif
CND(SHUT_RDWR, "No more recv/send")
_NL
TXT(" ---------------------")
TXT(" -- Protocol levels --")
TXT(" ---------------------")
_NL
#ifndef SOL_SOCKET
#define SOL_SOCKET -1
#endif
CND(SOL_SOCKET, "Options for socket level")
#ifndef IPPROTO_IP
#define IPPROTO_IP -1
#endif
CND(IPPROTO_IP, "Dummy protocol for IP")
#ifndef IPPROTO_UDP
#define IPPROTO_UDP -1
#endif
CND(IPPROTO_UDP, "UDP")
#ifndef IPPROTO_TCP
#define IPPROTO_TCP -1
#endif
CND(IPPROTO_TCP, "TCP")
_NL
TXT(" -------------------")
TXT(" -- Request flags --")
TXT(" -------------------")
_NL
#ifndef MSG_OOB
#define MSG_OOB -1
#endif
CND(MSG_OOB, "Process out-of-band data")
#ifndef MSG_PEEK
#define MSG_PEEK -1
#endif
CND(MSG_PEEK, "Peek at incoming data")
#ifndef MSG_EOR
#define MSG_EOR -1
#endif
CND(MSG_EOR, "Send end of record")
#ifndef MSG_WAITALL
#define MSG_WAITALL -1
#endif
CND(MSG_WAITALL, "Wait for full reception")
#ifndef MSG_NOSIGNAL
#define MSG_NOSIGNAL -1
#endif
CND(MSG_NOSIGNAL, "No SIGPIPE on send")
#ifdef __linux__
# define MSG_Forced_Flags "MSG_NOSIGNAL"
#else
# define MSG_Forced_Flags "0"
#endif
CN_(MSG_Forced_Flags, "")
TXT(" -- Flags set on all send(2) calls")
_NL
TXT(" --------------------")
TXT(" -- Socket options --")
TXT(" --------------------")
_NL
#ifndef TCP_NODELAY
#define TCP_NODELAY -1
#endif
CND(TCP_NODELAY, "Do not coalesce packets")
#ifndef SO_REUSEADDR
#define SO_REUSEADDR -1
#endif
CND(SO_REUSEADDR, "Bind reuse local address")
#ifndef SO_KEEPALIVE
#define SO_KEEPALIVE -1
#endif
CND(SO_KEEPALIVE, "Enable keep-alive msgs")
#ifndef SO_LINGER
#define SO_LINGER -1
#endif
CND(SO_LINGER, "Defer close to flush data")
#ifndef SO_BROADCAST
#define SO_BROADCAST -1
#endif
CND(SO_BROADCAST, "Can send broadcast msgs")
#ifndef SO_SNDBUF
#define SO_SNDBUF -1
#endif
CND(SO_SNDBUF, "Set/get send buffer size")
#ifndef SO_RCVBUF
#define SO_RCVBUF -1
#endif
CND(SO_RCVBUF, "Set/get recv buffer size")
#ifndef SO_SNDTIMEO
#define SO_SNDTIMEO -1
#endif
CND(SO_SNDTIMEO, "Emission timeout")
#ifndef SO_RCVTIMEO
#define SO_RCVTIMEO -1
#endif
CND(SO_RCVTIMEO, "Reception timeout")
#ifndef SO_ERROR
#define SO_ERROR -1
#endif
CND(SO_ERROR, "Get/clear error status")
#ifndef IP_MULTICAST_IF
#define IP_MULTICAST_IF -1
#endif
CND(IP_MULTICAST_IF, "Set/get mcast interface")
#ifndef IP_MULTICAST_TTL
#define IP_MULTICAST_TTL -1
#endif
CND(IP_MULTICAST_TTL, "Set/get multicast TTL")
#ifndef IP_MULTICAST_LOOP
#define IP_MULTICAST_LOOP -1
#endif
CND(IP_MULTICAST_LOOP, "Set/get mcast loopback")
#ifndef IP_ADD_MEMBERSHIP
#define IP_ADD_MEMBERSHIP -1
#endif
CND(IP_ADD_MEMBERSHIP, "Join a multicast group")
#ifndef IP_DROP_MEMBERSHIP
#define IP_DROP_MEMBERSHIP -1
#endif
CND(IP_DROP_MEMBERSHIP, "Leave a multicast group")
_NL
TXT(" -------------------")
TXT(" -- System limits --")
TXT(" -------------------")
_NL
#ifndef IOV_MAX
#define IOV_MAX INT_MAX
#endif
CND(IOV_MAX, "Maximum writev iovcnt")
_NL
TXT(" ----------------------")
TXT(" -- Type definitions --")
TXT(" ----------------------")
_NL
{
struct timeval tv;
TXT(" -- Sizes (in bytes) of the components of struct timeval")
_NL
#define SIZEOF_tv_sec (sizeof tv.tv_sec)
CND(SIZEOF_tv_sec, "tv_sec")
#define SIZEOF_tv_usec (sizeof tv.tv_usec)
CND(SIZEOF_tv_usec, "tv_usec")
}
#ifdef __vxworks
_NL
TXT(" --------------------------------")
TXT(" -- VxWorks-specific constants --")
TXT(" --------------------------------")
_NL
TXT(" -- These constants may be used only within the VxWorks version of")
TXT(" -- GNAT.Sockets.Thin.")
_NL
CND(OK, "VxWorks generic success")
CND(ERROR, "VxWorks generic error")
#endif
_NL
TXT("end GNAT.Sockets.Constants;")
output ();
return 0;
}
void
output (void) {
int text_max = 0, value_max = 0, l;
struct line *p;
char fmt[64];
#define UPD_MAX(x) do { \
l = strlen (p->x); \
if (l > x ## _max) x ## _max = l; \
} while (0)
for (p = first; p != NULL; p = p->next) {
if (p->value != NULL) {
UPD_MAX(text);
UPD_MAX(value);
}
}
sprintf (fmt, " %%-%ds : constant := %%%ds;%%s%%s\n",
text_max, value_max);
for (p = first; p != NULL; p = p->next) {
if (p->value == NULL) {
printf ("%s\n", p->text);
} else {
char *comment_sep = (strlen (p->comment) > 0)
? " -- " : "";
printf (fmt, p->text, p->value, comment_sep, p->comment);
}
}
}
char *
f_itoa (char *fmt, int n) {
char buf[32], *ret;
sprintf (buf, fmt, n);
ret = malloc (strlen (buf) + 1);
if (ret != NULL)
strcpy (ret, buf);
return ret;
}
void
add_line (char *_text, char *_value, char *_comment) {
struct line *l = (struct line *) malloc (sizeof (struct line));
l->text = _text;
l->value = _value;
l->comment = _comment;
l->next = NULL;
if (last == NULL)
first = last = l;
else {
last->next = l;
last = l;
}
}