1#include "EXTERN.h"
2#include "perl.h"
3#include "./plan9/math.h"
4
5#define _PLAN9_SOURCE
6#include <u.h>
7
8/** Function fpclassify(double) is required by sv.c, which was refactored in perl-5.24 era and uses other libraries to classify floating points. **/
9
10/* See /sys/src/lib/port/frexp.c */
11#define SHIFT 20
12
13int fpclassify(double d) {
14        FPdbleword x;
15
16        /* order matters: only isNaN can operate on NaN */
17        if ( isNaN(d) )
18                return FP_NAN;
19        else if ( isInf(d, 0) )
20                return FP_INFINITE;
21        else if ( d == 0 )
22                return FP_ZERO;
23
24        x.x = fabs(d);
25        return (x.hi >> SHIFT) ? FP_NORMAL : FP_SUBNORMAL;
26}
27
28/* Functions mentioned in /sys/include/ape/sys/socket.h but not implemented */
29
30int recvmsg(int a, struct msghdr *b, int c)
31{
32    croak("Function \"recvmsg\" not implemented in this version of perl.");
33    return (int)NULL;
34}
35
36int sendmsg(int a, struct msghdr *b, int c)
37{
38    croak("Function \"sendmsg\" not implemented in this version of perl.");
39    return (int)NULL;
40}
41
42
43/* Functions mentioned in /sys/include/ape/sys/netdb.h but not implemented */
44struct netent *getnetbyname(const char *a)
45{
46    croak("Function \"getnetbyname\" not implemented in this version of perl.");
47    return (struct netent *)NULL;
48}
49
50struct netent *getnetbyaddr(long a, int b)
51{
52    croak("Function \"getnetbyaddr\" not implemented in this version of perl.");
53    return (struct netent *)NULL;
54}
55
56struct netent *getnetent()
57{
58    croak("Function \"getnetent\" not implemented in this version of perl.");
59    return (struct netent *)NULL;
60}
61
62struct protoent *getprotobyname(const char *a)
63{
64    croak("Function \"getprotobyname\" not implemented in this version of perl.");
65    return (struct protoent *)NULL;
66}
67
68struct protoent *getprotobynumber(int a)
69{
70    croak("Function \"getprotobynumber\" not implemented in this version of perl.");
71    return (struct protoent *)NULL;
72}
73
74struct protoent *getprotoent()
75{
76    croak("Function \"getprotoent\" not implemented in this version of perl.");
77    return (struct protoent *)NULL;
78}
79
80struct servent *getservbyport(int a, const char *b)
81{
82    croak("Function \"getservbyport\" not implemented in this version of perl.");
83    return (struct servent *)NULL;
84}
85
86struct servent *getservent()
87{
88    croak("Function \"getservent\" not implemented in this version of perl.");
89    return (struct servent *)NULL;
90}
91
92void sethostent(int a)
93{
94    croak("Function \"sethostent\" not implemented in this version of perl.");
95}
96
97void setnetent(int a)
98{
99    croak("Function \"setnetent\" not implemented in this version of perl.");
100}
101
102void setprotoent(int a)
103{
104    croak("Function \"setprotoent\" not implemented in this version of perl.");
105}
106
107void setservent(int a)
108{
109    croak("Function \"setservent\" not implemented in this version of perl.");
110}
111
112void endnetent()
113{
114    croak("Function \"endnetent\" not implemented in this version of perl.");
115}
116
117void endprotoent()
118{
119    croak("Function \"endprotoent\" not implemented in this version of perl.");
120}
121
122void endservent()
123{
124    croak("Function \"endservent\" not implemented in this version of perl.");
125}
126