*** empty log message ***
This commit is contained in:
commit
b8e8ec9536
|
@ -0,0 +1,28 @@
|
|||
# CVS default ignores begin
|
||||
tags
|
||||
TAGS
|
||||
.make.state
|
||||
.nse_depinfo
|
||||
*~
|
||||
\#*
|
||||
.#*
|
||||
,*
|
||||
_$*
|
||||
*$
|
||||
*.old
|
||||
*.bak
|
||||
*.BAK
|
||||
*.orig
|
||||
*.rej
|
||||
.del-*
|
||||
*.a
|
||||
*.olb
|
||||
*.o
|
||||
*.obj
|
||||
*.so
|
||||
*.exe
|
||||
*.Z
|
||||
*.elc
|
||||
*.ln
|
||||
core
|
||||
# CVS default ignores end
|
|
@ -0,0 +1,59 @@
|
|||
CC = @CC@
|
||||
LIBS = @LIBS@ -lscsh
|
||||
SCSH_LIB = @scsh_libraries@
|
||||
LIB_DIRS = -L$(SCSH_LIB)
|
||||
INCLUDES = -I. -I./c
|
||||
|
||||
SCSH_INCLUDES = @scsh_includes@
|
||||
ifneq ($(SCSH_INCLUDES),)
|
||||
INCLUDES += -I$(SCSH_INCLUDES)
|
||||
endif
|
||||
|
||||
SCSH_MODULES = @scsh_modules@
|
||||
YP_VM = scshypvm
|
||||
YP_IMAGE = scsh-yp.image
|
||||
YP = scsh-yp
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
enough: $(YP)
|
||||
|
||||
DIST_SOURCES = c/yp.c
|
||||
|
||||
OBJECTS = $(DIST_SOURCES:.c=.o)
|
||||
|
||||
SCM_FILES = scheme/yp.scm
|
||||
|
||||
SCM_CONFIG_FILES = scheme/yp-interfaces.scm scheme/yp-packages.scm
|
||||
|
||||
$(YP_VM): tmpmain.o $(OBJECTS)
|
||||
$(CC) $(LDFLAGS) $(CFLAGS) -o $(YP_VM) $(LIB_DIRS) tmpmain.o $(OBJECTS) $(LIBS)
|
||||
|
||||
$(OBJECTS):
|
||||
.c.o:
|
||||
$(CC) $(CFLAGS) -c $(INCLUDES) -o $@ $<
|
||||
|
||||
tmpmain.o: c/main.c
|
||||
$(CC) -c -DSCSHIMAGE=\"$(SCSH_LIB)/scsh.image\" $(INCLUDES) $(CFLAGS) -o $@ $<
|
||||
|
||||
main.o: c/main.c
|
||||
$(CC) -c -DSCSHIMAGE=\"`pwd`/scsh-yp.image\" $(INCLUDES) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(YP_IMAGE): $(YP_VM) $(SCM_FILES) $(SCM_CONFIG_FILES)
|
||||
( \
|
||||
echo ",batch on"; \
|
||||
echo ",config ,load $(SCM_CONFIG_FILES)"; \
|
||||
echo ",load-package yp"; \
|
||||
echo "(dump-scsh \"$(YP_IMAGE)\")"; \
|
||||
) | ./$(YP_VM) $(SCSH_ARGS)
|
||||
|
||||
$(YP): $(YP_IMAGE) main.o $(OBJECTS)
|
||||
$(CC) $(LDFLAGS) -o $@ $(LIB_DIRS) main.o $(OBJECTS) $(LIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(YP_VM) $(YP) $(YP_IMAGE) *.o c/*.o
|
||||
|
||||
distclean: clean
|
||||
rm -f configure Makefile config.log config.status
|
||||
rm -rf autom4te.cache/
|
|
@ -0,0 +1,13 @@
|
|||
#include "scheme48.h"
|
||||
#include "c/config.h"
|
||||
|
||||
extern void scsh_yp_main();
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
s48_add_external_init(scsh_yp_main);
|
||||
|
||||
return s48_main(10000000, 64000,
|
||||
SCSHIMAGE,
|
||||
--argc, ++argv);
|
||||
}
|
|
@ -0,0 +1,177 @@
|
|||
#include "scheme48.h"
|
||||
#include <sys/types.h>
|
||||
#include <rpc/rpc.h>
|
||||
#include <rpcsvc/ypclnt.h>
|
||||
#include <rpcsvc/yp_prot.h>
|
||||
|
||||
#define DECLARE_S48VALUE_STATIC(NAME) \
|
||||
static s48_value NAME = S48_FALSE;
|
||||
|
||||
#define GC_PROTECT_ENTER_INT(CNAME, SNAME, VALUE) \
|
||||
S48_GC_PROTECT_GLOBAL(CNAME); \
|
||||
CNAME = s48_enter_integer(VALUE); \
|
||||
s48_define_exported_binding(SNAME, CNAME);
|
||||
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_badargs);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_baddb);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_domain);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_key);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_map);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_nodom);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_nomore);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_pmap);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_resrc);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_rpc);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_vers);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_ypbind);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_yperr);
|
||||
DECLARE_S48VALUE_STATIC(scsh_yp_error_ypserv);
|
||||
|
||||
s48_value scsh_yp_getdefaultdomain(void)
|
||||
{
|
||||
char *buf;
|
||||
int i;
|
||||
s48_value str, res = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT(2);
|
||||
|
||||
S48_GC_PROTECT_2(res, str);
|
||||
i = yp_get_default_domain(&buf);
|
||||
str = (i == 0) ? s48_enter_string(buf) : S48_UNSPECIFIC;
|
||||
res = s48_list_2(s48_enter_integer(i), str);
|
||||
S48_GC_UNPROTECT();
|
||||
return res;
|
||||
}
|
||||
|
||||
s48_value scsh_yp_bind(s48_value domain)
|
||||
{
|
||||
return s48_enter_integer(yp_bind(s48_extract_string(domain)));
|
||||
}
|
||||
|
||||
s48_value scsh_yp_unbind(s48_value domain)
|
||||
{
|
||||
yp_unbind(s48_extract_string(domain));
|
||||
return S48_UNSPECIFIC;
|
||||
}
|
||||
|
||||
s48_value scsh_yp_errstring(s48_value code)
|
||||
{
|
||||
return s48_enter_string(yperr_string(s48_extract_integer(code)));
|
||||
}
|
||||
|
||||
s48_value scsh_yp_proterr(s48_value code)
|
||||
{
|
||||
return s48_enter_integer(ypprot_err(s48_extract_integer(code)));
|
||||
}
|
||||
|
||||
s48_value scsh_yp_match(s48_value indomain, s48_value inmap,
|
||||
s48_value inkey)
|
||||
{
|
||||
int r, l;
|
||||
char *outval;
|
||||
s48_value str, res = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT(5);
|
||||
|
||||
S48_GC_PROTECT_5(indomain, inmap, inkey, res, str);
|
||||
r = yp_match(s48_extract_string(indomain), s48_extract_string(inmap),
|
||||
s48_extract_string(inkey), S48_STRING_LENGTH(inkey),
|
||||
&outval, &l);
|
||||
str = (r == 0) ? s48_enter_string(outval) : S48_UNSPECIFIC;
|
||||
res = s48_list_2 (s48_enter_integer(r), str);
|
||||
S48_GC_UNPROTECT();
|
||||
return res;
|
||||
}
|
||||
|
||||
s48_value scsh_yp_order(s48_value domain, s48_value map)
|
||||
{
|
||||
int r, outorder;
|
||||
s48_value res, i;
|
||||
S48_DECLARE_GC_PROTECT(2);
|
||||
|
||||
S48_GC_PROTECT_2(domain, map);
|
||||
r = yp_order(s48_extract_string(domain), s48_extract_string(map),
|
||||
&outorder);
|
||||
i = (r == 0) ? s48_enter_integer(outorder) : S48_UNSPECIFIC;
|
||||
res = s48_list_2(s48_enter_integer(r), i);
|
||||
S48_GC_UNPROTECT();
|
||||
return res;
|
||||
}
|
||||
|
||||
s48_value scsh_yp_master(s48_value domain, s48_value map)
|
||||
{
|
||||
int r;
|
||||
char *outname;
|
||||
s48_value res, str;
|
||||
S48_DECLARE_GC_PROTECT(4);
|
||||
|
||||
S48_GC_PROTECT_4(domain, map, res, str);
|
||||
r = yp_master(s48_extract_string(domain), s48_extract_string(map),
|
||||
&outname);
|
||||
str = (r == 0) ? s48_enter_string(outname) : S48_UNSPECIFIC;
|
||||
res = s48_list_2(s48_enter_integer(r), str);
|
||||
S48_GC_UNPROTECT();
|
||||
return res;
|
||||
}
|
||||
|
||||
s48_value scsh_yp_first(s48_value domain, s48_value map)
|
||||
{
|
||||
char *key, *val;
|
||||
int keylen, vallen, r;
|
||||
s48_value res, str1, str2;
|
||||
S48_DECLARE_GC_PROTECT(5);
|
||||
|
||||
S48_GC_PROTECT_5(domain, map, res, str1, str2);
|
||||
r = yp_first(s48_extract_string(domain), s48_extract_string(map),
|
||||
&key, &keylen, &val, &vallen);
|
||||
str1 = (r == 0) ? s48_enter_string(key) : S48_UNSPECIFIC;
|
||||
str2 = (r == 0) ? s48_enter_string(val) : S48_UNSPECIFIC;
|
||||
res = s48_list_3(s48_enter_integer(r), str1, str2);
|
||||
S48_GC_UNPROTECT();
|
||||
return res;
|
||||
}
|
||||
|
||||
s48_value scsh_yp_next(s48_value domain, s48_value map, s48_value inkey)
|
||||
{
|
||||
char *key, *val;
|
||||
int keylen, vallen, r;
|
||||
s48_value res, str1, str2;
|
||||
S48_DECLARE_GC_PROTECT(6);
|
||||
|
||||
S48_GC_PROTECT_6(domain, map, inkey, res, str1, str2);
|
||||
r = yp_next(s48_extract_string(domain), s48_extract_string(map),
|
||||
s48_extract_string(inkey), S48_STRING_LENGTH(inkey),
|
||||
&key, &keylen, &val, &vallen);
|
||||
str1 = (r == 0) ? s48_enter_string(key) : S48_UNSPECIFIC;
|
||||
str2 = (r == 0) ? s48_enter_string(val) : S48_UNSPECIFIC;
|
||||
res = s48_list_3(s48_enter_integer(r), str1, str2);
|
||||
S48_GC_UNPROTECT();
|
||||
return res;
|
||||
}
|
||||
|
||||
void scsh_yp_main(void)
|
||||
{
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_badargs, "yp-error-badargs", YPERR_BADARGS);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_baddb, "yp-error-baddb", YPERR_BADDB);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_domain, "yp-error-domain", YPERR_DOMAIN);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_key, "yp-error-key", YPERR_KEY);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_map, "yp-error-map", YPERR_MAP);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_nodom, "yp-error-nodom", YPERR_NODOM);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_nomore, "yp-error-nomore", YPERR_NOMORE);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_pmap, "yp-error-pmap", YPERR_PMAP);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_resrc, "yp-error-resrc", YPERR_RESRC);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_rpc, "yp-error-rpc", YPERR_RPC);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_vers, "yp-error-vers", YPERR_VERS);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_ypbind, "yp-error-bind", YPERR_YPBIND);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_yperr, "yp-error-yperr", YPERR_YPERR);
|
||||
GC_PROTECT_ENTER_INT(scsh_yp_error_ypserv, "yp-error-ypserv", YPERR_YPSERV);
|
||||
|
||||
S48_EXPORT_FUNCTION(scsh_yp_getdefaultdomain);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_bind);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_unbind);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_errstring);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_proterr);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_match);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_order);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_master);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_first);
|
||||
S48_EXPORT_FUNCTION(scsh_yp_next);
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
AC_INIT
|
||||
AC_CONFIG_HEADER(c/config.h)
|
||||
AC_PROG_CC
|
||||
|
||||
AC_ARG_WITH(scsh-includes,
|
||||
AC_HELP_STRING([--with-scsh-includes=DIR],
|
||||
[scsh include files are in DIR [/usr/local/include]]),
|
||||
scsh_includes=$withval,
|
||||
scsh_includes=/usr/local/include)
|
||||
AC_SUBST(scsh_includes)
|
||||
|
||||
AC_ARG_WITH(scsh-libraries,
|
||||
AC_HELP_STRING([--with-scsh-libraries=DIR],
|
||||
[scsh libraries are in DIR [/usr/local/lib/scsh]]),
|
||||
scsh_libraries=$withval,
|
||||
scsh_libraries=/usr/local/lib/scsh)
|
||||
AC_SUBST(scsh_libraries)
|
||||
|
||||
AC_ARG_WITH(scsh-modules,
|
||||
AC_HELP_STRING([--with-scsh-modules=DIR],
|
||||
[scsh modules are in DIR [/usr/local/lib/scsh/modules]]),
|
||||
scsh_modules=$withval,
|
||||
scsh_modules=/usr/local/lib/scsh/modules)
|
||||
AC_SUBST(scsh_modules)
|
||||
AC_CHECK_LIB(crypt, crypt)
|
||||
dnl AC_CHECK_LIB(dl, dlopen)
|
||||
AC_CHECK_LIB(m, exp)
|
||||
AC_CHECK_FUNCS(yp_get_default_domain yp_bind yp_unbind)
|
||||
AC_CHECK_FUNCS(yperr_string ypprot_err)
|
||||
AC_CHECK_FUNCS(yp_match yp_order)
|
||||
AC_CHECK_FUNCS(yp_master yp_first yp_next)
|
||||
|
||||
AC_SUBST(LIBS)
|
||||
AC_SUBST(CC)
|
||||
AC_OUTPUT(Makefile)
|
|
@ -0,0 +1,18 @@
|
|||
(define-interface yp-interface
|
||||
(export
|
||||
(yp-result-code :syntax)
|
||||
yp-result-code-elements
|
||||
yp-result-code-name
|
||||
yp-success?
|
||||
|
||||
yp-get-default-domain
|
||||
yp-bind
|
||||
yp-unbind
|
||||
yp-order
|
||||
yp-master
|
||||
yp-first
|
||||
yp-next
|
||||
yp-map->list
|
||||
yp-error-string
|
||||
yp-protocol-error
|
||||
yp-match))
|
|
@ -0,0 +1,9 @@
|
|||
(define-structure yp yp-interface
|
||||
(open
|
||||
scheme
|
||||
signals
|
||||
srfi-8
|
||||
finite-types
|
||||
let-opt
|
||||
external-calls)
|
||||
(files yp))
|
|
@ -0,0 +1,159 @@
|
|||
(define-syntax lookup-shared-value
|
||||
(syntax-rules ()
|
||||
((lookup-shared-valued str)
|
||||
(shared-binding-ref (lookup-imported-binding str)))))
|
||||
|
||||
(define-finite-type yp-result-code :yp-result-code
|
||||
(id)
|
||||
yp-result-code?
|
||||
yp-result-code-elements
|
||||
yp-result-code-name
|
||||
yp-result-code-index
|
||||
(id yp-result-code-id)
|
||||
((success 0)
|
||||
(bad-args (lookup-shared-value "yp-error-badargs"))
|
||||
(bad-database (lookup-shared-value "yp-error-baddb"))
|
||||
(bad-domain (lookup-shared-value "yp-error-domain"))
|
||||
(unknown-key (lookup-shared-value "yp-error-key"))
|
||||
(unknown-map (lookup-shared-value "yp-error-map"))
|
||||
(no-domain (lookup-shared-value "yp-error-nodom"))
|
||||
(no-more-records (lookup-shared-value "yp-error-nomore"))
|
||||
(portmap-failure (lookup-shared-value "yp-error-pmap"))
|
||||
(allocation-failure (lookup-shared-value "yp-error-resrc"))
|
||||
(rpc-failure (lookup-shared-value "yp-error-rpc"))
|
||||
(bind-failure (lookup-shared-value "yp-error-bind"))
|
||||
(internal-error (lookup-shared-value "yp-error-yperr"))
|
||||
(server-error (lookup-shared-value "yp-error-ypserv"))))
|
||||
|
||||
(define (yp-success? code)
|
||||
(equal? (yp-result-code success) code))
|
||||
|
||||
(define (yp-error-no-more? code)
|
||||
(equal? (yp-result-code no-more-records) code))
|
||||
|
||||
(define (make-finite-type-alist elements id-proc)
|
||||
(map (lambda (e)
|
||||
(cons (id-proc e) e))
|
||||
(vector->list elements)))
|
||||
|
||||
(define translate-result-code
|
||||
(let ((alist (make-finite-type-alist
|
||||
yp-result-code-elements yp-result-code-id)))
|
||||
(lambda (id)
|
||||
(cond
|
||||
((assoc id alist) => cdr)
|
||||
(else
|
||||
(error "yp: internal error. Could not map YP result code to finite type" id))))))
|
||||
|
||||
(define (yp-get-default-domain)
|
||||
(receive (code domain)
|
||||
(apply values (yp-get-default-domain-int))
|
||||
(let ((code (translate-result-code code)))
|
||||
(if (yp-success? code)
|
||||
domain
|
||||
(error "yp: Could not get default domain."
|
||||
(yp-error-string (yp-result-code-id code)))))))
|
||||
|
||||
(define (yp-bind . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(translate-result-code (yp-bind-int domain))))
|
||||
|
||||
(define (yp-unbind . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(translate-result-code (yp-unbind-int domain))))
|
||||
|
||||
(define (yp-match map key . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(receive (code val)
|
||||
(apply values (yp-match-int domain map key))
|
||||
(values (translate-result-code code) val))))
|
||||
|
||||
(define (yp-order map . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(receive (code val)
|
||||
(apply values (yp-order-int domain map))
|
||||
(values (translate-result-code code) val))))
|
||||
|
||||
(define (yp-master map . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(receive (code val)
|
||||
(apply values (yp-master-int domain map))
|
||||
(values (translate-result-code code) val))))
|
||||
|
||||
(define (yp-first map . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(receive (code key val)
|
||||
(apply values (yp-first-int domain map))
|
||||
(values (translate-result-code code) key val))))
|
||||
|
||||
(define (yp-next map key . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(receive (code key val)
|
||||
(apply values (yp-next-int domain map key))
|
||||
(values (translate-result-code code) key val))))
|
||||
|
||||
(define (yp-map->list map . domain)
|
||||
(let-optionals domain
|
||||
((domain (yp-get-default-domain)))
|
||||
(receive (code key val) (yp-first map domain)
|
||||
(if (yp-success? code)
|
||||
(let loop ((key key) (res (cons (cons key val) '())))
|
||||
(receive (code key val)
|
||||
(yp-next map key domain)
|
||||
(cond
|
||||
((yp-error-no-more? code) res)
|
||||
((yp-success? code)
|
||||
(loop key (cons (cons key val) res)))
|
||||
(else
|
||||
(error (yp-error-string code))))))
|
||||
(error (yp-error-string code))))))
|
||||
|
||||
(define (yp-error-string yp-result)
|
||||
(yp-error-string-int (yp-result-code-id yp-result)))
|
||||
|
||||
(import-lambda-definition yp-get-default-domain-int
|
||||
()
|
||||
"scsh_yp_getdefaultdomain")
|
||||
|
||||
(import-lambda-definition yp-bind-int
|
||||
(domain)
|
||||
"scsh_yp_bind")
|
||||
|
||||
(import-lambda-definition yp-unbind-int
|
||||
(domain)
|
||||
"scsh_yp_unbind")
|
||||
|
||||
(import-lambda-definition yp-error-string-int
|
||||
(code)
|
||||
"scsh_yp_errstring")
|
||||
|
||||
(import-lambda-definition yp-protocol-error
|
||||
(code)
|
||||
"scsh_yp_proterr")
|
||||
|
||||
(import-lambda-definition yp-match-int
|
||||
(domain map key)
|
||||
"scsh_yp_match")
|
||||
|
||||
(import-lambda-definition yp-order-int
|
||||
(domain map)
|
||||
"scsh_yp_order")
|
||||
|
||||
(import-lambda-definition yp-master-int
|
||||
(domain map)
|
||||
"scsh_yp_master")
|
||||
|
||||
(import-lambda-definition yp-first-int
|
||||
(domain map)
|
||||
"scsh_yp_first")
|
||||
|
||||
(import-lambda-definition yp-next-int
|
||||
(domain map key)
|
||||
"scsh_yp_next")
|
Loading…
Reference in New Issue