Initial commit
This commit is contained in:
commit
7f076e8069
|
@ -0,0 +1,4 @@
|
|||
codesets.chibi.c
|
||||
*.so
|
||||
*.dylib
|
||||
*.o*
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
cd "$(dirname "$0")"
|
||||
echo "Entering directory '$PWD'"
|
||||
chibi=$(pkg-config --cflags --libs chibi-scheme)
|
||||
soext=.so
|
||||
case $(uname) in
|
||||
Darwin)
|
||||
soext=.dylib
|
||||
;;
|
||||
esac
|
||||
set -x
|
||||
chibi-ffi codesets.chibi.stub
|
||||
cc -std=c99 -Wall -Wextra -Wno-unused-parameter \
|
||||
$chibi -fPIC -shared -o codesets.chibi$soext codesets.chibi.c glue.c
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
cd "$(dirname "$0")"
|
||||
echo "Entering directory '$PWD'"
|
||||
set -x
|
||||
gsc-script -cc-options glue.c codesets.sld
|
|
@ -0,0 +1,13 @@
|
|||
(c-declare "#include \"glue.h\"")
|
||||
|
||||
(define-c (const string) (%codeset-list "codeset_list")
|
||||
())
|
||||
|
||||
(define-c (const string) (%codeset-numbers "codeset_numbers")
|
||||
((const string)))
|
||||
|
||||
(define-c (const string) (%codeset-symbols "codeset_symbols")
|
||||
((const string)))
|
||||
|
||||
(define-c (const string) (%codeset-messages "codeset_messages")
|
||||
((const string)))
|
|
@ -0,0 +1,13 @@
|
|||
(c-declare "#include \"glue.h\"")
|
||||
|
||||
(define %codeset-list
|
||||
(c-lambda () nonnull-char-string "codeset_list"))
|
||||
|
||||
(define %codeset-numbers
|
||||
(c-lambda (nonnull-char-string) nonnull-char-string "codeset_numbers"))
|
||||
|
||||
(define %codeset-symbols
|
||||
(c-lambda (nonnull-char-string) nonnull-char-string "codeset_symbols"))
|
||||
|
||||
(define %codeset-messages
|
||||
(c-lambda (nonnull-char-string) nonnull-char-string "codeset_messages"))
|
|
@ -0,0 +1,34 @@
|
|||
(define-library (codesets)
|
||||
(export codeset-alist)
|
||||
(cond-expand
|
||||
(chibi
|
||||
(import (scheme base))
|
||||
(include-shared "codesets.chibi"))
|
||||
(gambit
|
||||
(import (gambit))
|
||||
(include "codesets.gambit.scm")))
|
||||
(begin
|
||||
|
||||
(define (split string)
|
||||
(let loop ((list '()) (a 0) (b 0))
|
||||
(cond ((= a (string-length string))
|
||||
(reverse list))
|
||||
((char=? #\newline (string-ref string b))
|
||||
(loop (cons (string-copy string a b) list)
|
||||
(+ b 1)
|
||||
(+ b 1)))
|
||||
(else
|
||||
(loop list a (+ b 1))))))
|
||||
|
||||
(define (grovel-codeset codeset)
|
||||
(define (append-map f a b c) (apply append (map f a b c)))
|
||||
(cons (string->symbol codeset)
|
||||
(list->vector
|
||||
(append-map
|
||||
list
|
||||
(map string->number (split (%codeset-numbers codeset)))
|
||||
(map string->symbol (split (%codeset-symbols codeset)))
|
||||
(split (%codeset-messages codeset))))))
|
||||
|
||||
(define codeset-alist
|
||||
(map grovel-codeset (split (%codeset-list))))))
|
|
@ -0,0 +1,453 @@
|
|||
#ifdef E2BIG
|
||||
XX(E2BIG)
|
||||
#endif
|
||||
#ifdef EACCES
|
||||
XX(EACCES)
|
||||
#endif
|
||||
#ifdef EADDRINUSE
|
||||
XX(EADDRINUSE)
|
||||
#endif
|
||||
#ifdef EADDRNOTAVAIL
|
||||
XX(EADDRNOTAVAIL)
|
||||
#endif
|
||||
#ifdef EADV
|
||||
XX(EADV)
|
||||
#endif
|
||||
#ifdef EAFNOSUPPORT
|
||||
XX(EAFNOSUPPORT)
|
||||
#endif
|
||||
#ifdef EAGAIN
|
||||
XX(EAGAIN)
|
||||
#endif
|
||||
#ifdef EALREADY
|
||||
XX(EALREADY)
|
||||
#endif
|
||||
#ifdef EAUTH
|
||||
XX(EAUTH)
|
||||
#endif
|
||||
#ifdef EBADE
|
||||
XX(EBADE)
|
||||
#endif
|
||||
#ifdef EBADF
|
||||
XX(EBADF)
|
||||
#endif
|
||||
#ifdef EBADFD
|
||||
XX(EBADFD)
|
||||
#endif
|
||||
#ifdef EBADMSG
|
||||
XX(EBADMSG)
|
||||
#endif
|
||||
#ifdef EBADR
|
||||
XX(EBADR)
|
||||
#endif
|
||||
#ifdef EBADRPC
|
||||
XX(EBADRPC)
|
||||
#endif
|
||||
#ifdef EBADRQC
|
||||
XX(EBADRQC)
|
||||
#endif
|
||||
#ifdef EBADSLT
|
||||
XX(EBADSLT)
|
||||
#endif
|
||||
#ifdef EBFONT
|
||||
XX(EBFONT)
|
||||
#endif
|
||||
#ifdef EBUSY
|
||||
XX(EBUSY)
|
||||
#endif
|
||||
#ifdef ECANCELED
|
||||
XX(ECANCELED)
|
||||
#endif
|
||||
#ifdef ECAPMODE
|
||||
XX(ECAPMODE)
|
||||
#endif
|
||||
#ifdef ECHILD
|
||||
XX(ECHILD)
|
||||
#endif
|
||||
#ifdef ECHRNG
|
||||
XX(ECHRNG)
|
||||
#endif
|
||||
#ifdef ECOMM
|
||||
XX(ECOMM)
|
||||
#endif
|
||||
#ifdef ECONNABORTED
|
||||
XX(ECONNABORTED)
|
||||
#endif
|
||||
#ifdef ECONNREFUSED
|
||||
XX(ECONNREFUSED)
|
||||
#endif
|
||||
#ifdef ECONNRESET
|
||||
XX(ECONNRESET)
|
||||
#endif
|
||||
#ifdef EDEADLK
|
||||
XX(EDEADLK)
|
||||
#endif
|
||||
#ifdef EDEADLOCK
|
||||
XX(EDEADLOCK)
|
||||
#endif
|
||||
#ifdef EDESTADDRREQ
|
||||
XX(EDESTADDRREQ)
|
||||
#endif
|
||||
#ifdef EDOM
|
||||
XX(EDOM)
|
||||
#endif
|
||||
#ifdef EDOOFUS
|
||||
XX(EDOOFUS)
|
||||
#endif
|
||||
#ifdef EDOTDOT
|
||||
XX(EDOTDOT)
|
||||
#endif
|
||||
#ifdef EDQUOT
|
||||
XX(EDQUOT)
|
||||
#endif
|
||||
#ifdef EEXIST
|
||||
XX(EEXIST)
|
||||
#endif
|
||||
#ifdef EFAULT
|
||||
XX(EFAULT)
|
||||
#endif
|
||||
#ifdef EFBIG
|
||||
XX(EFBIG)
|
||||
#endif
|
||||
#ifdef EFTYPE
|
||||
XX(EFTYPE)
|
||||
#endif
|
||||
#ifdef EHOSTDOWN
|
||||
XX(EHOSTDOWN)
|
||||
#endif
|
||||
#ifdef EHOSTUNREACH
|
||||
XX(EHOSTUNREACH)
|
||||
#endif
|
||||
#ifdef EHWPOISON
|
||||
XX(EHWPOISON)
|
||||
#endif
|
||||
#ifdef EIDRM
|
||||
XX(EIDRM)
|
||||
#endif
|
||||
#ifdef EILSEQ
|
||||
XX(EILSEQ)
|
||||
#endif
|
||||
#ifdef EINPROGRESS
|
||||
XX(EINPROGRESS)
|
||||
#endif
|
||||
#ifdef EINTR
|
||||
XX(EINTR)
|
||||
#endif
|
||||
#ifdef EINVAL
|
||||
XX(EINVAL)
|
||||
#endif
|
||||
#ifdef EIO
|
||||
XX(EIO)
|
||||
#endif
|
||||
#ifdef EIPSEC
|
||||
XX(EIPSEC)
|
||||
#endif
|
||||
#ifdef EISCONN
|
||||
XX(EISCONN)
|
||||
#endif
|
||||
#ifdef EISDIR
|
||||
XX(EISDIR)
|
||||
#endif
|
||||
#ifdef EISNAM
|
||||
XX(EISNAM)
|
||||
#endif
|
||||
#ifdef EKEYEXPIRED
|
||||
XX(EKEYEXPIRED)
|
||||
#endif
|
||||
#ifdef EKEYREJECTED
|
||||
XX(EKEYREJECTED)
|
||||
#endif
|
||||
#ifdef EKEYREVOKED
|
||||
XX(EKEYREVOKED)
|
||||
#endif
|
||||
#ifdef EL2HLT
|
||||
XX(EL2HLT)
|
||||
#endif
|
||||
#ifdef EL2NSYNC
|
||||
XX(EL2NSYNC)
|
||||
#endif
|
||||
#ifdef EL3HLT
|
||||
XX(EL3HLT)
|
||||
#endif
|
||||
#ifdef EL3RST
|
||||
XX(EL3RST)
|
||||
#endif
|
||||
#ifdef ELAST
|
||||
XX(ELAST)
|
||||
#endif
|
||||
#ifdef ELIBACC
|
||||
XX(ELIBACC)
|
||||
#endif
|
||||
#ifdef ELIBBAD
|
||||
XX(ELIBBAD)
|
||||
#endif
|
||||
#ifdef ELIBEXEC
|
||||
XX(ELIBEXEC)
|
||||
#endif
|
||||
#ifdef ELIBMAX
|
||||
XX(ELIBMAX)
|
||||
#endif
|
||||
#ifdef ELIBSCN
|
||||
XX(ELIBSCN)
|
||||
#endif
|
||||
#ifdef ELNRNG
|
||||
XX(ELNRNG)
|
||||
#endif
|
||||
#ifdef ELOCKUNMAPPED
|
||||
XX(ELOCKUNMAPPED)
|
||||
#endif
|
||||
#ifdef ELOOP
|
||||
XX(ELOOP)
|
||||
#endif
|
||||
#ifdef EMEDIUMTYPE
|
||||
XX(EMEDIUMTYPE)
|
||||
#endif
|
||||
#ifdef EMFILE
|
||||
XX(EMFILE)
|
||||
#endif
|
||||
#ifdef EMLINK
|
||||
XX(EMLINK)
|
||||
#endif
|
||||
#ifdef EMSGSIZE
|
||||
XX(EMSGSIZE)
|
||||
#endif
|
||||
#ifdef EMULTIHOP
|
||||
XX(EMULTIHOP)
|
||||
#endif
|
||||
#ifdef ENAMETOOLONG
|
||||
XX(ENAMETOOLONG)
|
||||
#endif
|
||||
#ifdef ENAVAIL
|
||||
XX(ENAVAIL)
|
||||
#endif
|
||||
#ifdef ENEEDAUTH
|
||||
XX(ENEEDAUTH)
|
||||
#endif
|
||||
#ifdef ENETDOWN
|
||||
XX(ENETDOWN)
|
||||
#endif
|
||||
#ifdef ENETRESET
|
||||
XX(ENETRESET)
|
||||
#endif
|
||||
#ifdef ENETUNREACH
|
||||
XX(ENETUNREACH)
|
||||
#endif
|
||||
#ifdef ENFILE
|
||||
XX(ENFILE)
|
||||
#endif
|
||||
#ifdef ENOANO
|
||||
XX(ENOANO)
|
||||
#endif
|
||||
#ifdef ENOATTR
|
||||
XX(ENOATTR)
|
||||
#endif
|
||||
#ifdef ENOBUFS
|
||||
XX(ENOBUFS)
|
||||
#endif
|
||||
#ifdef ENOCSI
|
||||
XX(ENOCSI)
|
||||
#endif
|
||||
#ifdef ENODATA
|
||||
XX(ENODATA)
|
||||
#endif
|
||||
#ifdef ENODEV
|
||||
XX(ENODEV)
|
||||
#endif
|
||||
#ifdef ENOENT
|
||||
XX(ENOENT)
|
||||
#endif
|
||||
#ifdef ENOEXEC
|
||||
XX(ENOEXEC)
|
||||
#endif
|
||||
#ifdef ENOKEY
|
||||
XX(ENOKEY)
|
||||
#endif
|
||||
#ifdef ENOLCK
|
||||
XX(ENOLCK)
|
||||
#endif
|
||||
#ifdef ENOLINK
|
||||
XX(ENOLINK)
|
||||
#endif
|
||||
#ifdef ENOMEDIUM
|
||||
XX(ENOMEDIUM)
|
||||
#endif
|
||||
#ifdef ENOMEM
|
||||
XX(ENOMEM)
|
||||
#endif
|
||||
#ifdef ENOMSG
|
||||
XX(ENOMSG)
|
||||
#endif
|
||||
#ifdef ENONET
|
||||
XX(ENONET)
|
||||
#endif
|
||||
#ifdef ENOPKG
|
||||
XX(ENOPKG)
|
||||
#endif
|
||||
#ifdef ENOPROTOOPT
|
||||
XX(ENOPROTOOPT)
|
||||
#endif
|
||||
#ifdef ENOSPC
|
||||
XX(ENOSPC)
|
||||
#endif
|
||||
#ifdef ENOSR
|
||||
XX(ENOSR)
|
||||
#endif
|
||||
#ifdef ENOSTR
|
||||
XX(ENOSTR)
|
||||
#endif
|
||||
#ifdef ENOSYS
|
||||
XX(ENOSYS)
|
||||
#endif
|
||||
#ifdef ENOTACTIVE
|
||||
XX(ENOTACTIVE)
|
||||
#endif
|
||||
#ifdef ENOTBLK
|
||||
XX(ENOTBLK)
|
||||
#endif
|
||||
#ifdef ENOTCAPABLE
|
||||
XX(ENOTCAPABLE)
|
||||
#endif
|
||||
#ifdef ENOTCONN
|
||||
XX(ENOTCONN)
|
||||
#endif
|
||||
#ifdef ENOTDIR
|
||||
XX(ENOTDIR)
|
||||
#endif
|
||||
#ifdef ENOTEMPTY
|
||||
XX(ENOTEMPTY)
|
||||
#endif
|
||||
#ifdef ENOTNAM
|
||||
XX(ENOTNAM)
|
||||
#endif
|
||||
#ifdef ENOTRECOVERABLE
|
||||
XX(ENOTRECOVERABLE)
|
||||
#endif
|
||||
#ifdef ENOTSOCK
|
||||
XX(ENOTSOCK)
|
||||
#endif
|
||||
#ifdef ENOTSUP
|
||||
XX(ENOTSUP)
|
||||
#endif
|
||||
#ifdef ENOTTY
|
||||
XX(ENOTTY)
|
||||
#endif
|
||||
#ifdef ENOTUNIQ
|
||||
XX(ENOTUNIQ)
|
||||
#endif
|
||||
#ifdef ENXIO
|
||||
XX(ENXIO)
|
||||
#endif
|
||||
#ifdef EOPNOTSUPP
|
||||
XX(EOPNOTSUPP)
|
||||
#endif
|
||||
#ifdef EOVERFLOW
|
||||
XX(EOVERFLOW)
|
||||
#endif
|
||||
#ifdef EOWNERDEAD
|
||||
XX(EOWNERDEAD)
|
||||
#endif
|
||||
#ifdef EPERM
|
||||
XX(EPERM)
|
||||
#endif
|
||||
#ifdef EPFNOSUPPORT
|
||||
XX(EPFNOSUPPORT)
|
||||
#endif
|
||||
#ifdef EPIPE
|
||||
XX(EPIPE)
|
||||
#endif
|
||||
#ifdef EPROCLIM
|
||||
XX(EPROCLIM)
|
||||
#endif
|
||||
#ifdef EPROCUNAVAIL
|
||||
XX(EPROCUNAVAIL)
|
||||
#endif
|
||||
#ifdef EPROGMISMATCH
|
||||
XX(EPROGMISMATCH)
|
||||
#endif
|
||||
#ifdef EPROGUNAVAIL
|
||||
XX(EPROGUNAVAIL)
|
||||
#endif
|
||||
#ifdef EPROTO
|
||||
XX(EPROTO)
|
||||
#endif
|
||||
#ifdef EPROTONOSUPPORT
|
||||
XX(EPROTONOSUPPORT)
|
||||
#endif
|
||||
#ifdef EPROTOTYPE
|
||||
XX(EPROTOTYPE)
|
||||
#endif
|
||||
#ifdef ERANGE
|
||||
XX(ERANGE)
|
||||
#endif
|
||||
#ifdef EREMCHG
|
||||
XX(EREMCHG)
|
||||
#endif
|
||||
#ifdef EREMOTE
|
||||
XX(EREMOTE)
|
||||
#endif
|
||||
#ifdef EREMOTEIO
|
||||
XX(EREMOTEIO)
|
||||
#endif
|
||||
#ifdef ERESTART
|
||||
XX(ERESTART)
|
||||
#endif
|
||||
#ifdef ERFKILL
|
||||
XX(ERFKILL)
|
||||
#endif
|
||||
#ifdef EROFS
|
||||
XX(EROFS)
|
||||
#endif
|
||||
#ifdef ERPCMISMATCH
|
||||
XX(ERPCMISMATCH)
|
||||
#endif
|
||||
#ifdef ESHUTDOWN
|
||||
XX(ESHUTDOWN)
|
||||
#endif
|
||||
#ifdef ESOCKTNOSUPPORT
|
||||
XX(ESOCKTNOSUPPORT)
|
||||
#endif
|
||||
#ifdef ESPIPE
|
||||
XX(ESPIPE)
|
||||
#endif
|
||||
#ifdef ESRCH
|
||||
XX(ESRCH)
|
||||
#endif
|
||||
#ifdef ESRMNT
|
||||
XX(ESRMNT)
|
||||
#endif
|
||||
#ifdef ESTALE
|
||||
XX(ESTALE)
|
||||
#endif
|
||||
#ifdef ESTRPIPE
|
||||
XX(ESTRPIPE)
|
||||
#endif
|
||||
#ifdef ETIME
|
||||
XX(ETIME)
|
||||
#endif
|
||||
#ifdef ETIMEDOUT
|
||||
XX(ETIMEDOUT)
|
||||
#endif
|
||||
#ifdef ETOOMANYREFS
|
||||
XX(ETOOMANYREFS)
|
||||
#endif
|
||||
#ifdef ETXTBSY
|
||||
XX(ETXTBSY)
|
||||
#endif
|
||||
#ifdef EUCLEAN
|
||||
XX(EUCLEAN)
|
||||
#endif
|
||||
#ifdef EUNATCH
|
||||
XX(EUNATCH)
|
||||
#endif
|
||||
#ifdef EUSERS
|
||||
XX(EUSERS)
|
||||
#endif
|
||||
#ifdef EWOULDBLOCK
|
||||
XX(EWOULDBLOCK)
|
||||
#endif
|
||||
#ifdef EXDEV
|
||||
XX(EXDEV)
|
||||
#endif
|
||||
#ifdef EXFULL
|
||||
XX(EXFULL)
|
||||
#endif
|
|
@ -0,0 +1,151 @@
|
|||
E2BIG
|
||||
EACCES
|
||||
EADDRINUSE
|
||||
EADDRNOTAVAIL
|
||||
EADV
|
||||
EAFNOSUPPORT
|
||||
EAGAIN
|
||||
EALREADY
|
||||
EAUTH
|
||||
EBADE
|
||||
EBADF
|
||||
EBADFD
|
||||
EBADMSG
|
||||
EBADR
|
||||
EBADRPC
|
||||
EBADRQC
|
||||
EBADSLT
|
||||
EBFONT
|
||||
EBUSY
|
||||
ECANCELED
|
||||
ECAPMODE
|
||||
ECHILD
|
||||
ECHRNG
|
||||
ECOMM
|
||||
ECONNABORTED
|
||||
ECONNREFUSED
|
||||
ECONNRESET
|
||||
EDEADLK
|
||||
EDEADLOCK
|
||||
EDESTADDRREQ
|
||||
EDOM
|
||||
EDOOFUS
|
||||
EDOTDOT
|
||||
EDQUOT
|
||||
EEXIST
|
||||
EFAULT
|
||||
EFBIG
|
||||
EFTYPE
|
||||
EHOSTDOWN
|
||||
EHOSTUNREACH
|
||||
EHWPOISON
|
||||
EIDRM
|
||||
EILSEQ
|
||||
EINPROGRESS
|
||||
EINTR
|
||||
EINVAL
|
||||
EIO
|
||||
EIPSEC
|
||||
EISCONN
|
||||
EISDIR
|
||||
EISNAM
|
||||
EKEYEXPIRED
|
||||
EKEYREJECTED
|
||||
EKEYREVOKED
|
||||
EL2HLT
|
||||
EL2NSYNC
|
||||
EL3HLT
|
||||
EL3RST
|
||||
ELAST
|
||||
ELIBACC
|
||||
ELIBBAD
|
||||
ELIBEXEC
|
||||
ELIBMAX
|
||||
ELIBSCN
|
||||
ELNRNG
|
||||
ELOCKUNMAPPED
|
||||
ELOOP
|
||||
EMEDIUMTYPE
|
||||
EMFILE
|
||||
EMLINK
|
||||
EMSGSIZE
|
||||
EMULTIHOP
|
||||
ENAMETOOLONG
|
||||
ENAVAIL
|
||||
ENEEDAUTH
|
||||
ENETDOWN
|
||||
ENETRESET
|
||||
ENETUNREACH
|
||||
ENFILE
|
||||
ENOANO
|
||||
ENOATTR
|
||||
ENOBUFS
|
||||
ENOCSI
|
||||
ENODATA
|
||||
ENODEV
|
||||
ENOENT
|
||||
ENOEXEC
|
||||
ENOKEY
|
||||
ENOLCK
|
||||
ENOLINK
|
||||
ENOMEDIUM
|
||||
ENOMEM
|
||||
ENOMSG
|
||||
ENONET
|
||||
ENOPKG
|
||||
ENOPROTOOPT
|
||||
ENOSPC
|
||||
ENOSR
|
||||
ENOSTR
|
||||
ENOSYS
|
||||
ENOTACTIVE
|
||||
ENOTBLK
|
||||
ENOTCAPABLE
|
||||
ENOTCONN
|
||||
ENOTDIR
|
||||
ENOTEMPTY
|
||||
ENOTNAM
|
||||
ENOTRECOVERABLE
|
||||
ENOTSOCK
|
||||
ENOTSUP
|
||||
ENOTTY
|
||||
ENOTUNIQ
|
||||
ENXIO
|
||||
EOPNOTSUPP
|
||||
EOVERFLOW
|
||||
EOWNERDEAD
|
||||
EPERM
|
||||
EPFNOSUPPORT
|
||||
EPIPE
|
||||
EPROCLIM
|
||||
EPROCUNAVAIL
|
||||
EPROGMISMATCH
|
||||
EPROGUNAVAIL
|
||||
EPROTO
|
||||
EPROTONOSUPPORT
|
||||
EPROTOTYPE
|
||||
ERANGE
|
||||
EREMCHG
|
||||
EREMOTE
|
||||
EREMOTEIO
|
||||
ERESTART
|
||||
ERFKILL
|
||||
EROFS
|
||||
ERPCMISMATCH
|
||||
ESHUTDOWN
|
||||
ESOCKTNOSUPPORT
|
||||
ESPIPE
|
||||
ESRCH
|
||||
ESRMNT
|
||||
ESTALE
|
||||
ESTRPIPE
|
||||
ETIME
|
||||
ETIMEDOUT
|
||||
ETOOMANYREFS
|
||||
ETXTBSY
|
||||
EUCLEAN
|
||||
EUNATCH
|
||||
EUSERS
|
||||
EWOULDBLOCK
|
||||
EXDEV
|
||||
EXFULL
|
|
@ -0,0 +1,35 @@
|
|||
(import (scheme base)
|
||||
(scheme file)
|
||||
(scheme read)
|
||||
(scheme write))
|
||||
|
||||
(define disp
|
||||
(lambda args
|
||||
(for-each display args)
|
||||
(newline)))
|
||||
|
||||
(define (read-all)
|
||||
(let loop ((xs '()))
|
||||
(let ((x (read)))
|
||||
(if (eof-object? x)
|
||||
(reverse xs)
|
||||
(loop (cons x xs))))))
|
||||
|
||||
(define (gen out in)
|
||||
(let ((symbols (with-input-from-file in read-all)))
|
||||
(with-output-to-file out
|
||||
(lambda ()
|
||||
(for-each (lambda (symbol)
|
||||
(disp "#ifdef " symbol)
|
||||
(disp " XX(" symbol ")")
|
||||
(disp "#endif"))
|
||||
symbols)))))
|
||||
|
||||
(define main
|
||||
(lambda ignored
|
||||
(gen "errnolist.h"
|
||||
"errnolist.txt")
|
||||
(gen "signallist.h"
|
||||
"signallist.txt")))
|
||||
|
||||
(main)
|
|
@ -0,0 +1,118 @@
|
|||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#undef XX
|
||||
#define XX(x) x,
|
||||
|
||||
static const int errno_numbers[] = {
|
||||
#include "errnolist.h"
|
||||
0};
|
||||
|
||||
static const int signal_numbers[] = {
|
||||
#include "signallist.h"
|
||||
0};
|
||||
|
||||
#undef XX
|
||||
#define XX(x) #x "\n"
|
||||
|
||||
static const char errno_symbols[] =
|
||||
#include "errnolist.h"
|
||||
;
|
||||
|
||||
static const char signal_symbols[] =
|
||||
#include "signallist.h"
|
||||
;
|
||||
|
||||
static char buffer[16384];
|
||||
|
||||
static char *portable_strsignal(int number) {
|
||||
char *str;
|
||||
char *pos;
|
||||
|
||||
str = strsignal(number);
|
||||
pos = str ? strchr(str, ':') : 0;
|
||||
if (pos) {
|
||||
*pos = 0;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
static char *format_number(int number) {
|
||||
static char numbuf[16];
|
||||
|
||||
snprintf(numbuf, sizeof(numbuf), "%d", number);
|
||||
return numbuf;
|
||||
}
|
||||
|
||||
static void whitespace_cleanup(char *str) {
|
||||
char *ptr;
|
||||
char *lim;
|
||||
|
||||
lim = strchr(str, 0);
|
||||
while (lim > str) {
|
||||
if (!isspace(lim[-1])) {
|
||||
break;
|
||||
}
|
||||
*--lim = 0;
|
||||
}
|
||||
for (ptr = str; ptr < lim; ptr++) {
|
||||
if (isspace(*ptr)) {
|
||||
*ptr = ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static const char *prepare(const int *numbers, char *(*tostring)(int)) {
|
||||
char *str;
|
||||
size_t len, i;
|
||||
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
for (i = 0; numbers[i]; i++) {
|
||||
str = tostring(numbers[i]);
|
||||
if (!str) {
|
||||
str = "";
|
||||
}
|
||||
whitespace_cleanup(str);
|
||||
len = strlen(buffer);
|
||||
snprintf(&buffer[len], sizeof(buffer) - len, "%s\n", str);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
const char *codeset_symbols(const char *codeset) {
|
||||
if (!strcmp(codeset, "errno")) {
|
||||
return errno_symbols;
|
||||
}
|
||||
if (!strcmp(codeset, "signal")) {
|
||||
return signal_symbols;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *codeset_numbers(const char *codeset) {
|
||||
if (!strcmp(codeset, "errno")) {
|
||||
return prepare(errno_numbers, format_number);
|
||||
}
|
||||
if (!strcmp(codeset, "signal")) {
|
||||
return prepare(signal_numbers, format_number);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *codeset_messages(const char *codeset) {
|
||||
if (!strcmp(codeset, "errno")) {
|
||||
return prepare(errno_numbers, strerror);
|
||||
}
|
||||
if (!strcmp(codeset, "signal")) {
|
||||
return prepare(signal_numbers, portable_strsignal);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *codeset_list(void) {
|
||||
return "errno\n"
|
||||
"signal\n";
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
char *codeset_list(void);
|
||||
char *codeset_numbers(const char *codeset);
|
||||
char *codeset_symbols(const char *codeset);
|
||||
char *codeset_messages(const char *codeset);
|
|
@ -0,0 +1,93 @@
|
|||
#ifdef SIGABRT
|
||||
XX(SIGABRT)
|
||||
#endif
|
||||
#ifdef SIGALRM
|
||||
XX(SIGALRM)
|
||||
#endif
|
||||
#ifdef SIGBUS
|
||||
XX(SIGBUS)
|
||||
#endif
|
||||
#ifdef SIGCHLD
|
||||
XX(SIGCHLD)
|
||||
#endif
|
||||
#ifdef SIGCONT
|
||||
XX(SIGCONT)
|
||||
#endif
|
||||
#ifdef SIGEMT
|
||||
XX(SIGEMT)
|
||||
#endif
|
||||
#ifdef SIGFPE
|
||||
XX(SIGFPE)
|
||||
#endif
|
||||
#ifdef SIGHUP
|
||||
XX(SIGHUP)
|
||||
#endif
|
||||
#ifdef SIGILL
|
||||
XX(SIGILL)
|
||||
#endif
|
||||
#ifdef SIGINFO
|
||||
XX(SIGINFO)
|
||||
#endif
|
||||
#ifdef SIGINT
|
||||
XX(SIGINT)
|
||||
#endif
|
||||
#ifdef SIGIO
|
||||
XX(SIGIO)
|
||||
#endif
|
||||
#ifdef SIGKILL
|
||||
XX(SIGKILL)
|
||||
#endif
|
||||
#ifdef SIGPIPE
|
||||
XX(SIGPIPE)
|
||||
#endif
|
||||
#ifdef SIGPROF
|
||||
XX(SIGPROF)
|
||||
#endif
|
||||
#ifdef SIGQUIT
|
||||
XX(SIGQUIT)
|
||||
#endif
|
||||
#ifdef SIGSEGV
|
||||
XX(SIGSEGV)
|
||||
#endif
|
||||
#ifdef SIGSTOP
|
||||
XX(SIGSTOP)
|
||||
#endif
|
||||
#ifdef SIGSYS
|
||||
XX(SIGSYS)
|
||||
#endif
|
||||
#ifdef SIGTERM
|
||||
XX(SIGTERM)
|
||||
#endif
|
||||
#ifdef SIGTRAP
|
||||
XX(SIGTRAP)
|
||||
#endif
|
||||
#ifdef SIGTSTP
|
||||
XX(SIGTSTP)
|
||||
#endif
|
||||
#ifdef SIGTTIN
|
||||
XX(SIGTTIN)
|
||||
#endif
|
||||
#ifdef SIGTTOU
|
||||
XX(SIGTTOU)
|
||||
#endif
|
||||
#ifdef SIGURG
|
||||
XX(SIGURG)
|
||||
#endif
|
||||
#ifdef SIGUSR1
|
||||
XX(SIGUSR1)
|
||||
#endif
|
||||
#ifdef SIGUSR2
|
||||
XX(SIGUSR2)
|
||||
#endif
|
||||
#ifdef SIGVTALRM
|
||||
XX(SIGVTALRM)
|
||||
#endif
|
||||
#ifdef SIGWINCH
|
||||
XX(SIGWINCH)
|
||||
#endif
|
||||
#ifdef SIGXCPU
|
||||
XX(SIGXCPU)
|
||||
#endif
|
||||
#ifdef SIGXFSZ
|
||||
XX(SIGXFSZ)
|
||||
#endif
|
|
@ -0,0 +1,31 @@
|
|||
SIGABRT
|
||||
SIGALRM
|
||||
SIGBUS
|
||||
SIGCHLD
|
||||
SIGCONT
|
||||
SIGEMT
|
||||
SIGFPE
|
||||
SIGHUP
|
||||
SIGILL
|
||||
SIGINFO
|
||||
SIGINT
|
||||
SIGIO
|
||||
SIGKILL
|
||||
SIGPIPE
|
||||
SIGPROF
|
||||
SIGQUIT
|
||||
SIGSEGV
|
||||
SIGSTOP
|
||||
SIGSYS
|
||||
SIGTERM
|
||||
SIGTRAP
|
||||
SIGTSTP
|
||||
SIGTTIN
|
||||
SIGTTOU
|
||||
SIGURG
|
||||
SIGUSR1
|
||||
SIGUSR2
|
||||
SIGVTALRM
|
||||
SIGWINCH
|
||||
SIGXCPU
|
||||
SIGXFSZ
|
Loading…
Reference in New Issue